Your SlideShare is downloading. ×
0
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
【12-C-6】 飛行船萌え障害キタ━━━━ (;´Д`) ━━━━ !!!! ~テスト嫌いエンジニアに贈るテストのすすめ~
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

1,041

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,041
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
89
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • <number>
  • ・豆蔵さんの紹介はどうするか?・SESSAMEの紹介も必要<number>
  • ・組み込み屋さんと同じレベルでテストなんてやってられないですよね。それは私もよーくわかってます。でも、ちょっとまってください。たとえば、料理をするとき、プロのレシピをそのまま真似るのは無理だけど、ちょっと隠し味とか、あるコツをまねるだけで劇的においしくなったりすることありますよね?そんな感じで、生死にかかわるようなシステムと同じテストなんて必要ないけど、そこから得たノウハウには私たちでもおいしいものがあったりしますそういうところをお伝えしたいと思ってます。<テスト嫌いなんですけど、やらないわけにはいかないですよね。嫌いだから何回もやりたくないんですよ。しかもなるべく簡単にすませたい。けど、あとkらバグが見つかるのはくやしい。>これは自己紹介にしよう・SESSAMEのメンバが作った教材に、マジカルスプーンというのがあります。このスプーンをたたいて、あの飛行船の制御をしようというものです。詳しくは後のプレゼンの中でお話させていただきますが、これめっちゃ楽しいねん!というのをみなさんにお伝えできたらいいなと思ってます。聞いてくださった方の中から、僕もやってみたいという方が出てきてくれるとうれしいです。<number>
  • ・飛行船本体だと組みこみっぽくなってしまうので、今日はパソコン上で動くシミュレータをとりあげたいと思います。このシミュレータ、ちゃんとテストして出荷したのにバグがあって・・・というありがちなストーリーにのせて実例をあげながら、バグの見つけ方やテストのコツなんかとお話したいと思います。あくまでも今日のお話はフィクションですからね実際にこんな状態で出荷したんじゃありませんよ。ということだけお断りしておきますで、お話の中で、デモを交えつつ、バグの種明かしをしていきます。最後にまとめ代わりにテストに関するお話をして、みなさんにテストについてもうちょっと知りたいなと思ってもらえたら大成功です。ではさっそく本題に入っていきましょう<number>
  • ・まずはマジカルスプーンって何?ってとこからご説明させていただきます<number>
  • 何回もテストしたはずなのに なぜ不具合が残ってしまうの?テストしたときは正しく動いたのになぜ動かなくなるの?
  • <number>
  • 状態遷移図変えるクラス図を追加くらい?
  • 表にすることによって、組み合わせの網羅ができた理論的にはあり得ないから考えてもみなかったことが・・・知らぬまに実装されてたあり得ない→考慮しない→テストしない状態遷移図からだと今ひとつ問題がみえにくかったので、表にしてみました☆
  • 表にすることによって、組み合わせの網羅ができた理論的にはあり得ないから考えてもみなかったことが・・・知らぬまに実装されてたあり得ない→考慮しない→テストしない状態遷移図からだと今ひとつ問題がみえにくかったので、表にしてみました☆
  • ・ここで、インタフェースのテストがおざなりになった例を見ましょう。
  • <number>
  • なので、一般的に言う方(結合テスト)でよいかなーと。 ただ、単体テスト、結合テスト共に、ISTQBでは、それぞれ コンポーネントテスト、統合テストって言います、って一言口頭で言っといた方が 無難だと思います。
  • なので、一般的に言う方(結合テスト)でよいかなーと。 ただ、単体テスト、結合テスト共に、ISTQBでは、それぞれ コンポーネントテスト、統合テストって言います、って一言口頭で言っといた方が 無難だと思います。
  • ・今回のバグで出たときに実施したテストケースはこんなものです・状態遷移図にマップすると、赤丸の箇所がもれていました。・
  • なので、一般的に言う方(結合テスト)でよいかなーと。 ただ、単体テスト、結合テスト共に、ISTQBでは、それぞれ コンポーネントテスト、統合テストって言います、って一言口頭で言っといた方が 無難だと思います。
  • なので、一般的に言う方(結合テスト)でよいかなーと。 ただ、単体テスト、結合テスト共に、ISTQBでは、それぞれ コンポーネントテスト、統合テストって言います、って一言口頭で言っといた方が 無難だと思います。
  • Transcript

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

    ×