パッケージソフトのテスト戦略


開発者から見たテストの現場
           rev.2


       2010/01/29
     SATO Tomoyuki
    Ariel Networks, Inc.
自己紹介
佐藤 寛之 (SATO Tomoyuki)

✔ アリエル・ネットワーク株式会社


  開発部 ソリューショングループ 所属

✔ プログラマ 時々 プロジェクトマネージャ


✔ 2008年6月より現職
ふだんの仕事
IBMに喧嘩を売るだけの
 簡単なお仕事です
・・・というのを
ニコ生で流しても
いいんでしょうか
多くの企業が抱えている
Lotus Notesという負の遺産を
弊社のグループウェアに移行する
  お手伝いをしています
弊社のグループウェア上で動く
 特定顧客向けのアドインの
  受託開発もやってます
会社はパッケージベンダですが
 私の仕事はSIに近いです
自分語りは
このくらいにして
本日のお題


テスト過剰にどう対処するか
ソフトウェアテストPRESSの
記事では、テストに対する
  取り組みの変遷と
トラブル事例を紹介しました
が
そこで取り上げた内容のうち
プログラマ兼PMの立場から
最大の課題と考えているのは
品質を犠牲にせず
いかにテスト工数を
  削減するか
・・・という部分です
そんなわけで
 今日はこの部分について
掘り下げる形でお話しします
あらすじ

✔ テスト不足と過剰の事例

✔ テスト過剰への対処法(案)
➢ 完璧なソフトウェアを目指さない

➢ テストの自動化
極端な事例1
1年ちょっと前のアリエル
客先にいる
コンサルタントから電話
コンサルタント「このアドインの

ここの動きをこう変えて、ここの
文言もこうしてほしいんだけど」
佐藤「すぐ直します」
電話をつないだまま
おもむろにコードを修正
ビルド
メールで送る
佐藤「今送ったファイルで
 差し替えてください」
所要時間
約15分
とはいえ
第三者による
 テストを通さないのは
ものすごく怖いし危険です
よい子は真似しないでね♪
極端な事例2
 前職
アリエル入社前は
某メーカー系SIerで
SEをやってました
担当していたパッケージで
JavaScriptを1行修正する
   プロジェクト
プロジェクト期間
  約1ヶ月
内訳
プロジェクト開始に関わる
   事務手続き
     2日
品質計画の策定と
レビューと承認
   2日
テスト計画の策定と
 レビューと承認
   2日
設計ドキュメントの作成と
  レビューと承認
     3日
テストケースの作成と
 レビューと承認
    2日
実装
10秒
テストと品質分析/評価
    4日
マニュアル修正
  1日
検査
3日
企業認証絡みの
エビデンス整備
  2日
爆発しろ
物事には
程度というものがあります
教訓
プロジェクト内容を見極めて
プロセステーラリングを
 ちゃんとやりましょう
用語のおさらい: テーラリング

   組織・企業が業務の基本として定めた

標準プロセスや開発標準などを手直しして、個別の

 プロジェクトや顧客の要求に合わせて実用的な

標準(手順・成果物・指標など)を作成・実行すること


     出典:@IT情報マネジメント用語辞典
ご紹介した事例2つは
プロジェクト全体にわたって
 色々問題がありますが
今日はテストの話なので
テストの不足や過剰という
 切り口で考えてみる
テスト不足への対処

✔ 障害事例の分析

✔ ツールや方法論の研究・開発

             ・・・etc.

様々な場で活発に議論されてきた
一方でテスト過剰については
 取り上げられる機会が
  少ないように思える

 ※ 私はテストの専門家ではないので
   気のせいかもしれません
テスト過剰の弊害


✔ スケジュール・予算超過
✔ 価格競争力の低下
✔ 重大なバグの埋没・見逃し
テスト過剰への対処法(案)



✔ 完璧なソフトウェアを目指さない

✔ テストの自動化
1. 完璧なソフトウェアを
   目指さない
“Good enough software”
十分に良いソフトウェア

               出典:
     Andrew Hunt & David Thomas
     “The Pragmatic Programmer”
残存バグ0件や
テストカバレージ100%は
本当に求められているか?
eXtreme Programmingの哲学
 失敗するかもしれない
すべてのことをテストしよう
                      出典:
   Ron Jeffries, Ann Anderson & Chet Hendrickson
         “eXtreme Programming Installed”
逆に捉えると
「失敗しそうにないこと」は
 テストしてはいけない

                     出典:
  Ron Jeffries, Ann Anderson & Chet Hendrickson
        “eXtreme Programming Installed”
常に品質最優先ではなく
スケジュールやコストとの
  トレードオフを
 ちゃんと考えるべき
事例
複雑なワークフローと
多数の帳票を用いる
 旅費精算アドイン
リリース予定日1ヶ月前の状況

✔ テストで検出されるバグが多く

 修正に時間を要して作業が遅延
✔ リリース予定日までに全ての

 テストを完了するのは絶望的
では、残された時間を
何に注力すべきか?
顧客要件の整理


✔ 旅費の金額計算に誤りがないこと
➔ 既にテスト完了しておりクリア


✔ 年度初めに予定通り稼働すること

➔ 作業を削らないと間に合わない!
この段階で
スケジュールに合わせて
品質/機能を落とすという
  決断をしている
残っているテスト内容の分析
  ワークフローのテストが未実施
   (申請経路:約150パターン)

        分析・整理



 担当者や担当組織が異なるだけで
論理的な経路は同じものが多数存在する
       ことが判明
テスト内容の絞り込み
論理的に同じ経路をグルーピングし
各グループから1パターンずつ選択



   テスト対象の申請経路
150パターン ⇒ 19パターン
バグのトリアージ

✔ 申請書を閲覧できないはずのユーザーが

 申請書を閲覧できる
 ➔ 顧客の業務ルールに反するため対処必須

✔ 帳票の印刷時に一部の罫線が消える

 ➔ 業務への影響が軽微ため対処しない
結果

当初の予定通りに本番稼働
 大きな不具合報告は無し


対処しなかったバグについては
保守フェーズ内で順次対応
2.テストの自動化
テストケースが過剰でも
それが自動化されている限り
工数へのインパクトは少ない
アリエルのアドイン開発における
 テスト自動化への取り組み
アドインのユニットテストの自動化

        アドインの実装形態
   XMLによるデータ構造の定義と
  JavaScript on Mozilla Rhinoによる
          ロジックの記述


  こういう特殊な環境下で
 テストの自動化は可能か?
言語はJavaScriptだけど

 実行環境がJavaだから

JsUnitによるテストは難しい
実行環境はJavaだけど

言語はJavaScriptだから

JUnitによるテストは難しい
苦節1年
         JUnit
                 DbUnit

 ねこ                       ねこ




JsUnit                    Selenium
※以下の内容は後ほど詳しく説明します



     JUnitのTestCaseクラスを
  JavaScriptで継承して実装することで
JUnitを用いてスクリプトをテストできそう!
まとめ
No Silver Bullets

技法・方法論・ツールを盲信せず
テストのやり方は自分たちの手で
きちんとテーラリングしよう!
徹底した作業の自動化
  コンピュータにできることは
  コンピュータに任せよう!
人間にしかできないことに集中しよう!
前半終了

ありえるえりあ勉強会@五反田~テスト編~ Part2