評価補助ツール開発によるコードカバレッジ測定の導入と不具合防止に向けた取り組み－開発エンジニアによる継続的開発・評価のための仕組み造り－株式会社ワークスアプリケーションズ
COMPANY  Web  Service  Group
エキスパートエンジニア 大畠 悠介

AGENDA! 弊社でのQC活動取り組み状況! 魚の骨分析図! 対策一覧表! カバレッジを運用に乗せる為に実施したこと! オープンソースをベースとしたツール開発! JavaScriptカバレッジ計測ツール! 案件別カバレッジ結果出力ツール! 実際に行っている運用手順! 効果測定No.1

取り組みの背景!

パッケージ製品の開発を重ねていく度に設定値の組み合わせ量が増加し、テスト量が増加し続けている。

!

お客様より製品に対する機能追加の要望も多いため、短いサイクルでの製品リリースを求められる状況は変わらない。

!

過去にテストケースやドキュメントの整備などいくつかの対策を実施した経緯はあるが、目立った改善は見られなかった。

→  出荷後に発見される不具合件数はリリースを重ねるごとに増加傾向にあり、QC活動を通じて、開発・評価の仕組みを改善することでプロダクトの品質を向上しようと本取り組みはスタートした。

No.2

対策概要の一覧

No.3

カバレッジ導入にあたっての問題点! 主要プログラムの１つであるJavaScriptに関する      コードカバレッジが、サポート対象ブラウザにて測定できなかった。
! 10年以上続いている製品の為、デッドコードが存在する箇所も存在し、カバレッジ100%を達成することは不可能であった。
! カバレッジ計測結果の利用方法が分からない開発者や評価者が大勢いた。
! 明確な利用基準が設けられない為に、過去に１度失敗した経緯がある。
No.4

Java  Script  Coverage

No.5

IE/FirefoxでのJSカバレッジ計測ツール

Create!!
No.6

JsCoverageの仕組み
var  ctr  =  0;
document.body.onclick  =  function()  {ctr  =  ctr  +  1;
if  (ctr  >  4)  {alert(ctr);}  else  {alert(ctr);}}

No.7

JsCoverageの仕組み  //BRT_BLOCK_BEGIN:1
var  ctr  =  0;
document.body.onclick  =  function()  {  //BRT_BLOCK_BEGIN:2
ctr  =  ctr  +  1;
if  (ctr  >  4)  {  //BRT_BLOCK_BEGIN:3
alert(ctr);  //BRT_BLOCK_END:3}  else  {//BRT_BLOCK_BEGIN:4alert(ctr);  //BRT_BLOCK_END:4}  //BRT_BLOCK_END:2}//BRT_BLOCK_END:1

No.8

JsCoverageの仕組み  //BRT_BLOCK_BEGIN:1
var  ctr  =  0;
document.body.onclick  =  function()  {  //BRT_BLOCK_BEGIN:2ctr  =  ctr  +  1;
if  (ctr  >  4)  {  //BRT_BLOCK_BEGIN:3alert(ctr);  //BRT_BLOCK_END:3}  else  {//BRT_BLOCK_BEGIN:4
alert(ctr);  //BRT_BLOCK_END:4}  //BRT_BLOCK_END:2}//BRT_BLOCK_END:1

No.9

JsCoverageの仕組み  //BRT_BLOCK_BEGIN:1  var  ctr  =  0;  document.body.onclick  =  function()  {  //BRT_BLOCK_BEGIN:2          ctr  =  ctr  +  1;          if  (ctr  >  4)  {          //BRT_BLOCK_BEGIN:3                  alert(ctr);          //BRT_BLOCK_END:3          }  else  {          //BRT_BLOCK_BEGIN:4                  alert(ctr);          //BRT_BLOCK_END:4          }  //BRT_BLOCK_END:2  };  //BRT_BLOCK_END:1
No.10

JsCoverageの仕組み  //BRT_BLOCK_BEGIN:1  window.scriptObjects['scoverage-a.js-0'].executedBlock[1]  =  (window.scriptObjects['scoveragea.js-0'].executedBlock[1]  ?  window.scriptObjects['scoverage-a.js-    0'].executedBlock[1]  +  1  :  1);  var  ctr  =  0;  document.body.onclick  =  function()  {  //BRT_BLOCK_BEGIN:2  window.scriptObjects['scoverage-a.js-0'].executedBlock[2]  =  (window.scriptObjects['scoveragea.js-0'].executedBlock[2]  ?  window.scriptObjects['scoverage-a.js-0'].executedBlock[2]  +  1  :  1);          ctr  =  ctr  +  1;          if  (ctr  >  4)  {          //BRT_BLOCK_BEGIN:3          window.scriptObjects['scoverage-a.js-0'].executedBlock[3]  =  (window.scriptObjects['scoveragea.js-0'].executedBlock[3]  ?          window.scriptObjects['scoverage-a.js-0'].executedBlock[3]  +  1  :  1);                  alert(ctr);          //BRT_BLOCK_END:3          }  else  {          //BRT_BLOCK_BEGIN:4          window.scriptObjects['scoverage-a.js-0'].executedBlock[4]  =  (window.scriptObjects['scoveragea.js-0'].executedBlock[4]  ?          window.scriptObjects['scoverage-a.js-0'].executedBlock[4]  +  1  :  1);                  alert(ctr);          //BRT_BLOCK_END:4          }  //BRT_BLOCK_END:2  };  //BRT_BLOCK_END:1

No.11

運用手順

No.12

カバレッジ運用に関するご説明の前に・・
部署の開発サイクル・  開発評価の完了基準はカバレッジが100%通っていること
・  品質保証部門はカバレッジ100%のテストケースを閲覧できるため、  テスト観点の抜けをチェック可能No.13

カバレッジを運用に乗せるまでの課題
課題１:  「カバレッジ率90%」の善し悪しが判定できない→  スモールスタートとして、カバレッジ対象ソースコードを前回リリースからの差分のみとし、100%を完了基準にした。

課題２:  カバレッジ測定方法が分からない→  ツールが利用できる環境をクラウド(Amazon  EC2)上に整備し、利用時はインスタンスをコピーするだけの状態とした。

課題３:  カバレッジ測定が面倒くさい→  案件番号を入力するだけで担当分のカバレッジ未通過行一覧
が、EXCELで閲覧可能なツールを開発した。
No.14

前回リリースからの差分のみって？

カバレッジ未通過のカウント方法を変更し、ソース全体  =  カバレッジ通過行  +  未通過行↓
ソース全体  =  既存ソースコード  +  カバレッジ通過行  +  未通過行と考えた。
※SVN等にてソース管理をしていると、ソースの1行1行に対してリビジョンを持っている為、特定(前回リリース番号等)のリビジョンより前の行は「通過行」としてカウント可能にできる！
No.15

未通過行一覧作成ツール    概要１．カバレッジを測定する
２．計測結果を取得
３．ソースと突合する
４．未通過行がエクセルに出力される
５．未通過一覧を利用して、再テスト

No.16

カバレッジ計測  全体図①

Java通過行情報
Js通過行情報②

担当分のみ未通過行一覧

No.17

未通過行一覧の使い方

No.18

環境準備

No.19

JaCoCo(Java  Code  Coverage  Library)!   javaagentを利用したon-the-fly方式!   起動引数に1行追加するだけ！
-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]

例)
WebSphereでは管理コンソールから「アプリケーションサーバ  >  (サーバー名)  >  プロセス定義  >  Java
仮想マシン」の「汎用JVM  引数」に下記の様に追記します。
-javaagent:F:\IBM\WebSphere\AppServer\java\jre\lib\ext\jacocoagent.jar=destfile=F:\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\cws\was.exec,includes=jp/co/worksap/*

No.20

JsCoverage!   JSファイルのInstrument(カバレッジデータ埋め込み)
ディレクトリを指定して、bat/antで実行するだけ!   Webアプリケーションへの配置
WEB-INF/libにjs-coverage-tool.jarを設置
web.xmlに数行追記!   カバレッジデータの収集(レポート出力)
ディレクトリを指定して、bat/antで実行するだけ

No.21

未通過一覧作成ツール!   以下をINIファイルに記載して実行!   SVN認証情報・ソースのディレクトリ!   カバレッジ通過XMLのディレクトリ!   対象としたい開発者の名称など!   リビジョン範囲!   結果ファイル中身!   チェックイン時のコメント!   修正リビジョン番号!   クラス名称・行番号!   開発者名称!   行の内容
No.22

効果測定

No.23

効果測定
!   定量的効果
カバレッジ対策にてフォーカスした要因に対しての不具合件数がリリース毎の不具合数比較にて約７割減少した! 定性的効果
開発時にカバレッジ測定を意識したソースコードを作成する開発者が増加
自主的にカバレッジ測定を開始した部署が出てきた→品質に対する意識が高まったと考えることができる

No.24

こんな場合はぜひカバレッジを！
・組み合わせテストが多いので、Pairwiseなどを利用しているが正しく利用できているかどうか、不安が残っている。
・協力会社等のプロジェクト関係者が多いが、自社に関係する部分だけに絞ったカバレッジを測定したい
・特定期間（特に締切間際など）における、コミュニケーションロス(修正内容把握不足)が心配だ
・開発者が勝手に修正してしまった部分を検知したい

No.25

今後の展望! カバレッジ測定の利用を社外にも広めるため、今回開発した測定ツールをオープンソースとして公開します！
! URL
https://github.com/WorksApplications(今後、QC活動にて作成したツールは上記にてどんどん公開していきます！)

No.26

ご清聴ありがとうございました。
ご質問・ご意見などはohata_y@worksap.co.jp までお願い致します。

No.27