なぜプロダクト完成間近のテストではなく、上流品質を高めてバグを減らすべきなのか

なぜプロダクト完成間近のテストではなく、上流品質を高めてバグを減らすべきなのか サムネイル

今回は「なぜプロダクト完成間近のテストではなく、上流品質を高めてバグを減らすべきなのか」についてご紹介します。

関連ワード (BOOKS、アプリケーション開発、テスト・品質、開発プロセス等) についても詳細と、関連コンテンツとをまとめていますので、参考にしながらぜひ本記事について議論していってくださいね。

本記事は、CodeZine様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。


本記事は『ソフトウェア品質を高める開発者テスト アジャイル時代の実践的・効率的なテストのやり方』の「第2章 上流品質向上のためのテスト」を抜粋したものです。掲載にあたって一部を編集しています(注記と参考文献は本書を参考ください)。

上流品質向上のためのテスト

 日本で定説化・定型化されている、すべての工程のバグをシステムテストで解決しようとすると、絶対うまくいきません。Capers Jonesという世界的に著名な学者もカオスな状態になると説いていますし、皆さんも体感しているでしょう(図2.1・図2.2)。

図2.1 Capers Jones の言う正しい状態
図2.1 Capers Jones の言う正しい状態
図2.2 Capers Jones の言うカオスな状態
図2.2 Capers Jones の言うカオスな状態

 なにより製品開発のピークを後半に作ることは(Shift Right)、期日通りに製品を出荷するという意味でもリスクをはらんでいますし、突然最後のフェーズでテスト部隊(たいてい協力会社)が入ってきて、無計画に操作し、バグをたくさん出すというのは健全な製造業として正しい姿ではありません。

 工学において機械設計、電気設計もそんな無茶なことはやっていません。たとえば、バイクが設計書通りにできあがっているか否かを、試作のバイクをいきなり乗り回し、「あー、ここ設計通り作られてないですね!」なんていう機械設計製造があったら、あぶなっかしくてしょうがありません。部品一つ一つの信頼性を事前にチェックし、設計書通りにできあがるかを確認していってから、組み立て後のチェックを行います。

 しかし、ソフトウェア業界では、下流工程において多量のソフトウェア設計はおろか、簡単なコードも書けない協力会社の人がたくさんやってきて、できあがったものをデタラメに操作し、バグを出すのは日常の光景だったりします。

 ほんと日本のソフトウェア開発現場はヤバい。

上流品質活動

 まず上流品質を上げるための活動をざっくり見てみましょう。まあイコール本書の目次となるわけですが。

品質向上 = システムテストをちゃんとやる

 先に説明したように、あまり成熟しない組織ほど上記のような図式で考えています。本書では、そのような方々のために、上流品質の担保についていくつかの提案をしていきます。

  • 要求仕様の明確化
  • クラスや関数構造をシンプルに保つ
  • 単体・統合テストの実行
  • レビューの実施

それらの品質の側面を考慮し素早く実行する!

 それだけのことです。それをしっかり実行すれば、出荷間際の休日出勤や、再現できないバグをチーム一丸で苦労して再現させ修正したり、最後の最後で修正したバグがエンバグで再度ビルドしなおして出荷したりなど、いわゆるエンジニアリング作業で嫌なことはかなり減ります。このことを本書で詳しくゆっくり説明していきます。

さぼる・逆らう人のための上流テスト講座

 前節を読み、

そうだよねー!、「要求仕様の明確化」「クラスや関数構造をシンプルに保つ」をしなきゃ!

というエンジニアもいると思いますが、

「単体・統合テストの実行」「レビューの実施」、そんなことはわかってるよ、上流でやるのが正しいのは。でも忙しくてできないじゃん!

というエンジニア(逆らうエンジニア)もかなりいます。多くの組織で……。

  • マネージメントは上流で品質を担保したいが、部下のエンジニアリング部門が乗り気ではない。すぐ彼らは「忙しい!」と言うので、マネージメントとしてはあきらめかけている。
  • エンジニアも上流で品質を改善したいが、忙しくてそれどころではない。

 そんなジレンマを多くの組織で抱えているのではないでしょうか?

上流品質と出荷後の品質

 忙しいと言って逆らう人々を説得したいので、まず図2.3を見ていただけないでしょうか?

図2.3 上流テストと出荷後の品質[IPA17]
図2.3 上流テストと出荷後の品質

 これは独立行政法人情報処理推進機構から出てきた数値で、あきらかに上流で品質を担保したほうが、出荷後の品質は上がると書いてあります。

 また、そのゴールとしては上流工程では85%以上のバグを発見できれば、たいていのプロジェクトが大きなスケジュール遅れや、出荷後の致命的なバグの発見はないと筆者は考えます。85%のバグを検出するのは正しいコーディングだけではダメで、要求仕様、さらに設計段階でのバグの検出(正しい設計への熟慮)が必要です。

 なにを言わんとしているかというと、いくら後半工程でバグを見つけても、出荷後の不具合が減るかどうかはおのずと限界がある、ということです。ある種の(集合体とも言えるかもしれない)バグというのは、システムテストでは見つからないことが証明されています。表2.1に示すように統合テストで見つかるバグは多くて40%。システムテストで見つかるバグは多くて55%。大規模ベータで60~75%のバグが見つかりますが、大規模ベータなしに(普通の製品は大規模ベータは行わない)、テストだけではかなり広いエリアのバグを見逃します。

表2.1 Beizer のバグ検出[BEI90]
表2.1 Beizer のバグ検出

上流品質と残バグのリスク

 上流でバグをつぶさないと、多くのバグを後半の工程で見つけることになるため、その網の目をくぐり抜けて、出荷後にバグを顧客に見つけられてしまうというリスクがあります。

 ソフトウェア工学において、この開発工数と摘出されるバグの関連性は、図2.4のような特性を持つことが多いです。たとえば、Putnamが次のように言っています。

 早期のコードインスペクション、レビュー、繰り返し型開発、周期的構築などに重点をおくと欠陥摘出曲線は開発の初期(すなわち左側)に移動する
Lawrence H. Putnam

図2.4 レーリー特性1
図2.4 レーリー特性1

 コーディング工数に比例して、またプログラム量に比例してエラーを作り込み(当然単位行数あたりのバグ混入率はどの組織も同様なので)、最後にレビューやインスペクションを十分に実施することなく、テスト開始し大部分のエラーは統合テストやシステムテストで見つけることになります。ここで怖いのは、次の2点です。

  • プロジェクトの後半でバグをつぶすコストは、前半のコストの数倍かかる→効率が悪い=お金がかかる
  • プロジェクトの後半でバグをつぶすと、つぶしきれず出荷後のバグになるリスクがある

 プロジェクトの後半のシステムテストで多くのバグを見つけると、図2.5のように出荷日以降にバグが出ることがあり、それはラッキーかアンラッキーに依存します。前回うまくいったからって、今回うまくいくとは限りません。

図2.5 レーリー特性2
図2.5 レーリー特性2

 もし単体テストやレビューやインスペクションを十分したらどうなるかというと、図2.6のようになります。

図2.6 レーリー特性3
図2.6 レーリー特性3

 レーリー特性1(図2.4)のグラフの形は、ぱっと見ではこれと変わらないかもしれませんが、実態としてはかなり異なるものです。レーリー特性2(図2.5)の最悪のシナリオが成り立ちません。たとえシステムテストの後半にバグが発見されたとしても、プロジェクト期間内なので、市場バグ発生になりません。Shift leftによる効果です(図2.7)。

図2.7 レーリー特性4
図2.7 レーリー特性4

 さらにバグの修正にかかる工数が開発ステージに依存するのは周知の事実です(図2.8)。

図2.8 要求のバグの修正工数[KAR14]
図2.8 要求のバグの修正工数

 図2.8のKarl Wiegersだけではなく、Capers Jonesも開発ステージが1進むと修正工数が倍になると言っています。単体テストで見つけられるバグが統合テストで見つかればコストは倍になるといったように。

 あなたのシステムテストに依存したプロジェクトにレーリー特性を当てはめると、ソフトウェアテスト工学的にも、そして統計学的にも、ある確率で出荷後に確実に致命的なバグが発生します。

まとめ

 本章は重要な章なのでまとめを書きます。

理論的に証明されている上流テストをしない = 出荷後のバグが発生する

  • 上流テストをしなければ、下流テストをいくらしても大きなリスクを持って出荷することになる
  • 上流テストをしなければ、多くのバグを後半でつぶすことになり、出荷日を優先することにより、ある確率でつぶしきれないバグが残る可能性がある
  • 同じバグを上流工程でつぶす場合と、下流工程でつぶす場合には下流工程での場合にはコストが数倍になる。プログラムのできないコストの安いテスト担当者をシステムテストフェーズで雇うことのメリットは皆無である。バグ1件あたりの発見・修正コストが高くなる
  • 最終段階の致命的バグ、もしくは出荷後のバグによるプロジェクト混乱コストが一番高いのはプロジェクトに関わる全員がわかるはずである

 上流でテストしないと、致命的な市場バグが発生し、開発コストが余計かかります。筆者は心理学者ではありませんが、あとにくる痛みを忘れようとするのが人間ではないでしょうか? 学生の頃なら、まだ試験まで時間があるから、今日はちょっと遊んじゃおうと思って遊んでしまい、試験前に徹夜をするということも。これでうまくすれば乗り切れるかもしれません。しかし、乗り切れる場合もあるけど、乗り切れない場合もあるのです。

 出荷後にバグが出るのはわかっているけど、予算もないし、マネージャーも出荷日や機能実装しか考えが及ばず、出荷後のリスク(バグによる売上低下や、市場バグのコスト)について組織全体で目をつぶっていないでしょうか?

 そのようなことにならないように、コストを最小限に抑えつつ、市場でのバグを出さないような手法について、本書で説明していきます。

ソフトウェア品質を高める開発者テスト

Amazon SEshop その他

ソフトウェア品質を高める開発者テスト
アジャイル時代の実践的・効率的なテストのやり方

著者:高橋寿一
発売日:2021年3月17日(水)
定価:2,400円+税

本書について

本書では、アプリ・システム開発において、バグを減らすために開発者が行うべきテスト(開発者テスト)についてわかりやすく解説します。

 

アプリケーション開発の仕事を探す | 在宅ワーク・副業する ...

アプリケーション開発の仕事・求人を探すなら、日本最大級のクラウドソーシングサービス「クラウドワークス」独立・フリーランスから副業、在宅ワーク、内職まであなたにぴったりの案件を探すことができます。未経験や初心者でもOK、高単価案件も見つかります。

AWS CodeStar(AWS アプリケーションの開発とデプロイ)| …

AWS CodeStar では、アプリケーションコードのコーディング、ビルド、テスト、デプロイに使用する開発および継続的な配信ツールチェーン全体を簡単に設定できます。プロジェクトを開始するときは、 Amazon EC2、AWS Lambda、および AWS Elastic Beanstalk に対応するさまざまな AWS CodeStar テンプレートの中 ...

Vue.js入門決定版!jQuery を使わない Web 開発 - 導入から ...

 · Vue.js入門決定版!jQuery を使わない Web 開発 - 導入からアプリケーション開発まで体系的に動画で学ぶ プログラミング関連記事検索APIを用いたリアルタイムサーチ開発を通して、実践的な開発ができるようになります。

アプリケーション開発 | SAP Crystal Solutions(SAPクリスタル ...

Crystal Reportsアプリケーションの開発 SAP Crystal Serverを使わないレポート共有ソリューションとしてカスタムアプリケーションを開発することができます。

OnePlanet、MRグラス「Magic Leap 1」を活用した空間 ...

株式会社OnePlanetのプレスリリース(2021年2月18日 11時00分)OnePlanet、MRグラス[Magic Leap 1]を活用した空間アプリケーション第1弾[Giant Pizza Tower]をリリース!空間アプリケーションの開発パートナー企業募集を開始

アプリケーション識別子 | 標準化活動 | GS1 Japan(一般財団法人 ...

GS1アプリケーション識別子 GS1アプリケーション識別子とは GS1が標準化した、さまざまな情報の種類とフォーマット(データの内容、長さ、および使用可能な文字)を管理する2桁から4桁の数字のコードです。商品製造日、ロット番号などのデータの先頭に付けて使用します。

Google Books

詳細の表示を試みましたが、サイトのオーナーによって制限されているため表示できません。

Bibliomania - Free Online Literature and Study Guides

Enjoy our books. Much more information and our a huge short story collection can be found on the frames version of Bibliomania . 800+ texts of classic literature, drama, and poetry together with detailed literature study guides.

文化出版局

1週間で必ず体がラクになる お手軽気血ごはん 瀬戸佳子 著 週5でだるい、やる気が出ない、いつもクヨクヨしているのは、ぜんぶ「気血不足」のせいだった!今日から始められるお手軽薬膳ごはんで目の下のクマが消えて、手足ポカポカ、前向きな性格に!

Neopets - Objects

詳細の表示を試みましたが、サイトのオーナーによって制限されているため表示できません。

Books Kinokuniya in the World

Sales of Japanese/foreign books, journals (including electronic journals), magazines, CD-ROMs, audio-visual software, stationery, and educational and library equipment/systems; electronic information services; publishing; production of audio-visual software; production of bibliographic databases; management of theaters and an art gallery

Chilton Auto Repair Manual | Online Auto Repair Manuals ...

chilton auto repair manual and online auto repair manuals available with diagrams, videos and pictures, for professionals and do-it-yourself users

HCI Books

Online Bookstore Self-Help,Chicken Soup for the Soul,Recovery,Addiction,Parenting,Love,Relationships,Spirituality, & Pets

Version Control with Subversion

The Standard in Open Source Version Control Version Control with Subversion Introduction This is the home of Version Control with Subversion, a free book about the ubiquitous Apache Subversion® version control system and written by some of the developers of Subversion itself. ...

OpenStax

<div class="nojs"><p>You must enable JavaScript in order to use this site.</p></div>

Madeline

Welcome to the Official Madeline.com website. Ludwig Bemelmans' classic Madeline children's books have been loved by three generations. Madeline has been described as charmingly impetuous, irrepressible, mischievous, and precocious.

COMMENTS


12622:
2021-03-25 20:42

組版のアプリケーションはHaskellやLuaではあまり開発されていない気がする(少なくとも自分はしらない)、というのはおいておいて、ドキュメント処理系のアプリとしてたぶんいちばん選ばれているのはPythonではないだろうか。

12618:
2021-03-25 19:08

弊社が開発した Magic Leap 1アプリケーション「ML Music Live」が日本経済新聞に掲載されました! こちらの事例について、4月15日開催のMeetupでお話して…

12614:
2021-03-25 16:03

株式会社 ビジョンクリエイト<【Javaを用いたWebアプリケーションの開発】テクニカルスキル、業務スキル、どちらも身に着けられます。> 正社員(中途) 大阪府 300万円~ @it_navi

12620:
2021-03-25 14:37

昨今アプリケーション開発は請負型から共創型へと変わってきています。 IBMでは、自社ソリューションのサブスク化や、クラウド化をご検討中の皆様を対象に、テクノロジー面や販路拡大などをご支援する各種プログラムをご用意しています。

12621:
2021-03-25 13:04

IntelliJというJava言語のIDEは、Java言語のアプリケーション開発向けです。もしくは、Java言語の入門の方が、ご自身のエラーを修正しながらプログラミングの練習ができて、便利です。

12624:
2021-03-25 12:47

【H23特 問52 マネジメント系】アプリケーションプログラムの規模を見積もるための基となる情報として,最も適切なものはどれか。/(ア)画面数と帳票数 (イ)システム開発期間 (ウ)システム開発工数 (エ)プログラマの経験年数tecaパスポート

12617:
2021-03-25 10:14

弊社が開発した Magic Leap 1アプリケーション「ML Music Live」が日本経済新聞に掲載されました! こちらの事例について、4月15日開催のMeetupでお話していただきます!(無料…

12616:
2021-03-25 07:42

Webアプリケーションの仕組みと開発の流れは聞かれたのでそこはしっかり抑えておいた方が良いかと思います✨

12623:
2021-03-25 06:58

自社ツールの改修・開発(Windowsアプリからサーバ側の実装まで)の依頼・外注 | Windowsアプリケーション開発の仕事・副業

12615:
2021-03-25 05:30

Rightsは現在エンジニアを募集しています👩‍💻 さまざまなジャンルの受託開発やビデオチャットツールの自社開発をおこなっている会社です📹 応募要件はアプリケーション開発の経験があることのみ! 皆様からのご応募お待ちしています!…

12619:
2021-03-25 03:31

就活まとめ速報のトップページで紹介したいもの募集中!オススメの書籍、自分のバンドのPV、開発したアプリケーションなんでも来い!日間1万PVを超えるブログで紹介しませんか?

Recommended

TITLE
CATEGORY
DATE
JR東、中国SNS「Weibo」で運行情報を発信 アフターコロナ見据え
企業・業界動向
2021-03-26 16:53
競泳・池江璃花子は体調管理にWeb会議ツール活用 五輪まであと3カ月
IT関連
2021-04-15 19:41
テレワークで電気製品を多用、消費電力の上限は要確認 発火する事故も
IT関連
2021-02-02 16:04
NEC、生体認証と連携するIDプラットフォーム 入退室管理や店舗決済を自動化
DX
2021-01-16 02:57
Facebookが2020年の米大統領選挙に関する広告のターゲティングデータを研究者に公開
ネットサービス
2021-01-27 03:23
AIを崇める初の宗教団体を元Googleエンジニアが解散
人工知能・AI
2021-02-23 18:24
湘南ベルマーレが国内初のプロサッカークラブトークン発行、クラブファンディング開始
ブロックチェーン
2021-01-28 04:44
みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習
Udemy
2021-01-28 04:44
澁谷食品、「LINE WORKS」導入–本社・工場・店舗間の情報共有が円滑化
IT関連
2021-02-05 13:22
ロボティクスキットとZoom授業による自宅学習で子どもたちにSTEMスキルを教えるThimble
EdTech
2021-01-16 11:41
「MySQL 8.0.23」がリリース、INVISIBLE列のサポートなど多数の新機能を追加
IT関連
2021-01-22 18:17
バイデン氏、巨大企業の規制推進派カーン氏をFTC委員に指名
IT関連
2021-03-23 19:50
全体的なデータ連携に大きな壁–マーケティングデータマネジメントの取り組み実態
IT関連
2021-02-03 11:19
三菱ケミカルシステム、1日20万件以上のジョブ障害を予兆検知–JP1の運用データを活用
IT関連
2021-02-05 23:42
プリクラ感覚のネイルチップ印刷機「ネルチップ」 タカラトミーが発表 1回500円 専用アプリでアレンジも
くらテク
2021-03-19 07:45
フロントエンドエンジニアになりたい人の Webプログラミング入門
Udemy
2021-03-19 07:45