Upgrade to Pro — share decks privately, control downloads, hide ads and more …

テスト自動化から始めるIoT時代の組込アジャイル開発

Avatar for HIROAKI MATSUNAGA HIROAKI MATSUNAGA
April 13, 2022
16

 テスト自動化から始めるIoT時代の組込アジャイル開発

ET/IoT2016講演資料

Avatar for HIROAKI MATSUNAGA

HIROAKI MATSUNAGA

April 13, 2022
Tweet

Transcript

  1. アジャイル開発のプロセス例  短い期間で潜在的出荷可能(Potentially Shippable)な製 品開発を反復しながら進める 7 仕様 イテレーション 設計 実装

    テスト PSI: Potentially Shippable Increment 仕様 設計 実装 テスト 仕様 設計 実装 テスト 仕様 設計 実装 テスト
  2. 建て増し旅館構造  PSIを積み重ねて開発を続けると、建て増し旅館のよう な構造になりがち 8 PSI PSI PSI PSI PSI

    PSI PSI PSI PSI PSI PSI PSI PSI PSI PSI PSI 定期的にリファクタリング(アーキテクチャレベル)が必要
  3. アジャイル開発の場合 12 コーディング テスト リファクター コーディング テスト リファクター コーディング テスト

    リファクター コーディング テスト リファクター 仕様 イテレーション 設計 実装 テスト 仕様 設計 実装 テスト 仕様 設計 実装 テスト 仕様 設計 実装 テスト
  4. アジャイル開発の場合 13 開発が進む間、回帰テストの量は増加し続けるため 手動で行うにはテストを間引くか、人海戦術しかない イテレーション1 イテレーション1 イテレーション2 イテレーション1 イテレーション2 イテレーション3

    イテレーション1 イテレーション2 イテレーション4 イテレーション3 テストケース数 イテレーション数 仕様 イテレーション 設計 実装 テスト 仕様 設計 実装 テスト 仕様 設計 実装 テスト 仕様 設計 実装 テスト
  5. どんなテストを自動化すべきか  テスト自動化に向いているもの  何度も繰り返し実行するテスト(回帰テストなど)  パラメータだけを変更して同じシナリオで何度も実行するテスト  限界系のテスト、連続(耐久)系のテスト 

    単純な作業を繰り返すテスト(状態遷移テストなど)  テスト自動化に向かないもの  一度しか実施しないテスト(自動化のコストに見合わない)  手順の複雑なテスト(単純なテストに分解すべき)  探索的テスト(人間の創造力が必要)  期待結果が想定できないもの(株価など) 15
  6. テスト自動化導入に対する誤解 誤解 説明 自動化ツールを使えばコストが削減 できるはずだ! 自動化の導入にはコスト、特に初期コストが多くかかるため、コスト 削減を目的にすると早期に失敗と判断してしまいがちになります。コ スト削減は、自動化による品質向上の結果と捉え、中長期的に取 り組むべきでしょう。 自動化ツールを使うと、手動テスト

    は要らなくなるんだよね スクリプトを作った後は、少なくともそのスクリプトが意図した通りに動 作するかどうかのテストは必要です。また、自動テストの主な役割は 回帰テストなので、手動テストがなくなることはありません。 自動化ツールを使うと新しいバグをど んどん見つけてくれて楽ちん♪ 自動テストは、プログラムされた期待値以外のバグを発見することは 出来ません。回帰テストを頻繁に実行することで、品質を保証し続 けることが自動化の主な目的です。 自動テストがFailしたら、即刻バグと して報告します! 自動テストがFailした場合にわかるのは「何らかの調査が必要」という 事だけです。自動スクリプトの不具合かも知れないし、ツール実行マ シンのリソース不足の可能性などもあり得ます。 テストの自動化には、プログラミング のスキルが必要だ。 テスト設計者とスクリプト作成者の役割を分離することにより、テスト 設計者はほぼ自然言語でテストケースを記述できます。
  7. 組み込み開発におけるテストの課題  ハードウェアボトルネック  プロジェクト後半までターゲットハードウェアが準備できない。  ターゲットハードウェアが高価で不足している。  ハードウェア自体にバグがあり、ソフトウェアバグとの切り分け が難しくなる。

     ターゲットビルドやターゲットへのロードに時間がかかるせいで、 コーディングからテストまでのサイクルが長くなる。  ターゲットハードウェア向けのクロスコンパイラが高価であり、 ライセンス数が限られている。 18 テスト駆動開発による組み込みプログラミング[James Grenning]
  8. デュアルターゲッティング戦略 19 ユニットテスト レベルのTDD ターゲット プロセッサ向け にコンパイル 評価ボード等で ユニットテスト を実行

    ターゲット ハードウェア上で ユニットテスト を実行 ステージ1 ステージ2 ステージ3 ステージ4 ターゲット ハードウェア上 で受入れ テストを実行 ステージ5 頻度:高 頻度:低 ホスト環境で実施出来るユニットテストを高頻度に行い ターゲットハードウェアでのテストやデバッグを最小限にする テスト駆動開発による組み込みプログラミング[James Grenning]
  9. デュアルターゲッティング戦略 20 ユニットテスト レベルのTDD ターゲット プロセッサ向け にコンパイル 評価ボード等で ユニットテスト を実行

    ターゲット ハードウェア上で ユニットテスト を実行 ステージ1 ステージ2 ステージ3 ステージ4 ターゲット ハードウェア上 で受入れ テストを実行 ステージ5 頻度:高 頻度:低 テスト駆動開発による組み込みプログラミング[James Grenning] 組み込み領域においては ここの自動化が難しい!
  10. 組み込み領域でシステムテスト自動化が進まない理由  組み込みソフトウェアの場合、下記の理由で適切なツールが 存在しない。  入力I/Fが多様であり、機器ごとに異なるため、  汎用のテストツールが使えない事が多い。  自動化のために機器内蔵ソフトウェアの変更が必要な場合がある。

     UI以外のデジタル/アナログ信号入力に対応する必要がある。  出力の形態が製品それぞれであるため、  機器に合わせた多様な方法で出力をキャプチャーする必要がある。  テスト結果の期待値との比較、自動判定が難しい。 21 ツール Output Input ? ? ? ? ? ? ? ? ? ? テスト対象機器