JUnit導入の成功と失敗
JUnit導入の成功と失敗#Java騎士団 第一回円卓会議@2015/10/27@shimashima35
View Slide
自己紹介@shimashima35http://srad.jp/~shimashima/中小SI勤務(基本下請けなし)Java歴 14年くらい好きなもの maven, テスト, ソフトウェエア工学全般最近IoTで遊んでいますJaSST(ソフトウェアテストシンポジウム)Tokyo 実行委員JSTQB-FL取得 (New @2015/10/26)
本日の内容JUnitによるUnitTest導入の成功事例と失敗事例の紹介。成功要因/失敗要因についての考察。時間があれば「JMeterによる疲れないリグレッションテスト」も……。
UnitTestとは今回の講演でのUnitTestはTDDのUnitTestではありません。自分は書いたプログラムが自分の意図通りに動くことを確認・保証するためのもの。一般的な品質保証の考えでの「単体テスト」です。
成功事例 概要❏ 金融系大規模案件 (300人月以上かな?)❏ 最大プログラマだけで40名程度❏ 2007年頃❏ Java5+Spring 2.5+Hibernate3.2(Annotation)+Spring MVC❏ まだSpring MVCもHibernate 3.2も事例がない❏ 受注したベンダ中に複数の協力会社社員で構成❏ 大半は特定の1社❏ 自分も協力会社(Not 特定の1社)として入った一人
成功事例 JUnit導入経緯と結果❏ 金融系で高品質を求めた❏ アーキテクトが主導した❏ 最終的にお客様とコードカバレッジ100%でコミットした❏ 厳密はgetter/setterなどは除外してよい❏ それでも最終的には95%程度まで達成❏ テストチームによる結合テスト中でも気軽にリファクタリング❏ コードに対して責任を持つ
成功事例 要因❏ 初期段階からUnitTestを意識し設計❏ レイヤーアーキテクチャ、DIなど❏ アーキテクトの力量❏ UnitTest用フレームワークを一人で作成❏ アーキテクトによる適度なコードレビュー❏ おしなべて高かったスキル❏ プロジェクトとしてのコミットメント❏ プロジェクト内の意識の高さ
失敗事例 概要❏ 広告サイト構築案件 (200人月程度?)❏ 最大プログラマだけで60名程度❏ 2009年頃❏ Java6+Seasar2+S2JDBC+SASturts❏ 自社で受注❏ 協力会社多数参加
失敗事例 JUnit導入経緯❏ JUnit成功体験があった自分が参加❏ アーキテクトも「できるだけUnitTestは書きたい」という思い❏ マネジャー的には「どうでもよい」❏ あった方がよい❏ でも、それで進捗が遅れるのはなぁ…
失敗事例 JUnit導入結果❏ カバレッジ率なにそれ?❏ UnitTestはほぼなし❏ 皆があらゆるところを修正するのでテストメンテが事実上破たん❏ mvn -Dmaven.test.skip=true
失敗事例 要因❏ アーキテクトがテストにコミットできなかった❏ マルチタスク❏ マネジャーからの扱い(UnitTestはなくてもよい)❏ スケジュールプレッシャー❏ テストよりまず動くもの❏ プログラマのアサインが画面単位
失敗事例 アサインの問題1. アサインが画面単位2. 一人が全てのレイヤまたがって実装を行う3. 画面に近い部分は別としてService・Domain・Persist層を全員触るa. 共通化されない、Interfaceが契約的ではない、APIが壊れるb. 全員が全レイヤーのテストの書き方を覚えなければならない
成功事例 アサインは?1. アサインがレイヤー単位2. 画面近く画面/機能単位でアサインされる3. Service層/Domain層/Persist層はごく少のアーキテクチームが受け持つa. 業務単位である程度分割されるので、業務単位でクラスのオーナーが決まるb. オーナーがそのクラスの責任者として実装およびテストを書く
まとめ
まとめ❏ スケジュールプレッシャーは天敵❏ マネジャーの支援があると導入しやすい❏ 「テストのための設計・準備」は必要❏ 意外なところでアサインの単位も重要
JMeterによる疲れないテスト
Selenium(WebDriver)あるある❏ テストが壊れる❏ メンテナンスコストが高い❏ 時間がかかる
JMeterによる簡易テスト❏ http(s)によるリクエストレベルでのテスト❏ とりあえずhttpステータスコードのチェック❏ 400番台、500番台は自動的にNG❏ 200番台はOK❏ 302などの自動リダイレク対応❏ テストシナリオはキャプチャー&リプレイをベースに修正
SeleniumとJMeter❏ Seleniumのつかいどころ❏ 画面の動きを見たい・確認したい場合❏ Ajax❏ レイアウト検証❏ JMeterのつかいどころ❏ Web画面からロジックまで含めて検証❏ UIの細かい部分は意識しなくてよい場合❏ 何を検証したいかによって使い分けましょう
ご清聴ありがとうございました。