未来PM
プロジェクトマネジメント事例集

結合テストでバグが収束しないプロジェクトを立て直した事例

結合テストを始めて8週間、不具合が毎週55〜63件のペースで出続け、未解決が214件まで積み上がった。この事例は、そこから立て直した記録です。

やったことは、結合テストをいったん止めて、455件の不具合を原因別に分けることでした。分けてみると、結合テストで出るべき「モジュール間の連携の不具合」は4%しかありませんでした。会社名・数字はすべて架空ですが、記事の中で辻褄が合うように作っています。


■ 会社と案件の前提

項目

内容

会社名(架空)

セイワ医科器械株式会社

業種

医療機器メーカー(内視鏡周辺機器・手術室設備)

年商

142億円

従業員数

780名

製品シリーズ

34シリーズ

取引先

病院・診療所 1,900施設

案件名

保守サービス管理システムの刷新(点検・修理・部品在庫・請求)

期間

2024年5月7日 〜 2025年7月1日 本番稼働(14か月)

承認予算枠

2億2,000万円

当初計画額

236人月 × 86万円 = 2億296万円

新規開発規模

112KStep(5サブシステム)

医療機器の保守は、法令で点検の記録を残す義務があります。点検予定を組み、実施記録を残し、部品を交換したらその履歴を製品ごとに追えるようにする。この「追えること」が、この案件でいちばん大事な要件でした。


■ 何を「成功」とみなしたか

観点

合格ライン

なぜその線なのか

Q(品質)

受入テストの不具合密度 0.25件/KStep 以下

点検記録の欠落は法令上の問題になるため、稼働後の不具合を許容できない

C(コスト)

承認枠 2億2,000万円 以内

設備投資枠として取締役会で承認済み

D(納期)

2025年7月1日 稼働

7月から下期の点検計画を新システムで組む必要があるため

この案件では、Qが最優先でした。だからこそ、後で「結合テストを止める」という判断ができています。何を優先するかを先に決めておくと、苦しいときの判断が速くなります。


■ 2025年1月〜2月:不具合が減らない

結合テストは2025年1月6日に始まりました。計画は8週間、2月28日完了です。

ところが、週ごとの発生件数が減りません。ふつう、結合テストの不具合は前半に山を作り、直していくうちに減っていきます。このプロジェクトでは、8週間ずっと横ばいでした。

図1 週次の不具合発生件数と未解決件数

週

発生件数

解決件数

未解決の残り

第1週

42件

18件

24件

第2週

58件

28件

54件

第3週

61件

32件

83件

第4週

55件

34件

104件

第5週

59件

33件

130件

第6週

63件

32件

161件

第7週

57件

32件

186件

第8週

60件

32件

214件

合計

455件

241件

―

2月末時点で、テストケースの消化率は78%、未解決が214件。ここでよく出る意見は「人を増やして直す速度を上げよう」です。実際、ベンダーからは修正要員2名の追加が提案されました。

しかし、その前に確かめるべきことがあります。「なぜ減らないのか」です。直す速度が足りないのか、それとも出続ける理由が別にあるのか。前者なら人を増やせば解決しますが、後者なら人を増やしても同じことが続きます。


■ 455件を原因別に分けた

3月の第1週を使って、それまでに出た455件を1件ずつ見直し、「本来ならどの工程で見つかるべき不具合だったか」で分類しました。

本来見つかるべき工程/原因

件数

割合

単体テストで見つかるべきもの

196件

43%

仕様の解釈違い(設計書のあいまいさ)

118件

26%

テストデータの不備(テスト側の問題)

82件

18%

環境・設定の問題

41件

9%

本当の結合不具合(モジュール間の連携)

18件

4%

合計

455件

100%

この表を見た瞬間に、方針が決まりました。結合テストで結合の不具合が4%しか出ていないということは、このテストは結合テストとして機能していないということです。単体テストの代わりをさせられている状態でした。

人を増やして直す速度を上げても、196件の後ろに控えている単体レベルの不具合が次々に出てくるだけです。直す速度の問題ではなく、入ってくる量の問題でした。

さらに、サブシステム別に見ると偏りがありました。

サブシステム

規模

検出件数

不具合密度(件/KStep)

単体テストのケース密度

点検予定管理

24KStep

68件

2.83

21ケース/KStep

修理受付

31KStep

74件

2.39

22ケース/KStep

部品在庫

28KStep

231件

8.25

6ケース/KStep

請求連携

19KStep

52件

2.74

19ケース/KStep

共通基盤

10KStep

30件

3.00

18ケース/KStep

全体

112KStep

455件

4.06

―

部品在庫だけが、他の3倍近い密度で不具合を出しています。理由もはっきりしました。部品在庫だけ、別のチームが担当していたのです。9月の増員時に加わった要員で構成され、そのチームには単体テストのケース作成基準が共有されていませんでした。他が18〜22ケース/KStepなのに対し、部品在庫は6ケース/KStepしか作っていません。

悪意でも手抜きでもなく、単に伝わっていなかっただけです。こういうことは、増員のタイミングでよく起きます。


■ 打った手:結合テストをいったん止めた

3月7日で結合テストを止め、次の4つを4週間で行いました。

  1. 部品在庫サブシステムの単体テストをやり直す(3/10〜4/4):他と同じ20ケース/KStepの水準まで引き上げる。28KStep × 20 = 560ケースに対し、既存が168ケースなので392ケースを追加作成。この4週間で187件を検出し、結合テストに出る前に潰した

  2. 設計書のあいまい箇所を確定させる:118件の原因になった記述を洗い出し、仕様確認票にまとめて業務部門と64項目を確定した

  3. テストデータを本番同等データに差し替える:82件の原因だった、件数不足・パターン不足のテストデータを入れ替えた

  4. 移行リハーサルを前倒しで実施する:テストが止まっている間、インフラ担当と業務部門の手が空くため、6月予定のリハーサルを3月に実施した

4つめが、この事例の工夫です。止めるという判断は、止めている間に何をするかとセットで出す。「止めます」だけでは、関係者は不安になります。「止めて、その間にこれとこれをやります」なら、話が通ります。


■ 4週間止めたのに、稼働日が動かなかった理由

図2 停止期間を含む実績スケジュール

工程

当初計画

実績

結合テスト

2025/1/6〜2/28(8週)

2025/1/6〜3/7(9週)+ 4/7〜5/23(7週)

単体テストやり直し

―

2025/3/10〜4/4(4週)

移行リハーサル

2025/6/2〜6/27に含む

2025/3/10〜4/4(前倒し)

総合テスト

2025/3/3〜4/18(7週)

2025/5/26〜6/20(4週)

受入テスト

2025/4/21〜5/30(6週)

2025/6/9〜6/27(3週・総合と2週間並行)

本番稼働

2025/7/1

2025/7/1

総合テストと受入テストを2週間だけ重ねました。当初は順番に行う計画でしたが、総合テストの後半で扱う範囲と、受入テストの前半で扱う範囲が重なっていたためです。合計13週の予定を7週にしています。

注意していただきたいのは、これは「急いで雑にやる」短縮ではない点です。テストケースの本数は1本も減らしていません。前倒しと並行で、時期を動かしただけです。もし本数を削っていたら、Qの合格ラインを守れなかったはずです。


■ 再開後:不具合は収束した

週

発生件数

解決件数

未解決の残り

再開 第1週

71件

95件

190件

第2週

48件

88件

150件

第3週

29件

79件

100件

第4週

17件

67件

50件

第5週

11件

41件

20件

第6週

6件

20件

6件

第7週

3件

9件

0件

合計

185件

399件

―

再開第1週の発生が71件と多いことに、驚かれるかもしれません。これは正常な姿です。単体テストをやり直しても、モジュール同士をつないだときに初めて分かる問題は残ります。それがこの71件でした。

大事なのは、そこから48件、29件、17件、11件ときれいに下がっていることです。これが「収束している」状態です。前半8週間は、この下がり方がまったく出ていませんでした。

解決件数が発生件数を大きく上回っているのは、停止前に溜まっていた214件を並行して処理していたためです。7週目に未解決が0件になり、総合テストへ進みました。


■ 結果(QCD)

工程

検出件数

不具合密度(件/KStep)

社内基準

判定

結合テスト(1回目+再開)

640件

5.71

―

―

総合テスト

68件

0.61

0.80以下

基準内

受入テスト

22件

0.20

0.25以下

基準内

稼働後1か月

4件

0.04

0.10以下

基準内

観点

合格ライン

実績

判定

Q(品質)

受入テスト 0.25件/KStep 以下

0.20件/KStep(22件 ÷ 112KStep)

達成

C(コスト)

承認枠 2億2,000万円 以内

2億1,328万円(248人月・枠の97.0%)

達成

D(納期)

2025年7月1日 稼働

2025年7月1日 稼働

達成

コストは計画236人月に対して実績248人月、12人月(1,032万円)の超過です。単体テストのやり直しに使った分です。この12人月を惜しんでいたら、総合テストで同じことが起き、そちらのほうが高くついたはずです。

総合テストの不具合密度0.61は、社内基準0.80以下に収まりました。結合テストがきちんと効いた証拠です。1回目の結合テストのまま進んでいたら、この数字は2倍以上になっていたと見ています。


■ 管理帳票の実物

課題管理表

ID

内容

影響

期限

状態

I-047

結合テストの不具合が8週間横ばいで、未解決が214件に積み上がった

総合テスト着手不可

2025/3/7

完了

I-049

部品在庫の単体テストケース密度が6ケース/KStep(他は18〜22)

単体やり直し +12人月

2025/3/7

完了

I-052

設計書の記述があいまいで、仕様の解釈違いが118件発生

―(64項目を確定して収束)

2025/3/28

完了

I-053

テストデータの件数・パターンが不足しており、82件の原因になっていた

―(本番同等データに差替え)

2025/3/21

完了

I-058

総合テストと受入テストの並行実施で、業務部門の要員が重複する

受入テスト +5日

2025/5/16

完了

リスク管理表

ID

リスク

発生度

影響

監視する数字

対応

R-04

増員した要員に、単体テストの基準が伝わらない

高

結合テストの破綻

サブシステム別の単体テストケース密度(基準18ケース/KStep以上)

着任時に基準を配布し、初回の単体テスト計画をレビューする

R-08

再開後も不具合が収束しない

中

稼働延期

再開第3週の発生件数(40件を超えたら再判断)

40件を超えた場合、部品在庫の機能を段階リリースに切り替える

R-13

点検記録の移行で履歴の欠落が出る

中

法令上の問題

リハーサルでの件数不一致(目標0件)

本番同等データで3回リハーサルを行う

R-16

受入テストの要員(サービス部門)が繁忙期と重なる

中

受入テスト +10日

週次の消化率

受入テストの範囲を、点検・修理・部品の3本に絞って優先実施する

R-08に注目してください。「再開第3週の発生件数が40件を超えたら再判断」と、判定の時期と数字が入っています。実績は29件でしたので、この線は使わずに済みました。打った手が効かなかったときの次の手を、先に書いておくと、現場が落ち着きます。

TODO

内容

担当

期限

状態

455件を原因別に分類し、一覧表にする

ベンダーPL・テスト担当

2025/3/7

完了

部品在庫の追加テストケース392本を作成

部品在庫チーム

2025/3/21

完了

設計書のあいまい箇所64項目を業務部門と確定

業務リーダー

2025/3/28

完了

本番同等テストデータの作成と投入

インフラ担当

2025/3/21

完了

移行リハーサル(前倒し分)の実施

インフラ担当・業務部門

2025/4/4

完了


■ 振り返りと、自分の現場で使うなら

まず反省点です。

  • 増員時に、単体テストの基準を渡していなかった:9月の増員から1月の結合テストまで4か月あったのに、誰も気づけなかった

  • 単体テストの完了を「終わった」という報告だけで確認していた:ケース数や密度という数字で確認していれば、11月の時点で分かった

  • 横ばいの3週目・4週目で動けなかった:8週間見てから動いています。あと3週間早く動けていれば、やり直しに使った4週間はもっと楽でした

次に効いた点です。

  • 「なぜ減らないのか」を先に調べた:人を増やす前に原因を分けたことで、打つ手が変わった

  • 不具合を「本来どの工程で見つかるべきか」で分類した:この切り口だと、テストの設計が悪いのか作りが悪いのかが分かれる

  • 止める判断を、止めている間の予定とセットで出した:移行リハーサルの前倒しが、後で納期を救った

  • 優先順位を先に決めてあった:Q最優先と決めていたので、止めるという判断ができた

最後に、明日から使える形にまとめます。結合テストで不具合が減らないと感じたら、次の3つを見てください。

  1. 週ごとの発生件数に山ができているか:山ができず横ばいなら、直す速度の問題ではありません。3週続いたら調べ始めてください

  2. 出た不具合を「本来どの工程で見つかるべきか」で分ける:結合テストなのに結合の不具合が2割を切っていたら、前工程に戻る判断を検討します

  3. サブシステムごとの不具合密度を出す:偏りがあれば、その担当チームに何が起きているかを見に行きます。たいていは「伝わっていなかった」だけです

そして、いちばん伝えたいことを書きます。前工程に戻る判断は、遅れを生むように見えて、実は遅れを減らします。この事例では4週間止めましたが、止めなければ総合テストで同じことが起き、そこで止まるほうがずっと長くかかったはずです。戻るなら、早いほど安く済みます。

ユーザーコメント(0)

  • まだコメントはありません。

ログイン するとコメントを投稿できます。

ホーム画面に追加する