【12-c-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!!...
TRANSCRIPT
山根山根 ゆりえゆりえ
SESSAMESESSAME
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……
名前の由来名前の由来
小さいながらも栄養豊富な「ゴマ」小さいながらも栄養豊富な「ゴマ」
今後の日本の組み込みソフトウェア業界の発展を願うかけ声「開けゴ今後の日本の組み込みソフトウェア業界の発展を願うかけ声「開けゴマ!」マ!」
この二つの意味を込めています。この二つの意味を込めています。 業務上組み込みに係わっていなくても大丈夫組み込み業界以外のメンバーも活躍しています。
組み込みの世界でもオブジェクト指向なんてキーワードで熱く語り合ったりしています。
興味をもたれたら是非お問い合わせください。みんな大歓迎です
本セッションの見どころ本セッションの見どころ
本日はお忙しい中お越しいただき本日はお忙しい中お越しいただき
誠にありがとうございます誠にありがとうございます
本セッションには2つのテーマを盛り込んでます本セッションには2つのテーマを盛り込んでます
技術者育成の成果技術者育成の成果
テスト技術の紹介テスト技術の紹介
本セッションができあがるまで本セッションができあがるまでベテランチームの指導のもと、若手チームで今日のための準備をしてきました。ベテランチームの指導のもと、若手チームで今日のための準備をしてきました。
「デブサミ出ないかね?」「えー、無理ですよ」「デブサミ出ないかね?」「えー、無理ですよ」
から始まりました。当初尻込みをする若手に最終的には「やってみたいです」から始まりました。当初尻込みをする若手に最終的には「やってみたいです」
と言わせました。決して押し付けではなく。どうやってその気にさせたのでしょう?と言わせました。決して押し付けではなく。どうやってその気にさせたのでしょう?
その後、若手チームは何度も壁にぶち当たるのですが、その後、若手チームは何度も壁にぶち当たるのですが、
ベテランチームは手を差しのべ過ぎず放置しすぎず適度なフォローをしてくれています。ベテランチームは手を差しのべ過ぎず放置しすぎず適度なフォローをしてくれています。
この原稿を書いているこの原稿を書いている11月の終わり、月の終わり、
思うように進まず不安になった若手メンバーがベテランチームにヘルプを出しました。思うように進まず不安になった若手メンバーがベテランチームにヘルプを出しました。
あとあと22週間を切ってしまっています。ベテラン達はこれに対してどんな対応をするのでしょう?週間を切ってしまっています。ベテラン達はこれに対してどんな対応をするのでしょう?
無事当日を迎えることができるのでしょうか?無事当日を迎えることができるのでしょうか?
今日もきっと冷や汗をかきつつ見守ってくれていることでしょう。今日もきっと冷や汗をかきつつ見守ってくれていることでしょう。
普段管理職をされている方、普段管理職をされている方、
是非ベテランチームのメンバーになったつもりでドキドキ感を味わってください。是非ベテランチームのメンバーになったつもりでドキドキ感を味わってください。
セッション内ではこのテーマは特にとりあげませんが、セッション内ではこのテーマは特にとりあげませんが、
AskTheSpeakerAskTheSpeakerのコーナーにはベテランチームからも出席させていただきますので、のコーナーにはベテランチームからも出席させていただきますので、
「部下を育てる」をテーマにした質問もお待ちしております。「部下を育てる」をテーマにした質問もお待ちしております。
そんなベテランさんたちに見守られながら、みんなで作り上げたセッションそんなベテランさんたちに見守られながら、みんなで作り上げたセッション
一番意識したことは、非組み込み業界の方々にも共感してもらえる内容であること。一番意識したことは、非組み込み業界の方々にも共感してもらえる内容であること。
そのため、共通の悩みであろうテストをとりあげました。そのため、共通の悩みであろうテストをとりあげました。
そして、組み込みに興味をもってもらいたい、そして、組み込みに興味をもってもらいたい、SESSAMESESSAMEで開発した製品を紹介したい・・・で開発した製品を紹介したい・・・
ちょっと欲張りすぎたかもしれません。ちょっと欲張りすぎたかもしれません。
たくさんの思いを詰め込むために、ただテスト技術を紹介するだけではなく、たくさんの思いを詰め込むために、ただテスト技術を紹介するだけではなく、
仮想プロジェクトで起きたバグの話にしよう。仮想プロジェクトで起きたバグの話にしよう。
仮想プロジェクトで作っているのは仮想プロジェクトで作っているのはSESSAMESESSAMEの製品ということにしよう。の製品ということにしよう。
では、どんなバグにしよう?ここで随分悩みました。では、どんなバグにしよう?ここで随分悩みました。
・みなさんに共感してもらえるバグであること・みなさんに共感してもらえるバグであること
・デモをして見栄えのあるバグであること・デモをして見栄えのあるバグであること
・テスト技術の解説につなげられるバグであること・テスト技術の解説につなげられるバグであること
などなど・・・などなど・・・
本日私たちはこの2つのバグをとりあげることにしました。どんなバグでしょう?お楽しみに。本日私たちはこの2つのバグをとりあげることにしました。どんなバグでしょう?お楽しみに。
~プレゼン資料~~プレゼン資料~
自己紹介自己紹介
SESSAME第3世代SESSAME第3世代
組み込みじゃないけどSESSAMEメンバ組み込みじゃないけどSESSAMEメンバ
開発系プロジェクトで火消しをしてました。開発系プロジェクトで火消しをしてました。→テストがらみで悲惨な目にあったことはたくさん→テストがらみで悲惨な目にあったことはたくさん
テストは大嫌いです。テストは大嫌いです。→嫌いだからこそ、より少ないテスト工数で品質をあ→嫌いだからこそ、より少ないテスト工数で品質をあ
げる方法を日々研究しています。げる方法を日々研究しています。
テスト嫌いと思ってたけど・・・テスト嫌いと思ってたけど・・・
実は、嫌いだーと思いながらやっていたのはテスト実は、嫌いだーと思いながらやっていたのはテストじゃなかった?じゃなかった?
みなさんにお伝えしたいことみなさんにお伝えしたいこと
「テストって何?これ以上時間ないんだけど・・・。」「テストって何?これ以上時間ないんだけど・・・。」
そんなみなさんにも知っててほしい組み込み屋さそんなみなさんにも知っててほしい組み込み屋さ んの検証ノウハウんの検証ノウハウ
今日のおはなし今日のおはなし
萌えてる飛行船とは萌えてる飛行船とは
開発したシミュレータ開発したシミュレータ
バグバグ
まとめまとめ
飛行船紹介~マジカルスプーン~飛行船紹介~マジカルスプーン~
今から飛行船飛ぶよ!今から飛行船飛ぶよ!
次にシミュレータで同じ動作をさせるよ!次にシミュレータで同じ動作をさせるよ!
このシミュレータの用途・・・飛行コマンドの練習このシミュレータの用途・・・飛行コマンドの練習
マジカルスプーンは教育教材マジカルスプーンは教育教材
コマンドを正しくたたくためには練習が必要コマンドを正しくたたくためには練習が必要
数十人の生徒が飛行船を使って練習するのは非現数十人の生徒が飛行船を使って練習するのは非現実的実的
なぜバグが残ってしまったのか?なぜバグが残ってしまったのか?
ちゃんとテストしたつもりなのにバグが出てちゃんとテストしたつもりなのにバグが出てしまった・・・しまった・・・
単体テストもやったつもり単体テストもやったつもり
結合テストもやったつもり結合テストもやったつもり
・・・・・・・・
バグひとつめバグひとつめ
地上から飛行船が離陸しなくなった地上から飛行船が離陸しなくなった
上昇と下降を繰り返していると発生した上昇と下降を繰り返していると発生した
バグひとつめバグひとつめ
調べていくうちに・・・地上まで降りた後、再び上昇しようとすると飛ばない
飛ばなくなるわけではなく、しばらく待つと上昇しはじめる
地上に降りたときに何かがある!
バグひとつめの正体
バグの原因は高度がマイナスになること
テストベース・・・テストのもとになる、システムの要件、アーキテクチャ、インタフェースなどに関する資料(JSTQB教科書より)
テストベーステストベース
テストケース
(表形式のテストケース)
ここに西村さん?窪田さん?が作成してくださっているテストケース例をはる
事前条件 イベント 期待結果
TC01 地上停泊中 操作(上昇) 目標位置で停泊状態に遷移
TC02 停泊中 操作(上昇) 目標位置で停泊状態に遷移
TC03 停泊中 操作(下降) 目標位置で停泊状態に遷移
TC04 移動中 操作(前進) 目標位置で停泊状態に遷移
TC05 移動中 操作(右旋回) 目標位置で停泊状態に遷移
TC06 移動中 操作(停止) 直ちに停泊状態に遷移
スタンバイ 地上停泊中 停泊中 移動中
電源オン ? ? ? ?
起動起動()
→地上停泊中? ? ?
操作
現在位置.垂直=0
?駆動開始()
→停泊中
駆動停止()
→地上停泊中 →停泊中
現在位置.垂直>0 →移動中
現在位置.垂直<0 ? ? ? ?
停止 ?停止()
→スタンバイ? ?
電源オフ × ? ? ?
状態遷移表に整理すると、仕様不明点が多い状態遷移表に整理すると、仕様不明点が多い
状態遷移表状態遷移表
スタンバイ 地上停泊中 停泊中 移動中
電源オン ? ? ? ?
起動起動()
→地上停泊中? ? ?
操作
現在位置.垂直=0
?駆動開始()
→停泊中
駆動停止()
→地上停泊中 →停泊中
現在位置.垂直>0 →移動中
現在位置.垂直<0 × × × ×
停止 ?停止()
→スタンバイ? ?
電源オフ × ? ? ?
状態遷移表に整理すると、仕様不明点が多い状態遷移表に整理すると、仕様不明点が多い
状態遷移表状態遷移表
バグふたつめバグふたつめ
バグふたつめバグふたつめ
調べていくうちに・・・調べていくうちに・・・
操作コマンドに規定値以外の値を送ると発生操作コマンドに規定値以外の値を送ると発生
異常処理があやしい?異常処理があやしい?
バグふたつめの正体バグふたつめの正体
インターフェースの異常系の仕様について漏れがあった
異常データの場合のシーケンスが決められていなかった
インターフェースに不整合が生じた
バグふたつめのコードバグふたつめのコード
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から受信した生データを処理して飛行船を動かす。
事前条件 操作入力 期待結果
TC01 移動中 上昇コマンド 上昇する
TC02 移動中 下降コマンド 下降する
TC03 移動中 右旋回コマンド 右旋回する
TC04 移動中 左旋回コマンド 左旋回する
TC05 移動中 前進コマンド 前進する
TC06 移動中 後退コマンド 後退する
: : : :
テストケーステストケース
バグふたつめのまとめバグふたつめのまとめ
無効同値クラスも考慮しよう
いわゆる
「正常系(有効同値クラス)だけやった」
にならないように
小さな単位からきちんとテストしないとダメ小さな単位からきちんとテストしないとダメコンポーネントコンポーネント →→ 統合とテストレベルを進めるにあたっては前のテ統合とテストレベルを進めるにあたっては前のテストレベルで目的に応じたテストが実施され、そのレベルで摘出すべストレベルで目的に応じたテストが実施され、そのレベルで摘出すべき欠陥/故障を修正していることが前提き欠陥/故障を修正していることが前提
コンポーネントテストで、コンポーネントとして設定したクラス、コンポコンポーネントテストで、コンポーネントとして設定したクラス、コンポーネント単体レベルの内部動作が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
テストで幸せになるためにテストで幸せになるために
QCDQCD(品質、コスト、納期)(品質、コスト、納期)内で最適解を見つけよう内で最適解を見つけよう
報告は技法、数字を駆使して明解にしよう報告は技法、数字を駆使して明解にしよう
そのためにはテスト技法をマスターしようそのためにはテスト技法をマスターしよう
ご清聴ご清聴ありがとうございましたありがとうございました
m(_ _)mm(_ _)m
このセッションの作成にあたり以下の皆様にご協力いただきました。ありがとうございました
豆ショッカーズ(有志の方々)SESSAME第3世代のV&V松田さんSESSAMEの先輩方