1

ある言語から別の言語に移植するプログラムがあります。私は自分で開発している翻訳プログラムでこれをやっています。これに関連する結果として、私のシステムには多くのバグがあり、それらを見つけて修正する必要があると予想されます。各バグは多くの場所で現れる可能性が高く、それを修正すると、バグが現れるすべての場所でバグが修正されます。(私は非常に大きなレバーを持っているように感じ、短い端を押しています。私は非常に強く押していますが、物事が動くと大きく動きます。)

実行ログの差分を実行する機能があるので、元のプログラムの実行から逸脱する前に、テスト スイートをどれだけ実行できるかによって進行状況を測定しています。(BeyondCompare に感謝します。約 1M 行のファイルで十分に機能します:D)

問題は、そのランレングスを時間の関数としてプロットした場合、どのような形になると予想する必要があるかということです。(より多くの時間 == より多くのバグが削除されました)

私の最初の考えは、ポアソン分布のようなものです。ただし、各バグを修正すると、他のすべてのバグも削除されるため、それは完全に正しいとは言えません。

(ところで、これは、プログラムのデバッグがいつ終了するかを見積もることに関して、現実世界に影響を与える可能性があります。)

編集: 問題のより抽象的な声明:

範囲 [0,M] (N>>M) から選択された N 個の整数の順序付きリストが与えられ、リスト内の位置に沿って均一に分布しますが、必ずしも数値が均一に分布するとは限りません。その最後の「新しい」番号の予想される場所はどこですか? 最後から2番目はどうですか?等?

4

2 に答える 2

1

エンジニアは常に指数曲線を探すように訓練されています。

バグ ( t ) = ceil [ c 1 e –c 2 t ] + R( t )

c 1と c 2は、テスト ケースの数とコーディング スキルに依存する定数です。R( ) はランダム関数で、その振幅と分布はバタフライ効果、昨夜の睡眠時間、締め切りとマネージャーの近さに依存します。

  • コーディングを開始する前の t =0 で、すべてのテスト ケースが失敗し、少なくとも c 1個のバグが発生します。

  • コードを記述してtが増加すると、指数はゼロに向かって漸近的に減少し、計算されたバグの数は最終的に 1 に達します。これは、「常にバグが 1 つある」ことを誰もが知っているためです。

于 2008-11-04T02:26:11.737 に答える
0

一般に、時間の関数として検出された新しいバグの数は、ポアソンのような分布に従う必要があります。バグが見つかったときに基本的に修正されると仮定すると、未解決のバグの数は同じ分布に従うはずです。

私は実際、キャリアの早い段階でこれを使用して、特定の機能セットがリリースの準備ができていないことをビジネスユニットに「証明」しました。現在のプロジェクトと以前の2つのバージョンについて、時間の関数として新しいバグと未解決のバグをグラフ化しました。2つの古いデータセットは、最初の急な上昇、ピーク、およびリリース日までの段階的な低下を示しました。現在のデータは、グラフを作成した日まで続く直線的な増加を示しました。

さらに数日間のテストが行​​われ、テスターは製品をより効果的にテストする方法についてトレーニングを受けました。両方の決定のおかげで、リリースは比較的欠陥がありませんでした。

于 2008-11-04T02:53:05.833 に答える