結合テストでバグが収束しないプロジェクトを立て直した事例
結合テストを始めて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週 | 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週間で行いました。
部品在庫サブシステムの単体テストをやり直す(3/10〜4/4):他と同じ20ケース/KStepの水準まで引き上げる。28KStep × 20 = 560ケースに対し、既存が168ケースなので392ケースを追加作成。この4週間で187件を検出し、結合テストに出る前に潰した
設計書のあいまい箇所を確定させる:118件の原因になった記述を洗い出し、仕様確認票にまとめて業務部門と64項目を確定した
テストデータを本番同等データに差し替える:82件の原因だった、件数不足・パターン不足のテストデータを入れ替えた
移行リハーサルを前倒しで実施する:テストが止まっている間、インフラ担当と業務部門の手が空くため、6月予定のリハーサルを3月に実施した
4つめが、この事例の工夫です。止めるという判断は、止めている間に何をするかとセットで出す。「止めます」だけでは、関係者は不安になります。「止めて、その間にこれとこれをやります」なら、話が通ります。
■ 4週間止めたのに、稼働日が動かなかった理由

工程 | 当初計画 | 実績 |
|---|---|---|
結合テスト | 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つを見てください。
週ごとの発生件数に山ができているか:山ができず横ばいなら、直す速度の問題ではありません。3週続いたら調べ始めてください
出た不具合を「本来どの工程で見つかるべきか」で分ける:結合テストなのに結合の不具合が2割を切っていたら、前工程に戻る判断を検討します
サブシステムごとの不具合密度を出す:偏りがあれば、その担当チームに何が起きているかを見に行きます。たいていは「伝わっていなかった」だけです
そして、いちばん伝えたいことを書きます。前工程に戻る判断は、遅れを生むように見えて、実は遅れを減らします。この事例では4週間止めましたが、止めなければ総合テストで同じことが起き、そこで止まるほうがずっと長くかかったはずです。戻るなら、早いほど安く済みます。