【12-c-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!!...

29
山根 山根 ゆりえ ゆりえ SESSAME SESSAME 12-C-6 飛行船で萌え 飛行船で萌え 障害 障害 キタ キタ ━━━━ ━━━━ (; (; ´Д ´Д ) ) ━━━━ ━━━━ !!!!! !!!!! ~テスト嫌いエンジニアに贈るテストのすすめ~ ~テスト嫌いエンジニアに贈るテストのすすめ~ 組込みソフトウェア管理者・技術者育成研究会 組込みソフトウェア管理者・技術者育成研究会

Upload: devsumi2009

Post on 24-May-2015

1.057 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

山根山根 ゆりえゆりえ

SESSAMESESSAME

12-C-6

飛行船で萌え飛行船で萌え 障害障害キタキタ━━━━━━━━

(;(;´Д´Д``) ) ━━━━━━━━

!!!!! !!!!! ~テスト嫌いエンジニアに贈るテストのすすめ~~テスト嫌いエンジニアに贈るテストのすすめ~

組込みソフトウェア管理者・技術者育成研究会組込みソフトウェア管理者・技術者育成研究会

Page 2: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

お断りお断り

本資料で使用されているバグ事例は、本資料で使用されているバグ事例は、

デモ映えすることデモ映えすること

誰にでもわかりやすいこと誰にでもわかりやすいこと

を重視して作られたフィクションです。を重視して作られたフィクションです。

実際に発生したバグ事例の紹介ではありません。実際に発生したバグ事例の紹介ではありません。

本資料内で使用した仕様やコードは、本セッション用に製品本資料内で使用した仕様やコードは、本セッション用に製品((マジカルマジカルスプーンスプーン))とは別に作成したものです。このため製品の動作に一切影響とは別に作成したものです。このため製品の動作に一切影響

ありません。ありません。

以上、ご理解の上、ご参照願います。以上、ご理解の上、ご参照願います。

Page 3: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

~当日配布資料~~当日配布資料~

Page 4: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

SESSAMESESSAMEの紹介の紹介

正式名称:組込みソフトウェア管理者・技術者育成研究会正式名称:組込みソフトウェア管理者・技術者育成研究会(SESSAME: Society of Embedded Software Skill Acquisition for Man(SESSAME: Society of Embedded Software Skill Acquisition for Managers and Engineers)agers and Engineers)

活動内容活動内容

組込みソフトウェア技術者や管理者を育成する為のカリキュラムの整備組込みソフトウェア技術者や管理者を育成する為のカリキュラムの整備

そしてその元になる方法論・ツールの開発に関する研究そしてその元になる方法論・ツールの開発に関する研究 etcetc……

名前の由来名前の由来

小さいながらも栄養豊富な「ゴマ」小さいながらも栄養豊富な「ゴマ」

今後の日本の組み込みソフトウェア業界の発展を願うかけ声「開けゴ今後の日本の組み込みソフトウェア業界の発展を願うかけ声「開けゴマ!」マ!」

この二つの意味を込めています。この二つの意味を込めています。 業務上組み込みに係わっていなくても大丈夫組み込み業界以外のメンバーも活躍しています。

組み込みの世界でもオブジェクト指向なんてキーワードで熱く語り合ったりしています。

興味をもたれたら是非お問い合わせください。みんな大歓迎です

Page 5: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

本セッションの見どころ本セッションの見どころ

本日はお忙しい中お越しいただき本日はお忙しい中お越しいただき

誠にありがとうございます誠にありがとうございます

本セッションには2つのテーマを盛り込んでます本セッションには2つのテーマを盛り込んでます

技術者育成の成果技術者育成の成果

テスト技術の紹介テスト技術の紹介

Page 6: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

本セッションができあがるまで本セッションができあがるまでベテランチームの指導のもと、若手チームで今日のための準備をしてきました。ベテランチームの指導のもと、若手チームで今日のための準備をしてきました。

「デブサミ出ないかね?」「えー、無理ですよ」「デブサミ出ないかね?」「えー、無理ですよ」

から始まりました。当初尻込みをする若手に最終的には「やってみたいです」から始まりました。当初尻込みをする若手に最終的には「やってみたいです」

と言わせました。決して押し付けではなく。どうやってその気にさせたのでしょう?と言わせました。決して押し付けではなく。どうやってその気にさせたのでしょう?

その後、若手チームは何度も壁にぶち当たるのですが、その後、若手チームは何度も壁にぶち当たるのですが、

ベテランチームは手を差しのべ過ぎず放置しすぎず適度なフォローをしてくれています。ベテランチームは手を差しのべ過ぎず放置しすぎず適度なフォローをしてくれています。

この原稿を書いているこの原稿を書いている11月の終わり、月の終わり、

思うように進まず不安になった若手メンバーがベテランチームにヘルプを出しました。思うように進まず不安になった若手メンバーがベテランチームにヘルプを出しました。

あとあと22週間を切ってしまっています。ベテラン達はこれに対してどんな対応をするのでしょう?週間を切ってしまっています。ベテラン達はこれに対してどんな対応をするのでしょう?

無事当日を迎えることができるのでしょうか?無事当日を迎えることができるのでしょうか?

今日もきっと冷や汗をかきつつ見守ってくれていることでしょう。今日もきっと冷や汗をかきつつ見守ってくれていることでしょう。

普段管理職をされている方、普段管理職をされている方、

是非ベテランチームのメンバーになったつもりでドキドキ感を味わってください。是非ベテランチームのメンバーになったつもりでドキドキ感を味わってください。

セッション内ではこのテーマは特にとりあげませんが、セッション内ではこのテーマは特にとりあげませんが、

AskTheSpeakerAskTheSpeakerのコーナーにはベテランチームからも出席させていただきますので、のコーナーにはベテランチームからも出席させていただきますので、

「部下を育てる」をテーマにした質問もお待ちしております。「部下を育てる」をテーマにした質問もお待ちしております。

Page 7: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

そんなベテランさんたちに見守られながら、みんなで作り上げたセッションそんなベテランさんたちに見守られながら、みんなで作り上げたセッション

一番意識したことは、非組み込み業界の方々にも共感してもらえる内容であること。一番意識したことは、非組み込み業界の方々にも共感してもらえる内容であること。

そのため、共通の悩みであろうテストをとりあげました。そのため、共通の悩みであろうテストをとりあげました。

そして、組み込みに興味をもってもらいたい、そして、組み込みに興味をもってもらいたい、SESSAMESESSAMEで開発した製品を紹介したい・・・で開発した製品を紹介したい・・・

ちょっと欲張りすぎたかもしれません。ちょっと欲張りすぎたかもしれません。

たくさんの思いを詰め込むために、ただテスト技術を紹介するだけではなく、たくさんの思いを詰め込むために、ただテスト技術を紹介するだけではなく、

仮想プロジェクトで起きたバグの話にしよう。仮想プロジェクトで起きたバグの話にしよう。

仮想プロジェクトで作っているのは仮想プロジェクトで作っているのはSESSAMESESSAMEの製品ということにしよう。の製品ということにしよう。

では、どんなバグにしよう?ここで随分悩みました。では、どんなバグにしよう?ここで随分悩みました。

・みなさんに共感してもらえるバグであること・みなさんに共感してもらえるバグであること

・デモをして見栄えのあるバグであること・デモをして見栄えのあるバグであること

・テスト技術の解説につなげられるバグであること・テスト技術の解説につなげられるバグであること

などなど・・・などなど・・・

本日私たちはこの2つのバグをとりあげることにしました。どんなバグでしょう?お楽しみに。本日私たちはこの2つのバグをとりあげることにしました。どんなバグでしょう?お楽しみに。

Page 8: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

~プレゼン資料~~プレゼン資料~

Page 9: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

自己紹介自己紹介

SESSAME第3世代SESSAME第3世代

組み込みじゃないけどSESSAMEメンバ組み込みじゃないけどSESSAMEメンバ

開発系プロジェクトで火消しをしてました。開発系プロジェクトで火消しをしてました。→テストがらみで悲惨な目にあったことはたくさん→テストがらみで悲惨な目にあったことはたくさん

テストは大嫌いです。テストは大嫌いです。→嫌いだからこそ、より少ないテスト工数で品質をあ→嫌いだからこそ、より少ないテスト工数で品質をあ

げる方法を日々研究しています。げる方法を日々研究しています。

テスト嫌いと思ってたけど・・・テスト嫌いと思ってたけど・・・

実は、嫌いだーと思いながらやっていたのはテスト実は、嫌いだーと思いながらやっていたのはテストじゃなかった?じゃなかった?

Page 10: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

みなさんにお伝えしたいことみなさんにお伝えしたいこと

「テストって何?これ以上時間ないんだけど・・・。」「テストって何?これ以上時間ないんだけど・・・。」

そんなみなさんにも知っててほしい組み込み屋さそんなみなさんにも知っててほしい組み込み屋さ んの検証ノウハウんの検証ノウハウ

Page 11: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

今日のおはなし今日のおはなし

萌えてる飛行船とは萌えてる飛行船とは

開発したシミュレータ開発したシミュレータ

バグバグ

まとめまとめ

Page 12: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

飛行船紹介~マジカルスプーン~飛行船紹介~マジカルスプーン~

今から飛行船飛ぶよ!今から飛行船飛ぶよ!

次にシミュレータで同じ動作をさせるよ!次にシミュレータで同じ動作をさせるよ!

このシミュレータの用途・・・飛行コマンドの練習このシミュレータの用途・・・飛行コマンドの練習

マジカルスプーンは教育教材マジカルスプーンは教育教材

コマンドを正しくたたくためには練習が必要コマンドを正しくたたくためには練習が必要

数十人の生徒が飛行船を使って練習するのは非現数十人の生徒が飛行船を使って練習するのは非現実的実的

Page 13: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

なぜバグが残ってしまったのか?なぜバグが残ってしまったのか?

ちゃんとテストしたつもりなのにバグが出てちゃんとテストしたつもりなのにバグが出てしまった・・・しまった・・・

単体テストもやったつもり単体テストもやったつもり

結合テストもやったつもり結合テストもやったつもり

・・・・・・・・

Page 14: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

バグひとつめバグひとつめ

地上から飛行船が離陸しなくなった地上から飛行船が離陸しなくなった

上昇と下降を繰り返していると発生した上昇と下降を繰り返していると発生した

Page 15: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

バグひとつめバグひとつめ

調べていくうちに・・・地上まで降りた後、再び上昇しようとすると飛ばない

飛ばなくなるわけではなく、しばらく待つと上昇しはじめる

地上に降りたときに何かがある!

Page 16: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

バグひとつめの正体

バグの原因は高度がマイナスになること

Page 17: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

テストベース・・・テストのもとになる、システムの要件、アーキテクチャ、インタフェースなどに関する資料(JSTQB教科書より)

テストベーステストベース

Page 18: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

テストケース

(表形式のテストケース)

ここに西村さん?窪田さん?が作成してくださっているテストケース例をはる

事前条件 イベント 期待結果

TC01 地上停泊中 操作(上昇) 目標位置で停泊状態に遷移

TC02 停泊中 操作(上昇) 目標位置で停泊状態に遷移

TC03 停泊中 操作(下降) 目標位置で停泊状態に遷移

TC04 移動中 操作(前進) 目標位置で停泊状態に遷移

TC05 移動中 操作(右旋回) 目標位置で停泊状態に遷移

TC06 移動中 操作(停止) 直ちに停泊状態に遷移

Page 19: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

スタンバイ 地上停泊中 停泊中 移動中

電源オン ? ? ? ?

起動起動()

→地上停泊中? ? ?

操作

現在位置.垂直=0

?駆動開始()

→停泊中

駆動停止()

→地上停泊中 →停泊中

現在位置.垂直>0 →移動中

現在位置.垂直<0 ? ? ? ?

停止 ?停止()

→スタンバイ? ?

電源オフ × ? ? ?

状態遷移表に整理すると、仕様不明点が多い状態遷移表に整理すると、仕様不明点が多い

状態遷移表状態遷移表

Page 20: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

スタンバイ 地上停泊中 停泊中 移動中

電源オン ? ? ? ?

起動起動()

→地上停泊中? ? ?

操作

現在位置.垂直=0

?駆動開始()

→停泊中

駆動停止()

→地上停泊中 →停泊中

現在位置.垂直>0 →移動中

現在位置.垂直<0 × × × ×

停止 ?停止()

→スタンバイ? ?

電源オフ × ? ? ?

状態遷移表に整理すると、仕様不明点が多い状態遷移表に整理すると、仕様不明点が多い

状態遷移表状態遷移表

Page 21: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

バグふたつめバグふたつめ

Page 22: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

バグふたつめバグふたつめ

調べていくうちに・・・調べていくうちに・・・

操作コマンドに規定値以外の値を送ると発生操作コマンドに規定値以外の値を送ると発生

異常処理があやしい?異常処理があやしい?

Page 23: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

バグふたつめの正体バグふたつめの正体

インターフェースの異常系の仕様について漏れがあった

異常データの場合のシーケンスが決められていなかった

インターフェースに不整合が生じた

Page 24: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

バグふたつめのコードバグふたつめのコード

public string Parse(byte[] data, int len) {// 異常系(取り出し失敗)なら当然例外でしょ。if(data == null) { throw new ArgumentNullException(); }

return Encoding.ASCII.GetString(data, 2, 1);}

var command = Parser.Parse(buf, length);// エラーのときは null が戻る。絶対。if(command == null) {

//エラー処理}else{

呼び先:

やまね

呼び元:

たかはし

パーサ:

受信データを解釈してコマンド文字列を取り出す。

主処理:

COMから受信した生データを処理して飛行船を動かす。

Page 25: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

事前条件 操作入力 期待結果

TC01 移動中 上昇コマンド 上昇する

TC02 移動中 下降コマンド 下降する

TC03 移動中 右旋回コマンド 右旋回する

TC04 移動中 左旋回コマンド 左旋回する

TC05 移動中 前進コマンド 前進する

TC06 移動中 後退コマンド 後退する

: : : :

テストケーステストケース

Page 26: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

バグふたつめのまとめバグふたつめのまとめ

無効同値クラスも考慮しよう

いわゆる

「正常系(有効同値クラス)だけやった」

にならないように

Page 27: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

小さな単位からきちんとテストしないとダメ小さな単位からきちんとテストしないとダメコンポーネントコンポーネント →→ 統合とテストレベルを進めるにあたっては前のテ統合とテストレベルを進めるにあたっては前のテストレベルで目的に応じたテストが実施され、そのレベルで摘出すべストレベルで目的に応じたテストが実施され、そのレベルで摘出すべき欠陥/故障を修正していることが前提き欠陥/故障を修正していることが前提

コンポーネントテストで、コンポーネントとして設定したクラス、コンポコンポーネントテストで、コンポーネントとして設定したクラス、コンポーネント単体レベルの内部動作がI/Oレベルで保証されはじめて、ーネント単体レベルの内部動作がI/Oレベルで保証されはじめて、統合テストでコンポーネント間のI/Fの評価・検証が可能に統合テストでコンポーネント間のI/Fの評価・検証が可能に

単体テスト済み単体テスト済み

結合テスト

まとめまとめ

F1

F1-1

F1-2

F1-1-1

F1-2-1

F1-2-2

F2-1-1

F2-2-1

F2-2-2

F2-1

F2-2

F2

Page 28: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

テストで幸せになるためにテストで幸せになるために

QCDQCD(品質、コスト、納期)(品質、コスト、納期)内で最適解を見つけよう内で最適解を見つけよう

報告は技法、数字を駆使して明解にしよう報告は技法、数字を駆使して明解にしよう

そのためにはテスト技法をマスターしようそのためにはテスト技法をマスターしよう

Page 29: 【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~

ご清聴ご清聴ありがとうございましたありがとうございました

m(_ _)mm(_ _)m

このセッションの作成にあたり以下の皆様にご協力いただきました。ありがとうございました

豆ショッカーズ(有志の方々)SESSAME第3世代のV&V松田さんSESSAMEの先輩方