Weitere ähnliche Inhalte
Mehr von devsumi2009 (20)
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
- 2. お断り
本資料で使用されているバグ事例は、
デモ映えすること
誰にでもわかりやすいこと
を重視して作られたフィクションです。
実際に発生したバグ事例の紹介ではありません。
本資料内で使用した仕様やコードは、本セッション用に製品(マジカル
スプーン)とは別に作成したものです。このため製品の動作に一切影響
ありません。
以上、ご理解の上、ご参照願います。
- 4. SESSAMEの紹介
正式名称:組込みソフトウェア管理者・技術者育成研究会
(SESSAME: Society of Embedded Software Skill Acquisition for Managers and Engineers)
活動内容
組込みソフトウェア技術者や管理者を育成する為のカリキュラムの整備
そしてその元になる方法論・ツールの開発に関する研究 etc…
名前の由来
小さいながらも栄養豊富な「ゴマ」
今後の日本の組み込みソフトウェア業界の発展を願うかけ声「開けゴ
マ!」
この二つの意味を込めています。 業務上組み込みに係わっていなくても大丈夫
組み込み業界以外のメンバーも活躍しています。
組み込みの世界でもオブジェクト指向なんてキーワードで
熱く語り合ったりしています。
興味をもたれたら是非お問い合わせください。
みんな大歓迎です
- 9. 自己紹介
SESSAME第3世代
組み込みじゃないけどSESSAMEメンバ
開発系プロジェクトで火消しをしてました。
→テストがらみで悲惨な目にあったことはたくさん
テストは大嫌いです。
→嫌いだからこそ、より少ないテスト工数で品質をあ
げる方法を日々研究しています。
テスト嫌いと思ってたけど・・・
実は、嫌いだーと思いながらやっていたのはテスト
じゃなかった?
- 15. バグひとつめ
調べていくうちに・・・
地上まで降りた後、再び上昇しようとすると飛ばない
飛ばなくなるわけではなく、しばらく待つと上昇しはじめ
る
地上に降りたときに何かがある!
- 18. テストケース
事前条件 イベント 期待結果
(表形式のテストケース)
地上停泊中 操作(上昇) 目標位置で停泊状態に遷移
TC01
停泊中 操作(上昇) 目標位置で停泊状態に遷移
TC02
ここに西村さん?窪田さん?が
停泊中 操作(下降) 目標位置で停泊状態に遷移
TC03
作成してくださっている
テストケース例をはる
移動中 操作(前進) 目標位置で停泊状態に遷移
TC04
移動中 操作(右旋回) 目標位置で停泊状態に遷移
TC05
移動中 操作(停止) 直ちに停泊状態に遷移
TC06
- 19. 状態遷移表
状態遷移表に整理すると、仕様不明点が多い
スタンバイ 地上停泊中 停泊中 移動中
? ?
電源オン ?
?
起動()
? ?
起動 ?
→地上停泊中
駆動停止()
現在位置.垂直=0
駆動開始() →地上停泊中
? →停泊中
→停泊中
操作
→移動中
現在位置.垂直>0
? ? ? ?
現在位置.垂直<0
停止()
? ?
停止 ?
→スタンバイ
× ? ?
電源オフ ?
- 20. 状態遷移表
状態遷移表に整理すると、仕様不明点が多い
スタンバイ 地上停泊中 停泊中 移動中
? ?
電源オン ?
?
起動()
? ?
起動 ?
→地上停泊中
駆動停止()
現在位置.垂直=0
駆動開始() →地上停泊中
? →停泊中
→停泊中
操作
→移動中
現在位置.垂直>0
× × × ×
現在位置.垂直<0
停止()
? ?
停止 ?
→スタンバイ
× ? ?
電源オフ ?
- 24. バグふたつめのコード
主処理: COMから受信した生データを処理して飛行船を動かす。
var command = Parser.Parse(buf, length);
// エラーのときは null が戻る。絶対。
if(command == null) {
//エラー処理
}else{
呼び元: たかはし
パーサ: 受信データを解釈してコマンド文字列を取り出す。
public string Parse(byte[] data, int len) {
// 異常系(取り出し失敗)なら当然例外でしょ。
if(data == null) { throw new ArgumentNullException(); }
return Encoding.ASCII.GetString(data, 2, 1);
}
呼び先: やまね
- 25. テストケース
事前条件 操作入力 期待結果
移動中 上昇コマンド 上昇する
TC01
移動中 下降コマンド 下降する
TC02
移動中 右旋回コマンド 右旋回する
TC03
移動中 左旋回コマンド 左旋回する
TC04
移動中 前進コマンド 前進する
TC05
移動中 後退コマンド 後退する
TC06
: : :
:
- 27. まとめ
小さな単位からきちんとテストしないとダメ
コンポーネント → 統合とテストレベルを進めるにあたっては前のテ
ストレベルで目的に応じたテストが実施され、そのレベルで摘出すべ
き欠陥/故障を修正していることが前提
コンポーネントテストで、コンポーネントとして設定したクラス、コンポ
ーネント単体レベルの内部動作がI/Oレベルで保証されはじめて、
統合テストでコンポーネント間のI/Fの評価・検証が可能に
単体テスト済み 単体テスト済み
結合テスト F2-1-1
F1-1-1 F1-1
F2-1
F2
F1 F2-2-1
F1-2-1
F1-2
F2-2 F2-2-2
F1-2-2
- 29. ご清聴
ありがとうございました
m(_ _)m
このセッションの作成にあたり以下の皆様にご協力いただきました。
ありがとうございました
豆ショッカーズ(有志の方々)
SESSAME第3世代のV&V松田さん
SESSAMEの先輩方
Hinweis der Redaktion
- <number>
- ・豆蔵さんの紹介はどうするか?・SESSAMEの紹介も必要<number>
- ・組み込み屋さんと同じレベルでテストなんてやってられないですよね。それは私もよーくわかってます。でも、ちょっとまってください。たとえば、料理をするとき、プロのレシピをそのまま真似るのは無理だけど、ちょっと隠し味とか、あるコツをまねるだけで劇的においしくなったりすることありますよね?そんな感じで、生死にかかわるようなシステムと同じテストなんて必要ないけど、そこから得たノウハウには私たちでもおいしいものがあったりしますそういうところをお伝えしたいと思ってます。<テスト嫌いなんですけど、やらないわけにはいかないですよね。嫌いだから何回もやりたくないんですよ。しかもなるべく簡単にすませたい。けど、あとkらバグが見つかるのはくやしい。>これは自己紹介にしよう・SESSAMEのメンバが作った教材に、マジカルスプーンというのがあります。このスプーンをたたいて、あの飛行船の制御をしようというものです。詳しくは後のプレゼンの中でお話させていただきますが、これめっちゃ楽しいねん!というのをみなさんにお伝えできたらいいなと思ってます。聞いてくださった方の中から、僕もやってみたいという方が出てきてくれるとうれしいです。<number>
- ・飛行船本体だと組みこみっぽくなってしまうので、今日はパソコン上で動くシミュレータをとりあげたいと思います。このシミュレータ、ちゃんとテストして出荷したのにバグがあって・・・というありがちなストーリーにのせて実例をあげながら、バグの見つけ方やテストのコツなんかとお話したいと思います。あくまでも今日のお話はフィクションですからね実際にこんな状態で出荷したんじゃありませんよ。ということだけお断りしておきますで、お話の中で、デモを交えつつ、バグの種明かしをしていきます。最後にまとめ代わりにテストに関するお話をして、みなさんにテストについてもうちょっと知りたいなと思ってもらえたら大成功です。ではさっそく本題に入っていきましょう<number>
- ・まずはマジカルスプーンって何?ってとこからご説明させていただきます<number>
- 何回もテストしたはずなのに なぜ不具合が残ってしまうの?テストしたときは正しく動いたのになぜ動かなくなるの?
- <number>
- 状態遷移図変えるクラス図を追加くらい?
- 表にすることによって、組み合わせの網羅ができた理論的にはあり得ないから考えてもみなかったことが・・・知らぬまに実装されてたあり得ない→考慮しない→テストしない状態遷移図からだと今ひとつ問題がみえにくかったので、表にしてみました☆
- 表にすることによって、組み合わせの網羅ができた理論的にはあり得ないから考えてもみなかったことが・・・知らぬまに実装されてたあり得ない→考慮しない→テストしない状態遷移図からだと今ひとつ問題がみえにくかったので、表にしてみました☆
- ・ここで、インタフェースのテストがおざなりになった例を見ましょう。
- <number>
- なので、一般的に言う方(結合テスト)でよいかなーと。 ただ、単体テスト、結合テスト共に、ISTQBでは、それぞれ コンポーネントテスト、統合テストって言います、って一言口頭で言っといた方が 無難だと思います。
- なので、一般的に言う方(結合テスト)でよいかなーと。 ただ、単体テスト、結合テスト共に、ISTQBでは、それぞれ コンポーネントテスト、統合テストって言います、って一言口頭で言っといた方が 無難だと思います。
- ・今回のバグで出たときに実施したテストケースはこんなものです・状態遷移図にマップすると、赤丸の箇所がもれていました。・
- なので、一般的に言う方(結合テスト)でよいかなーと。 ただ、単体テスト、結合テスト共に、ISTQBでは、それぞれ コンポーネントテスト、統合テストって言います、って一言口頭で言っといた方が 無難だと思います。
- なので、一般的に言う方(結合テスト)でよいかなーと。 ただ、単体テスト、結合テスト共に、ISTQBでは、それぞれ コンポーネントテスト、統合テストって言います、って一言口頭で言っといた方が 無難だと思います。