あらまし
プログラムは処理を自動化することをさす。
人が指示した通りに動作することが、業務の手助けとなり企業はシステムを導入する。企業に導入するプログラムやシステムが仕様通りに動作するためには、コーディングをした後に不具合や抜け漏れがないかを確認する必要がある。
その確認する作業のことをテストと呼ぶ。テスト作業は、システム開発を行う上で必要不可欠な作業となる。
テストを行う目的
テストをする目的は、システム品質の担保をすること。品質の担保とは、システムの不具合や抜け漏れを洗い出し、その問題を解決すること。システムの問題を全て解決できた状態を品質が担保された状態だといえる。
それにあたり、テストは「問題がないことを証明する」というスタンスでいてはならず、「必ず潜んでいる要件や設計や実装の抜け漏れ誤りを抽出する」というスタンスでいなければならない。
つまり、テストを実施して問題点が発見されなかった場合、問題がない良い状態であることが証明できたということではなく、問題を抽出するに不充分なテストであったということになる。
様々なテストに共通する3つの要素
テスト作業には、どの種類のテストでも必ず共通する要素がある。それはシナリオ・データ・オペレーションの3つとなる。
シナリオは、問題点を抽出するための明確な意思をもったシナリオのこと。テストを行う上で、常に疑いを持った目線で確認を行わなければ不具合や抜け漏れを見つけることは困難となる。そのため、不具合を見つけ出すことへの強い意志をもつことが重要。
データは、言葉通りテストに用いるデータのこと。テーブルに格納されているデータや画面への入力値およびファイル内のレコードをさす。
オペレーションは、操作のこと。テストを行うための操作のことをさす。
V字モデルについて
V字モデルは、システム開発をする上で必要なフェーズをV字型で表すモデルのこと。
横並びとなっている作業要素は結び合っており、要件定義フェーズで取り決めた業務を行うことができるかテストを行うことを業務的テストと呼び、設計フェーズの仕様および実装フェーズのコーディング通りに動作するかテストを行うことをシステム的テストと呼ぶ。
要件定義フェーズ
要件定義フェーズでは、システムを導入する企業が必要としている機能や要望をヒアリング・必要であろう機能の提案などを行う。必要な機能を話し合う。
ここでの話に具体性はあまりなく、大まかな抽象的な内容となっており、こんな機能が欲しい・あれがあったら便利だな、程度の話し合いをする。
要件定義フェーズで、実装が必要な機能を洗い出すことができなければ後々設計や実装に付け足すことになるため、時間と労力がさらにかかってしまう。
そのようなトラブルを起こさないためにも、システム導入する企業について知ること・企業のスタッフの話をヒアリングし業務内容などを想像することが企業に寄り添うことにもつながる。
設計フェーズ
設計フェーズでは、要件定義フェーズで洗い出した実装する機能の中身を具体的に決めていく。
どのようなふるまいが必要か・画面表示はどうするのかなどコーディングするために必要な情報の詳細を決めていく。
実装フェーズ
実装フェーズでは、要件定義フェーズ・設計フェーズで練った内容をコーディングする。
システム的テストのうち、単体テストはこのフェーズに含まれる。
システム的テスト
実装フェーズが完了したら、テストフェーズに入る。テストフェーズは大きく分けて2つあり、システム的テストを先に行う。
システム的テストでは、設計書の仕様通りにシステムが動作するのかをテストする。
システム的テストの具体的な項目は、単体テスト・結合テスト・統合テストなどがある。
テストを行う順番は、規模小さい単体テスト・中規模の結合テスト・システム全体規模の統合テストである。小さい規模の単体テストから行う理由は、大きな規模でテストを行った時に不具合が起きてもどこが原因なのかを見つけることが困難なことにある。大きな規模からテストを行うことは不具合が出ることをわかっていてテストするということになるため、時間も労力も無駄遣いするということになる。このような無駄をなくすためにも、小さい規模である単体テストからテストをする。
なお、単体テストは通常は実装フェーズで行い、機能間のテストである結合テストおよびシステム全体やシステム間連携を含めた振る舞いのテストである統合テストをこのフェーズで行う。
業務的テスト
業務テストは、要件定義で取り決めた業務要件に従い動作するのかをテストする。
業務的テストの具体的な項目は、ユーザ受入テスト(UAT)・運用テスト・権限テストなどがある。
ユーザ受入テストは、システムが問題なく動作するかをプロジェクトメンバーがテストし、それにより検収を行う位置づけ。
運用テストは、システムを使用して業務が滞りなく進められるかを確かめるもの。
権限テストは、部署や立場によって使うことができる機能や見ることができるデータが制限されているかを確認するもの。
感想
ITについて学ぶ前は、システム開発をする上で一番大切な作業はV字モデルでいう実装フェーズの部分だと考えていた。しかし、実装をするための下準備である要件定義フェーズや設計フェーズ、そしてテストフェーズもとても重要だということを学んだ。
実装が完了しても、要望通りに機能が働かない・本来出るべきデータが抽出されないなどの不具合がある状態で企業にシステムが導入されることは考えられない。そういったトラブルを防ぐためにも常に疑いを持ち、テストを行うことが大切だと学んだ。
また、丁寧に細かくテストを行うことで、コーディングの流れや方法、不具合が起きるコーディング、抜け漏れが出る時はどのような思考が至っていないのかなどを学べるだろうなと思った。抜け漏れや不具合を見つけた時には自分自身に注意喚起ができるなと考える。
エンジニアの仕事のスタートはテストだと聞いているので、実際にテストフェーズに関わるようになったら、この勉強会を通して感じたことなどを思い出しながら仕事をしたいと考える。
コメント