開発環境ではコード品質を向上させるため、多様なテストツールが用いられる。一般的には、コードを実行せずにドキュメントやソースコードなどをチェックすることで、タイプミスや整合性を検出する「静的テスト」と、コードを実行し、その結果からバグの検出や品質評価、動作確認を行う「動的テスト」の2つの手法が用いられる。それぞれ長短あるものの、昨今は両者を組み合わせて、通常のテストでは発見できないバグの検出や、開発工数の削減を実現している企業は少なくない。
ハートランド・データが開発・販売する動的テストツール「DT10」は、コードにテストポイントを自動挿入し、実機のトレースデータを基にした計測や解析を行うことで、ソフトウェア開発の効率化と品質向上を実現するソリューションである。
2009年にDT10をリリースしたハートランド・データは例年、開発現場に多数存在する課題解決を提示するユーザー向けセミナーを開催してきた。2018年で7回目を数える今回は、V字モデル(テストからリリースに至るまでの開発工程とテスト工程の対応関係を示した開発モデル)の左部分を三菱電機、右部分をオムロンの成功事例として紹介。本稿では第7回 DT10活用セミナーの模様をお届けする。
システム開発におけるV字モデル
静的・動的ツールの組み合わせで
コード流用の手間を大幅削減した三菱電機
産業メカトロニクスを扱う三菱電機 名古屋製作所は、「FA(Factory Automation)機器開発におけるDT10活用事例~流用元ファームウェアの理解効率化~」と題して、同社製品のインバータに実装するソフトウェア設計フェーズにおける、DT10の利用例を披露した。具体的には新規ソフトウェア開発ではなく、既存コードを流用した開発時の要求分析と設計の中間に位置し、既存プログラムの分析・理解にDT10を用いたという。
開発現場では多様な需要に対応するため、派生・流用開発を行う場面が多い。そのため、既存コードに対して理解度を深める必要があるが、設計書(ドキュメント)の欠落やコードとドキュメントが合致しないケースは少なくない。三菱電機でも同じようなケースが見受けられ、「開発規模の割に工数がかかる」(三菱電機 名古屋製作所 開発部 ソフトウェア効率化推進グループ 倉田宗典氏)との理由からDT10を導入した。
三菱電機 名古屋製作所 開発部 ソフトウェア効率化推進グループ 倉田宗典氏
DT10導入前はgrepで検索し、print文を挿入して値を出力するといったアナログ的な手法を繰り返していた。もちろん各種ツールを試したが、静的テストツールでは情報過多となり、動的テストツールでは出力結果とコードの合致性が乏しく、最終的に“流用元ソフトウェア構造の理解をさらに効率化する手段の検討が必要”という結論に至った。
そこで三菱電機は、静的テストツールと動的テストツールの出力結果を組み合わせる発想に至り、ハートランド・データと協力し、DT10のログと静的テストツール実行結果からソフトウェア構造を表示して影響範囲を特定するツールを開発した。しかし、実際のプロジェクトでこれを使ってみたところ、「割り込み処理が混ざって表示される」「ポインタの関係が表示されない」「グローバル変数の影響が表示されない」といった多くの指摘を受け、さらなる対策を求められた。
その要望に応じ、同社 ソフトウェア効率化推進グループは、SciToolsの静的テストツール「Understand」とDT10の出力結果を組み合わせた流用コード理解効率化ツール「Azumact」を開発。Understandのプラグインとして動作し、ソフトウェア構造の階層的表示やコード全体を俯瞰的に可視化、動作させた機能および影響のある関数、コードの表示を可能にした。
Azumact導入による効果として、構造の理解から影響範囲の確認までに要する作業時間を調査したところ、導入後は平均68%の削減を実現した。三菱電機では、「アナログ手法を回すよりも、Azumactの利用で手順が短縮したため、時間削減につながった」(倉田氏)と推察している。今後もDT10のトレース情報を利用して、呼び出し順を構造図上に表示し、動作理解を深める改良や、グローバル変数による影響の表示変更、関数呼び出し回数も影響範囲の指標として優先順位を示す変更を予定している。
そのバージョンアップは100%安心といえる?
に対するオムロンの挑戦
多くの検査装置を手掛けるオムロンは、24時間稼働の工場に自社製品を納入している。ある日、製品のソフトウェアをバージョンアップしようとした際、納入先の生産管理技術担当者から「今回の改造、テストの実施は十分ですか?」と問われたと、登壇したオムロン インダストリアルオートメーションビジネスカンパニー 検査システム事業部 開発部 開発2課 吉田邦雄氏は語り始めた。
当然、十分取り組んだことを懇切丁寧に説明したが、担当者からは「本当に? 何で?」と理由の説明を求められたそうだ。このような背景からオムロンは、修正による影響を受けるコードはテストで100%実行し、意図通りに動作することを確認して、安心して使用できる裏付けをユーザーに示せるように、今回の取り組みを始めたという。
オムロン インダストリアルオートメーションビジネスカンパニー 検査システム事業部 開発部 開発2課 吉田邦雄氏
吉田氏の講演「コード変更による影響範囲の特定を活用した品質改善事例~影響範囲の特定と動的テストの効率UPに効くツールチェーンとは~の実際」では、まずハートランド・データと共同開発したソリューション「UndDiffDeps」について説明。UndDiffDepsは、Subversionやgitによる差分情報と、Understandから変更箇所の依存関係情報を取得し、影響を受ける関数リストを生成する。このリストにより、影響を受ける関数に対するテスト実施が可能になる。効果として、不具合検出数が150%に向上し、コード理解も進んだが、その一方でテスト工数が想定比の10倍に膨れ上がってしまい、「作業が増えて面倒くさい」との理由で現場利用は思いのほか進まなかったという。
そこでオムロンは、自作ツールで使い勝手を改善するため、バッチファイルベースで動作していたUndDiffDepsのGUI化に挑戦した。同ツールは、Subversion/gitによるコード構成管理、Redmineによる課題管理を実施。Subversion/gitへのコードコミット時にチケットNo.を登録し、複数のメンバーで構成されたチーム開発を前提としている。UndDiffDeps内の環境変数でDT10プロジェクトファイルや作業フォルダ、Understandのログファイルなどを指定しているが、それらをGUI上から設定することで、利用時のハードルを低くした。
それでもいくつかの課題が浮上した。それは呼び出し側関数の全分岐や、テスト対象外のコードファイルにテストポイントが挿入される問題だった。前者の問題は関数呼び出し位置のファイルリストからキーワードを抽出し、GUIツール側でコードの必要箇所にキーワードを埋め込み、DT10によるテストポイントを挿入。後者はdiff情報から不要なコードファイルを除外する機能を持たせる改良をUndDiffDepsに施した。その結果、テストポイント数は2分の1以下に軽減し、テスト工数もDT10未使用比で2~3倍程度に抑えることができた。
ただ、テストポイントをキーワードの位置に挿入すると、ビルドが通らなくなるケースが散見されるようになった。具体的には条件文内にあるキーワードを指定した場合、条件文の間にテストポイントが挿入されるため、「ハートランド・データさんには改善をお願いしたい」(吉田氏)と述べていた。なお、オムロンは本ツールを製品開発の現場に投入しており、1カ月ほど前にリリースした製品にも利用しているという。
出典:TechFacory 2018年10月1日掲載記事「三菱電機、オムロンが動的テストツール活用のリアルな成功事例を披露」
http://members.techfactory.itmedia.co.jp/tf/members/1809/28/news01.html
まとめ
いかがだったでしょうか。今回は、影響範囲の特定にフォーカスした2社の動的テストツールの活用事例をご紹介しました。
今回の成功事例を参考に、皆様もぜひ動的テストツールの活用をご検討ください。