7

最新のソース管理システムはすべて、プログラムの履歴を細かく分析することができます。コードを静的および動的に分析するためのツールはたくさんあります。どのような数式を使用すると、ファイル内のアクティビティの量とそのソフトウェアの展開数を統合できますか?プログラムがすべての単体テストを完了したとしても、アップグレード時に予想されるよりも多くの作業が必要であることがわかりました。このタイプの対策は可能であるはずですが、座ってそのユニットについてさえ考えると、私は困惑します。

更新:何かがテストマシンに送信された場合、腐敗が少ないとマークすることがわかりました。何かがすべてのテストボックスに送信されると、新しいマーカーを取得していることがわかります。何かが本番環境に移行した場合、私はそれにうなずき、ビットロットスコアを下げることができます。そのファイル内に多くのアクティビティがあり、それがどこにも送信されない場合、私はそれからがらくたをします。必要なデータが手元にあると想定して、コードに集中しないでください。

どのような種類のコミット分析(コミットコメント(下記)またはコミット間の時間)が適用される公正なデータですか?

更新: 次元分析はおそらく年齢に基づいている可能性があると思います。それに比べてもう少し難しいです。古いコードは腐っています。コードの各行の平均経過時間は、依然として時間の尺度にすぎません。大きいソースモジュールは、小さくて複雑なソースモジュールよりも速く回転しますか?

更新コードカバレッジは行単位で測定されます。多くの場合、実行されるコードは、実行されないコードよりも腐敗が少ない必要があります。ビットロットを正確に測定するには、ダンパーとして機能するカバレッジ分析が必要になります。

4

11 に答える 11

4

非常に興味深い思考の列!

まず、ビットロットとは何ですか?ウィキペディアのSoftwareRotの記事には、いくつかのポイントがあります。

  • 環境の変更:実行時の変更
  • 未使用コード:使用パターンの変更
  • まれに更新されるコード:メンテナンスによる変更
  • リファクタリング:ビットロットを食い止める方法

ムーアの法則によれば、delta(CPU)/delta(t)は18〜24か月ごとに2の定数です。環境にはCPU以上のものが含まれているので、これは環境の実際の変化に対して非常に弱い下限を形成するだけだと思います。単位:OPS / $ / s、時間の経過に伴う1ドルあたりの1秒あたりの操作数の変化

delta(users)/delta(t)数値化するのは難しいですが、ニュースで「知識の時代」という言葉が出現する頻度の証拠から、ユーザーの期待も飛躍的に高まっていると思います。ベーシックエコノミーの発展を見ると、$/flops供給は需要よりも速く成長しており、ムーアの法則がユーザーの変化の上限になっていることがわかります。要件の尺度として、ファンクションポイント(「情報システムがユーザーに提供するビジネス機能の量」)を使用します。単位:FP / s、時間の経過に伴う必要なファンクションポイントの変化

delta(maintenance)/delta(t)組織に完全に依存し、通常、リリースの直前、迅速な修正がプッシュされるとき、および大きな変更を統合するときに非常に高くなります。ここでは、 SLOC、循環的複雑度、実装されたファンクションポイントなどのさまざまな測定値の経時変化を代用として使用できます。もう1つの可能性は、可能であれば、チケットシステムのバグチャーンです。時間の経過とともに、実装されたファンクションポイントを維持します。単位=FP/ s、実装されたファンクションポイントの経時変化

delta(refactoring)/delta(t)新しい機能を実装しないために費やされた時間として測定できます。単位=1、時間の経過に伴うリファクタリングに費やされた時間

だからbitrotは

             d(env)     d(users)     d(maint)        d(t)
bitrot(t) = -------- * ---------- * ---------- * ----------------
              d(t)        d(t)        d(t)        d(refactoring)

             d(env) * d(users) * d(maint)
          = ------------------------------
                d(t)² * d(refactoring)

の結合された単位でOPS/$/s * FP/s * FP/s = (OPS*FP²) / ($*s³)

もちろん、これはWikipediaの記事ですでに述べられていることを、非常に強制的に疑似数学的に表記したものにすぎません。ビットロットは、環境の変更、ユーザーの要件の変更、コードの変更から発生しますが、リファクタリングに時間を費やすことで軽減されます。すべての組織は、これらの変化をどのように測定するかを自分で決定する必要があります。私は非常に一般的な範囲を示しています。

于 2009-04-03T22:45:05.943 に答える
2

私はチャーリーに同意しません。ソースコードのマイナーなリファクタリングは非常に大きなハミング距離をもたらす可能性があり、コードが論理的に変更された程度の適切な尺度を提供しません。

コミットコメントの長さを検討することを検討します。特定のプログラマーにとって、比較的長いコミットコメントは通常、コードに大幅な変更を加えたことを示します。

于 2009-04-03T22:43:42.327 に答える
2

最も簡単な答えはどうですか?

foreach (file in source control){
  file.RotLevel = (Time.Now - file.LastTestedOrDeployed)
}

ファイルが長期間 (本番環境またはテスト マシンに) デプロイされていない場合、「現実」と同期していない可能性があります。環境が変わった可能性があり、ファイルを変更していなくても動作しなくなっている可能性があります。これは単純で正確な式のように思えます。なぜそれをもっと複雑にするのですか?変更の数を含むことは、不確実性を追加するだけのようです。ファイルが最近変更された場合、それは環境の変化を反映するように更新された (「腐敗が少なくなる」) ことを意味するのでしょうか、それとも新しい機能が追加された (エラーのリスクが高まるため、「もっと腐った」)?ファイルへの変更は何を意味する可能性があります。

私が考えることができる唯一の明確な要因は、「ファイルが機能していることを最後に確認してからどのくらい経ちましたか?」ということです。

于 2009-04-03T23:56:19.093 に答える
1

Evidence Based Schedulingを思い出しました。bitrot を示す一連の妥当なメトリックを考え出します (実際の値と、特定の変更によってどれだけ削減されたかの両方)。次に、後で費やされた時間に基づいて、それらがどれほど正確かを判断します。このための数とルールを考え出すのは、おそらく複雑です。

于 2009-04-13T17:18:47.473 に答える
0

コードの総行数に対する単体テストの数の逆比率?

于 2009-04-03T21:46:11.810 に答える
0

考えられる2つの方法について考えてください。ハミング距離やワーグナー距離などの違いを編集します。および情報理論的エントロピー。

于 2009-04-03T21:50:26.930 に答える
0

実際の bitrot (ソフトウェアの腐敗ではない) には、ストレージの物理ボリューム * 時間の次元があります。

Bitrot は、ストレージ メディア内の不純物の放射性崩壊によって引き起こされます。

于 2009-04-20T04:22:04.207 に答える
0

これを掘り下げることに本当に興味がある場合は、いくつかの研究があります。少し前に、組織構造がソフトウェアの品質に与える影響を調べた記事の概念を調べていました。最終的には頭の片隅にアイデアを書き留めてしまいましたが、それが啓発的であることに気付くかもしれません。

于 2009-04-07T17:03:31.360 に答える