SlideShare uma empresa Scribd logo
1 de 27
第五章
(pp85-100)

組み込みTDD戦略
いままで
●

LEDドライバを例にとったTDD
●

テストケースを書く

●

テストを失敗させる

●

実装する

●

テストが通る

●

リファクタリング
ホストシステムでのテストの価値
今までホストシステム上でのテストをしてきた
●

それらのテストの利点,
       価値とはどういうものなのか

●

なぜ組み込みでTDDを用いるのか
ハードウェアボトルネック
●

組み込みシステムを開発する上で必要なもの
●

●

●

ソフトウェア(ハードウェア駆動(制御)システ
ム)

ハードウェアボトルネックとは?
●

●

●

ハードウェア(モータ,センサ.etc)

ハードウェアが足かせになってしまうこと
ソフトウェアの開発がハードウェアによって,
制限されてしまうこと

どのように開発していくのが効率的か?
ハードウェアボトルネック
●

テスト駆動開発を用いない開発
●

●

ハードウェアが(完成し)ないとソフトウェアのデバッグ
ができない
ハードウェアとソフトウェアを結合したときに多くのバグ
が生じる可能性がある

です
ダメ
進捗 

  
統合後にバグが発生しやすい   
 
開発期間が長くなってしまう(時間を無駄にする)   
それに伴い開発コストもかかる    
ハードウェアボトルネック
●

テスト駆動開発を用いた開発
●

●

ハードウェアの完成を待たずにソフトウェアのデバッ
グができる
ソフトウェアのバグを出来るだけ消しておくことで,
ハードウェアとの統合時に生じるバグを小さくするこ
とができる

!!
です
OK
捗
進

統合後に起こるバグが比較的少ない    
  
 

 

開発期間の短縮化      
開発コストの削減      
ハードウェアボトルネック
●

結果的にテスト駆動開発を用いることで,
ハードウェアボトルネックを回避することができる

●

●

ハードウェア作ってる間にソフトウェアのデバッグを
ほとんど終わらせておけば,統合後が楽!
我々はブロックされない
●

ターゲットハードウェアによってソフトウェアの開発が
左右されない
デュアルターゲット
●

デュアルターゲットとは…
●

最終的に駆動するハードウェアシステムと
ホストシステム(ここでは開発用PCを意味する
と思う)
で駆動できるように設計すること

●

前回までのLEDドライバなら,本来はマイコン
ボードなどで駆動すると思われるものを,PCで
テストしてきた
→デュアルターゲット
デュアルターゲット
●

ハードウェアにもバグがある!
●

●

●

私達はソフトウェアを開発しているが,ハードウェ
アにもバグが有ることを忘れてはいけない
テスト対象のソフトウェアをハードウェアから
完全に切り離してテストすることにより,
ハードウェア,ソフトウェア双方の効率のよい
開発につながる
「ソフトにバグがあると思ってたのにこれLEDのハ
ンダ不良じゃああああああああん」
「あ,マイコンのピンアサイン間違えてた...」
が無くなる
デュアルターゲット
●

デュアルターゲットの利点
●

ハードウェアが準備できる前にコードがテストできる

●

ハードウェアボトルネックを避けることができる

●

ソフトウェアとハードウェアを切り離して開発することがで
きる
→ハードウェアのバグの影響を受けない
→ソフトウェア的には,ハードウェア依存の
             少ない設計ができる
→将来的なプラットフォーム(駆動対象)の変化に対応でき
る
デュアルターゲット
●

デュアルターゲットのリスク
●

ホストシステムとターゲット側の言語機能の違い

●

それぞれのコンパイラにバグがあるかもしれない
→ホストで動いたからといってターゲットでも同
じ動作をするとは限らない

●

ライブラリの違い

●

データ型のサイズの違い→2byte int と4byte int など
デュアルターゲット
●

まとめ
●

デュアルターゲットはハードウェアボトルネック

             の回避に役立つ
●

ハードウェアとソフトウェアをできるだけ切り離
した開発ができる

●

将来的なプラットフォームの変化に対応できる

●

それぞれのコンパイラ,システムの変化に注意
組み込みTDDサイクル
●

組み込みTDDサイクルとは
●

1.4 TDDのマイクロサイクルの拡張版

●

マイクロサイクルだけやっててもダメ.

●

目的はターゲットシステム上で動かすこと
→ターゲットシステム上で動かすために
  TDDを用いて行う開発サイクルのこと
組み込みTDDサイクル
●

ステージ1 [TDDのマイクロサイクル]
●

前回までやってきたLEDドライバのテスト駆動開
発のようなものの繰り返し

●

サイクルの中で最も頻繁に行う

●

プラットフォームに依存しないコードを書く
テストコードを書く
→コードを書く
→テストの成功させる
→リファクタリング
組み込みTDDサイクル
●

ステージ2 [コンパイラの互換性チェック]
●

●

●

●

テストしてきたコードを実際のターゲット向けに
コンパイルする
言語機能,ヘッダ,ライブラリにおけるバグに対応
新しくしようする言語機能,ライブラリ,ヘッダの
使用時にやっておくとよい
ターゲット向けコンパイルが通るかチェック
→実際にターゲットで動くかはわからない

●

ビルドに時間がかかるが,ターゲットにダウンロードす
る時間はかからない
組み込みTDDサイクル
●

ステージ3 [評価ボード上でのユニットテスト]
●

●

●

●

ホストシステムでのコードの実行結果と
ターゲット上での結果をチェックする
ターゲットシステム上でも,ホストシステムで予期し
た振る舞いをするか?
ターゲットハードウェアが使えるのであればそちらを
使ってもよい[ステージ4],がそのハードが本当に信頼
できるかが問題
先に評価ボードで動いていれば,ターゲットで振る舞
いが変わった時にハードのバグだとすぐわかる
組み込みTDDサイクル
●

ステージ4 [ターゲットハード上でのユニットテスト]
●

●

●

目的はステージ3と同じ
ステージ3とは違い,実際のターゲットハードウェアを使っ
てユニットテストを行う.
ターゲットハードウェア固有のテストもできる
→評価ボードは汎用性を高めてあるので
できないテストもある

●

ターゲット上のメモリの容量によってすべてのテストができ
ないかもしれない
→複数のテストスイート(関連するテストケースのセット)
に分割して行う
組み込みTDDサイクル
●

ステージ5 [ターゲット上での受け入れテスト]
●

ターゲット上で自動,及び手動の受け入れテストをする

●

製品機能がきちんと動いているか確認

●

●

自動ではうまくいかないハードウェアに依存するテストは手動でテス
トする

受け入れテスト
●

●

開発したシステムが,要求機能や性能を備えているかどうかを確認す
るテスト
なんで受け入れ?
[クライアント|ユーザ|カスタマー]の指定した要求に答えてるか,その
製品を受け入れることができるかのチェックだから
組み込みTDDサイクル
●

まとめ
●

●

基本的にステージの少ないものをこまめにやっ
て,ある程度やったら次のステージのテスト
をする.コレを繰り返す
もしかしたら評価基板やターゲットが準備出来て
いないかもしれない
→仕方がないのでステージ3までを繰り返す
→臨機応変に,状況を把握しながらやる

●

基本的にステージ1でテストされているので,
コード自体の問題はそこでおおむね解決される
5.5 デュアルターゲットの非互換性
●

プロダクトコードをテストするために
●

●

ホストシステムとターゲットでテストするため
には,2つの環境で同じように動くコードが必要

ランタイムライブラリにおけるバグ
●

ホストシステム上で動いたテストが失敗するの
にターゲット上だと失敗する…とか
→ランタイムライブラリにはバグが有ること
があるということを頭のなかに入れておく必要
が有る
5.5 デュアルターゲットの非互換性
●

strstrの例
●

●

●

引数1の文字列の中から引数2の文字列を検索する
空の文字列は,どんな文字列にも含まれるべき

if (strlen(other) == 0)    もし検索する文字列が空(長さが0)なら
return TRUE;        それは含まれる
else if (strlen(s) == 0) もし検索される文字列が空で,検索する文字列が
return FALSE;   空でないならそれは含まれない(空の文字列に空
else
の文字列以外は含まれない)
return strstr(s, other) !=NULL;

それ以外はこのライブラリの
strstrで対処できる
5.5 デュアルターゲットの非互換性
●

互換性のないヘッダファイル
●

●

ヘッダファイルのシグネチャ,関数名,定義の違い

条件コンパイルをしない
●

●

●

プリプロセッサで対処もできるが…
プラットフォームごとにディレクトリを作成し,そこに
プラットフォーム固有のコードを入れるとよい
プリプロセッサの代わりにコンパイラとリンカを使う
ハードウェアを使ったテスト
●

いままで
●

●

●

ホストシステム上でのテストのみ
組み込みTDDサイクルの3-5ステージのテストは?
→実際にどうやってハードウェア上でテストするの
か?

自動ハードウェアテスト
●

ハードウェアの動作を必要としないテスト

●

テストコードを動かすだけでできるテスト
ハードウェアを使ったテスト
●

部分的自動ハードウェアテスト
●

●

LEDDriverでは,コードを”だまして”いた(virtual leds)

ソフトウェアをテストしているのではない.
組み込みテストをテストする
→ハードウェア依存のバグもテストする
じゃあ・・・?

●

●

テスタに対してマニュアル(手動)でシステムをテ
ストする
ハードウェア依存のコードを少なくすると,
このプロセスでのコードの変更が少ない
ハードウェアを使ったテスト
●

外部装置を使ったテスト
●

●

マニュアルテストまでもを自動化する
手作業を自動化することで,時間の短縮,
作業の効率化を図る
急がば回れ
●

●

●

TDD通した自動テストは,開発していく上
でのセーフティネットになる!
セーフティネットがあれば機能の追加を心
置きなくできる!
TDDは”めんどくさい”けどその価値は確実に
ある
●

1つ1つのプロセスをテストしているのだから
信頼性は確実にある
ま と め
●

ハードウェアに縛られない!ハードとソフトの分離
●

TDDでソフトウェアを思う存分開発!

●

ターゲットの変化にも対応できる!

●

ハードとの統合時のバグを減らす!明確化できる!

●

●

デュアルターゲット時にはリスクもある.
→どのようなことが起こりうるのか頭に入れて開発する
リスクをどう減らすか
→組み込みTDDをサイクルと
ハードウェアテストを用いることで減らせる!

Mais conteúdo relacionado

Mais procurados

20150529 ja sst15東北基調講演web公開用
20150529 ja sst15東北基調講演web公開用20150529 ja sst15東北基調講演web公開用
20150529 ja sst15東北基調講演web公開用
Adachi Kenji
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン
kyon mm
 
なんたって”DevQA” アジャイル開発とQAの合体が改善を生む - 永田 敦 氏 #postudy
なんたって”DevQA” アジャイル開発とQAの合体が改善を生む - 永田 敦 氏 #postudyなんたって”DevQA” アジャイル開発とQAの合体が改善を生む - 永田 敦 氏 #postudy
なんたって”DevQA” アジャイル開発とQAの合体が改善を生む - 永田 敦 氏 #postudy
POStudy
 
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーンメトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
Hiroyuki Ito
 
GTMF 2015: 「テスト管理ツール「CAT」導入によるデバッグ管理の効率化とJenkins Enterpriseによるコンテンツパイプラインの改善」...
GTMF 2015: 「テスト管理ツール「CAT」導入によるデバッグ管理の効率化とJenkins Enterpriseによるコンテンツパイプラインの改善」...GTMF 2015: 「テスト管理ツール「CAT」導入によるデバッグ管理の効率化とJenkins Enterpriseによるコンテンツパイプラインの改善」...
GTMF 2015: 「テスト管理ツール「CAT」導入によるデバッグ管理の効率化とJenkins Enterpriseによるコンテンツパイプラインの改善」...
Game Tools & Middleware Forum
 

Mais procurados (20)

JaSST nano vol.7 「なぜペアワイズテストを使いこなせないのか」
JaSST nano vol.7 「なぜペアワイズテストを使いこなせないのか」JaSST nano vol.7 「なぜペアワイズテストを使いこなせないのか」
JaSST nano vol.7 「なぜペアワイズテストを使いこなせないのか」
 
20150529 ja sst15東北基調講演web公開用
20150529 ja sst15東北基調講演web公開用20150529 ja sst15東北基調講演web公開用
20150529 ja sst15東北基調講演web公開用
 
テストスキルを測ってみよう
テストスキルを測ってみようテストスキルを測ってみよう
テストスキルを測ってみよう
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン
 
system testing in Scrum
system testing in Scrumsystem testing in Scrum
system testing in Scrum
 
なんたって”DevQA” アジャイル開発とQAの合体が改善を生む - 永田 敦 氏 #postudy
なんたって”DevQA” アジャイル開発とQAの合体が改善を生む - 永田 敦 氏 #postudyなんたって”DevQA” アジャイル開発とQAの合体が改善を生む - 永田 敦 氏 #postudy
なんたって”DevQA” アジャイル開発とQAの合体が改善を生む - 永田 敦 氏 #postudy
 
Kaizen process with test #hackt
Kaizen process with test #hacktKaizen process with test #hackt
Kaizen process with test #hackt
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
 
僕らのおれおれメトリクス / We Metrics Our Own Way!
僕らのおれおれメトリクス / We Metrics Our Own Way!僕らのおれおれメトリクス / We Metrics Our Own Way!
僕らのおれおれメトリクス / We Metrics Our Own Way!
 
JaSST '22 Tokyo - B5「テストの素人がゲーム品管組織を作って5年で感じた、QA業界のモヤモヤ」
JaSST '22 Tokyo - B5「テストの素人がゲーム品管組織を作って5年で感じた、QA業界のモヤモヤ」JaSST '22 Tokyo - B5「テストの素人がゲーム品管組織を作って5年で感じた、QA業界のモヤモヤ」
JaSST '22 Tokyo - B5「テストの素人がゲーム品管組織を作って5年で感じた、QA業界のモヤモヤ」
 
テストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornightテストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornight
 
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーンメトリクスによる「見える化」のススメ: エッセンシャル・リーン
メトリクスによる「見える化」のススメ: エッセンシャル・リーン
 
テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)
 
GTMF 2015: 「テスト管理ツール「CAT」導入によるデバッグ管理の効率化とJenkins Enterpriseによるコンテンツパイプラインの改善」...
GTMF 2015: 「テスト管理ツール「CAT」導入によるデバッグ管理の効率化とJenkins Enterpriseによるコンテンツパイプラインの改善」...GTMF 2015: 「テスト管理ツール「CAT」導入によるデバッグ管理の効率化とJenkins Enterpriseによるコンテンツパイプラインの改善」...
GTMF 2015: 「テスト管理ツール「CAT」導入によるデバッグ管理の効率化とJenkins Enterpriseによるコンテンツパイプラインの改善」...
 
DMMアカウントサービス フロントエンド改善支援のためのTestcafeを用いた自動e2eテストの刷新
DMMアカウントサービス フロントエンド改善支援のためのTestcafeを用いた自動e2eテストの刷新DMMアカウントサービス フロントエンド改善支援のためのTestcafeを用いた自動e2eテストの刷新
DMMアカウントサービス フロントエンド改善支援のためのTestcafeを用いた自動e2eテストの刷新
 
【SQiP2016】楽天のアジャイル開発とメトリクス事例
【SQiP2016】楽天のアジャイル開発とメトリクス事例【SQiP2016】楽天のアジャイル開発とメトリクス事例
【SQiP2016】楽天のアジャイル開発とメトリクス事例
 
IT新市場開拓プロジェクトにおけるアジャイル開発 part2
IT新市場開拓プロジェクトにおけるアジャイル開発 part2IT新市場開拓プロジェクトにおけるアジャイル開発 part2
IT新市場開拓プロジェクトにおけるアジャイル開発 part2
 
テストの視点を活用した TDD アプローチの検討とその検証
テストの視点を活用した TDD アプローチの検討とその検証テストの視点を活用した TDD アプローチの検討とその検証
テストの視点を活用した TDD アプローチの検討とその検証
 
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
 
WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略
 

Semelhante a TDD for Embedded C -5章-

TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
Tomomi Kajita
 
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめJenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
atsushi_tmx
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
Takuto Wada
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
kyon mm
 

Semelhante a TDD for Embedded C -5章- (20)

TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
 
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
 
Go azure tfs_service
Go azure tfs_serviceGo azure tfs_service
Go azure tfs_service
 
Gui自動テストツール基本
Gui自動テストツール基本Gui自動テストツール基本
Gui自動テストツール基本
 
Gamedevenvstudy1
Gamedevenvstudy1Gamedevenvstudy1
Gamedevenvstudy1
 
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
 
phpspecで始めるBDD
phpspecで始めるBDDphpspecで始めるBDD
phpspecで始めるBDD
 
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめJenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
 
DELLのグラフィクスVDIの取り組み ~お客様事例ならびにGPUソリューションラボご紹介
DELLのグラフィクスVDIの取り組み ~お客様事例ならびにGPUソリューションラボご紹介DELLのグラフィクスVDIの取り組み ~お客様事例ならびにGPUソリューションラボご紹介
DELLのグラフィクスVDIの取り組み ~お客様事例ならびにGPUソリューションラボご紹介
 
ITS fidel
ITS fidelITS fidel
ITS fidel
 
アジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作りアジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作り
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
 
D2Cコンテスト 2013 参加者トレーニング .NET Gadgeteer の活用
D2Cコンテスト 2013 参加者トレーニング .NET Gadgeteer の活用D2Cコンテスト 2013 参加者トレーニング .NET Gadgeteer の活用
D2Cコンテスト 2013 参加者トレーニング .NET Gadgeteer の活用
 
Itで中小企業の生産性向上5
Itで中小企業の生産性向上5Itで中小企業の生産性向上5
Itで中小企業の生産性向上5
 
TFS超入門。いつやるの。今でしょ
TFS超入門。いつやるの。今でしょTFS超入門。いつやるの。今でしょ
TFS超入門。いつやるの。今でしょ
 
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのか
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのかDeveloper's summit 2021 [19-D-5]なぜ今、ローコードなのか
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのか
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
 

TDD for Embedded C -5章-