テストとバグ修正にどれくらいの時間を割り当てるべきか [終了]

StackOverflow https://stackoverflow.com/questions/48439

  •  09-06-2019
  •  | 
  •  

質問

プロジェクトの時間を見積もる必要がある場合 (または他の人の見積もりを確認する必要がある場合) は常に、アルファ版と製品リリースの間に行われるテスト/バグ修正に時間が割り当てられます。サイズが未知の問題セットに関して、遠い将来を見積もることは、見積を成功させるための良い方法ではないことを私はよく知っています。ただし、さまざまな理由により、この作業セグメントには必ず最初に定義された時間が割り当てられます。そして、この初期推定値が実際の最終値から遠ざかるほど、後で推定値を「超えた」ときにデバッグに携わる人々はより大きな悲しみを経験しなければなりません。

そこで私の質問は次のとおりです。このような見積もりを行う際に、これまでに見た中で最善の戦略は何ですか?全体の開発見積もりに対する一定の割合ですか?(上がることを期待して)時間数を設定しますか?他に何か?

他に考慮すべき点:クライアントが (内部 QA ではなく) テストの責任を負っており、クライアントが見つけるかどうかわからないバグに対応する時間を割り当てる必要がある場合、これにどのように答えるでしょうか (したがって、時間の見積もりを把握する必要があります)バグ修正のためですが、テストのためではありません)

役に立ちましたか?

解決

それは本当に多くの要因に依存します。いくつか挙げると、使用している開発方法論、保有しているテスト リソースの量、プロジェクトのこの段階で利用可能な開発者の数 (多くのプロジェクト マネージャーは、最後に人々を新しいものに移します)。

Rob Rolnick が言うように、1:1 は良い経験則ですが、仕様が悪い場合、クライアントは実際には仕様が悪い機能である「バグ」を押し付ける可能性があります。最近、多くのリリースを使用するプロジェクトに参加しましたが、仕様がひどいため、実際の開発よりもバグ修正に多くの時間が費やされました。

適切な仕様/設計を確保すると、テスト/バグ修正にかかる時間が短縮されます。これは、テスターが何をどのようにテストするかを理解しやすくなり、クライアントが追加の機能をプッシュする余地が少なくなるためです。

他のヒント

バグのあるコードを書いているだけかもしれませんが、私は開発とテストの比率を 1:1 にするのが好きです。私はアルファ版まで待ってテストするのではなく、プロジェクト全体を通してテストします。ロジックは?リリース スケジュールによっては、開発の開始日からアルファ版、ベータ版、出荷日までにかなりの時間がかかる場合があります。さらに、バグを早く発見すればするほど、修正が容易になり (そして安価に) なります。

チェックインのたびにすぐにバグを発見する優秀なテスターは非常に貴重です。(あるいは、PR または DPK からのチェックイン前に行うとさらに良いでしょう) 簡単に言えば、私はまだ自分のコードに非常に精通しているため、ほとんどのバグ修正は非常に簡単になります。このアプローチでは、開発時間の約 15% をバグ修正に費やす傾向があります。少なくとも私が見積もりをするときは。したがって、16 週間実行すると、約 2 ~ 3 週間離れることになります。

試練の聖書から:

コンピュータ ソフトウェアのテスト Testing Computer Software

p.31:「テスト[...]は、製品の初期開発の45%を占めています。」したがって、経験則は、最初の開発中にテストに合計努力の約半分を割り当てることです。

正確な見積もりを行うには、以前のプロジェクトから蓄積された大量の統計のみが役立ちます。明確に定義された一連の要件がある場合は、ユースケースの数を大まかに計算できます。先ほども言いましたが、チームの統計が必要です。バグの総数を見積もるには、場所ごとの平均バグ数を知る必要があります。チームにそのような数字がない場合は、次を使用できます。 業界平均数値. 。LOC (ユース ケースの数 * NLOC) と行ごとの平均バグ数を見積もった後、プロジェクトのリリースに必要な時間をほぼ正確に見積もることができます。

私の実際の経験から言えば、バグ修正に費やされる時間は、元の実装に費やされる時間と同等かそれ以上です (99% の場合 :) 。

Design-by-Contract または「コード コントラクト」 (前提条件、チェック アサーション、事後条件、クラス不変条件など) を備えた言語を使用して、クラスやクラスの機能 (メソッドとプロパティ) にできるだけ近い「テスト」を実行します。可能。次に、TDD を使用して、コントラクトを含むコードをテストします。

可能な限り独自に作成したコード生成を使用してください。生成されたコードは実績があり、予測可能で、デバッグが容易で、すべて手作業でコーディングされたコードよりも修正が容易/迅速です。なぜ生成できるものを書くのでしょうか?ただし、OPG (other-peoples-generators) は使用しないでください。あなたが生成するコードは、あなたが管理し、知っているコードです。

プロジェクトの進行中に、比率が逆転することが予想されます。つまり、プロジェクトの開始時に大量のハンドコードとコントラクトを作成することになります (1:1)。パターンが表示されたら、自分で作成したコード ジェネレーターにコードを生成して再利用するよう教えます。生成するものが増えれば増えるほど、設計、作成、デバッグ、テストの手間が減ります。プロジェクトの終わりまでに、方程式が逆転していることがわかります。作成するコア コードの量が減り、焦点は「リーフ コード」 (ラスト マイル) または特殊な (一般化および生成された) コードに移ります。

最後に、コード アナライザーを入手します。優れた自動コード分析ルール システムとエンジンを使用すると、特定の言語でのコードの書き方にはよく知られた落とし穴があるため、「愚かなバグ」を見つける時間を大幅に節約できます。Eiffel には Eiffel Inspector があり、付属の 90 以上のルールを使用するだけでなく、自分で発見した「落とし穴」に対応する独自のルールを作成する方法を学習しています。このようなアナライザーは、バグの点からユーザーを救うだけでなく、デザインを強化します。GREEN プログラマーでもかなり早く「理解」し、初歩的な間違いを早くやめて、より早く学習できるようになります。

既存のシステムを書き直すための経験則は次のとおりです。「書くのに10年かかった場合、書き直すには10年かかります。」私たちの場合、Eiffel、Design-by Contract、コード分析、およびコード生成を使用して、4年で14年間のシステムを書き直し、4 1/2で完全に配信されます。新しいシステムは古いシステムよりも約 4 倍から 5 倍複雑なので、これは多くのことを物語っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top