ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) ·...

24
Copyright © 2012 日本開発株式会社 All Rights Reserved 日システム開発株式会社 ESEC2012 ブース内セッション 単体テストガイドラインのススメ http://www.nskint.co.jp

Transcript of ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) ·...

Page 1: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

Copyright © 2012 日本システム開発株式会社 All Rights Reserved

日本システム開発株式会社

ESEC2012

ブース内セッション

単体テストガイドラインのススメ

http://www.nskint.co.jp

Page 2: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

2Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

単体テストを有効活用していますか

単体テストを必要としている企業は増えている

よくある例

しかし、

単体テストを有効活用できていない企業が多い

原因は � 単体テストの教え方

� 単体テストの実施の仕方

問題ないでしょうか?単体テストを若手社員に

人海戦術的に実施させる

Page 3: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

3Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

単体テストはスキルが必要

テスト品質は明確なルールがない限りテスト実施者依存になりやすい

「スキルの違い」があると、

人により作業品質がバラつく、全体の品質が下がる

作業メンバに

「スキルの違い」があってはいけない

スキルが必要な単体テストを若手に人海戦術的に実施させるのは危険です。

Page 4: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

4Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

テストの知識

「テストの知識」を必要とするプロジェクトは

1人の有知識者がいても成立しない

なぜなら品質の確保は「作業の確認」をしなくてはいけないから

=部分的チェックはNGテストを有知識者がチェックするという事は、

その人がもう一度同じことをやるという事

「テストの知識」は作業する人がみな『同じ知識』を持っている必要がある

有知識者

有知識者

有知識者

有知識者

Page 5: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

5Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

間違えがちな考え方

1人の有知識者がいればうまく回る

=「ドメイン知識」を必要とするプロジェクトの考え方

レビュー依頼

レビュー依頼

レビュー依頼

うまく回る理由は、その有知識者にレビューを依頼していけばいいから

有知識者は「知識の確認」をしていく =部分的チェックOK

ここでいう「ドメイン知識」はAndroidやLinuxの分野固有知識、

分野固有の判断などできる知識をさしています

「テストの知識」を必要とするプロジェクトでは成立しない

Page 6: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

6Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

皆がテストの有知識者であればいいのか

例:データの取り方

単体テストは

違うプロジェクトを経験してきた5人が集まれば、5通りの考え方になる

メンバそれぞれが「テストの基準」を持っていると同じテストが出来ない

func(char A, char B)

テストケースの最大は 256*256=65536

型サイズが大きくなれば、数は増えていく。どう間引くかが重要。

Aさん Bさん

65536の中から

5を使います

65536の中から60を使います

サンプリングに差があるということなので同じテストとしてNG

Page 7: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

7Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

有知識者でも

有知識者それぞれの経験が違えば、実施するテストも違う

作業メンバの

「基準の違い」 が品質に影響を与える

1つのプロジェクトとしては同じテストをしなくてはいけないが、

テストには「基準の違い」が影響する

Page 8: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

8Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

単体テストの品質を確保するために

テストに影響する2つの違いを埋める

プロジェクトプロジェクトプロジェクトプロジェクト内内内内でででで統一統一統一統一されたされたされたされた

「「「「テストテストテストテストにににに対対対対するするするするルールルールルールルール」」」」がががが必要必要必要必要

スキルの違い

基準の違い

そこで、私たちは誰もが同じ品質のテストをする仕組みとして単体テスト「ガイドライン」を作成することをお勧めします。

このルールは誰がやっても

同じ結果になるものでないといけない

Page 9: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

9Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

ガイドラインのメリット

単体テストの精度と生産性を統一できる

個人の観点に依存しない

誰がやっても同じになる

プロセスをそろえることで品質の確保がしやすくなる

改善しやすくなる

プロセスをそろえることで変更も一斉に行える

ガイドライン

お客様開発チーム

遵守

単体テスト品質単体テスト品質が一定になるが一定になる

チェックがしやすいチェックがしやすい→より品質安定→より品質安定

改善しやすくなる

Page 10: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

10Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

例)signed変数をunsigned変数として扱いたい場合

long func(signed char arg){

:if (0 > arg) {

arg = -arg; //符号変換処理}

:}

long func(signed char arg){

:if (0 > arg) {

arg = -arg; //符号変換処理}

:}

A.

例えば 10、-10 を指定したとする。

10、-10では欠陥が検出できない可能性がある。

しかし・・・

符号変換処理としてよく実装されるが、欠陥

が潜んでいる。

※ これまで複数のプロジェクトで同じ誤りが

あった。

Q.argに何の値を指定するか?Q.argに何の値を指定するか?

統一させたいテストデータ[事例1] 欠陥となる可能性がある符号変換処理

Page 11: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

11Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

long func(signed char arg){

:if (0 > arg) {

arg = -arg; //符号変換処理}

:}

long func(signed char arg){

:if (0 > arg) {

arg = -arg; //符号変換処理}

:}

例)signed変数をunsigned変数として扱いたい場合

検出できない欠陥とポイント

argに-128を与えた場合のみ、符号変換処理を行っても符号が変換されないため、unsigned変数として扱うことができない。

この符号変換処理において、符号を変換できない値が1点だけ存在する。

ルールがない状態で全員が同じデータを抽出できるか

統一させたいテストデータ[事例1] 欠陥となる可能性がある符号変換処理

Page 12: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

12Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

long func(unsigned char arg1){

:a = (b / (unsigned char)(arg1 + 5));

:}

long func(unsigned char arg1){

:a = (b / (unsigned char)(arg1 + 5));

:}

例)演算後に除算している場合

A.例えば 0、10、255 を指定したとする。

代表値、最小値、最大値だけでは欠陥が検出できない可能性がある。

しかし・・・

arg1を「+5」しているため、ゼロ割が発生しないと判断を誤りやすい。

Q.arg1に何の値を指定するか?Q.arg1に何の値を指定するか?

long func(){

:}

long func(){

:}

arg1 = 0

統一させたいテストデータ[事例2] オーバーフローに誘発されたゼロ割処理

Page 13: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

13Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

long func(unsigned char arg1){

:a = (b / (unsigned char)(arg1 + 5));

:}

long func(unsigned char arg1){

:a = (b / (unsigned char)(arg1 + 5));

:}

例)演算後に除算している場合

検出できない欠陥とポイント

この演算処理において、ゼロ割を発生させる値が1点だけ存在する。

arg1に251を与えた場合のみ、「+5」するとオーバーフローするため、除算の分母が0になり、ゼロ割が発生する。

� 特定の値を与えられた場合のみ欠陥となるコードがあることを認識してテストを行う。

� コードを見ないと有効なテストができないケースもあり得ることを認識する。

ポイントポイント

統一させたいテストデータ[事例2] オーバーフローに誘発されたゼロ割処理

ルールがない状態で全員が同じデータを抽出できるか

Page 14: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

14Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

ガイドラインがあればいいのか

単体テスト導入支援(OJT支援/ガイドライン教育)

→初期OJTを実施することで、その後自分たちで

OJTを実施することが可能になる

ガイドラインがあればうまく活用できるのか

すべてできるわけではない

定着するまでのプロセスが必要になる

Page 15: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

15Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

ガイドラインで必要なもの

単体テストは明確なルールがないとばらついて一定の品質にならない

ガイドラインを作成することで一定基準で統一した単体テストが出来る (※ただし、ガイドラインの質が良かった場合に限る)

作業の手順が書かれていること

何のためにするか理由が書かれていること

実施例(サンプル)があること

現場で導入できるレベルであること

ガイドラインの導入教育を行うこと

ガイドラインが定着するまでのプロセスがあること

ガイドラインで満たす必要のあるもの

Page 16: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

16Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

ガイドラインの事例

ガイドライン(チェックリスト)がある場合

本来はこうあるべきというのはあるが、現場が

着いてこれなかった

一度に理想の状態へ持っていくには現場が対応しきれない

理想と現場の中間地点が必要

ルールをどんどん追加しているが良くならない

ルールが多くなると一気に意識できない

具体的なサンプルがないとなかなか統一されてこない

ガイドラインが定着しない

Page 17: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

17Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

一度に全てを対応するのは難しい

ガイドラインを2段階にする

理想とする単体テストへの移行がスムーズになる。

次の2種類を作成することを推奨

「将来あるべき姿」

「現状から一歩踏み出した形」

ガイドライン

現状から少しUP

ガイドライン

将来

ガイドラインを2段階にすることで、無理のない単体テスト品質向上が可能になります。

Page 18: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

18Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

ルールとサンプル

手順を増やしてそれぞれの手順ごとのルールを減らすルールを見たら手順が少なく1つの手順にルールが多い

ミスに繋がってガイドラインについていけなかった

手順を増やして1つ1つの手順のルールを少なくすることでミスが減る

具体的なサンプルを用意する

ガイドライン

サンプル作成物のサンプルを数種類用意しておけば、おのずとレベルは合ってくる

手順1

手順2

ルール

ルール

手順1

手順2

ルール

手順3

ルール

手順4

Page 19: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

19Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

ガイドライン導入の流れ

リソースリソースリソースリソースがががが足足足足りないりないりないりない場合場合場合場合

教育単体テストはOJTで教育可能か。

→有知識者がいる必要がある

ガイドライン作成OJTが出来るならガイドラインは自力で作れる

定着初期OJTを実施することで、今後お客様自身がOJTを実施可能な状態にします。

代行ガイドライン作成しているとテストの支援はしやすいです。

単体単体単体単体テストテストテストテスト教育教育教育教育

単体単体単体単体テストテストテストテスト ガイドラインガイドラインガイドラインガイドライン作成作成作成作成

単体単体単体単体テストテストテストテスト導入支援導入支援導入支援導入支援

ガイドラインガイドラインガイドラインガイドライン教育教育教育教育

OJT支援支援支援支援

お客様 独力で実施

単体単体単体単体テストテストテストテスト 代行代行代行代行サービスサービスサービスサービス

Page 20: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

20Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

ガイドライン作成の流れ

ガイドライン作成「将来あるべき姿」「現状から一歩踏み出した形(思想が理解できるもの) 」 の2種類

を推奨。

具体的なサンプル作成作成物のサンプルを数種類用意しておけば、おのずとレベルは合ってくる。

ガイドラインガイドラインガイドラインガイドライン教育教育教育教育

単体単体単体単体テストテストテストテスト導入支援導入支援導入支援導入支援

単体単体単体単体テストテストテストテスト ガイドラインガイドラインガイドラインガイドライン作成作成作成作成

認識認識認識認識あわせあわせあわせあわせ

現状現状現状現状をををを把握把握把握把握

Page 21: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

21Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

まとめ

単体テストガイドラインは精度向上と生産性向上に役立つ

ガイドラインはプロセス重視

チェックリストであってはいけない

ガイドラインは理想だけではいけない

当面の目標(思想が理解できるもの)を設定することでスムーズ

に導入できる

ガイドラインは手順を多くして各手順のルールは少なくする

ガイドラインに沿ったサンプルが必要

ガイドラインが定着するまでのプロセスを制定する

導入教育

Page 22: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

22Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

単体テスト関連サービスについて

ご質問・ご相談・資料請求はこちらまで : [email protected]

単体テストはどの開発プロジェクトでも実施しますが、明確に実施方法が定まっていません。そんな開発現場で活用してもらうために単体テストに特化した教育コンテンツを揃えています。※【C言語版】【C++言語版】のコンテンツがあります。

本コンテンツを使用したセミナーを定期的に開催しています。【主催】ガイオ・テクノロジー株式会社 URL : http://www.gaio.co.jp/event/event.html

単体テストはどの開発プロジェクトでも実施しますが、明確に実施方法が定まっていません。そんな開発現場で活用してもらうために単体テストに特化した教育コンテンツを揃えています。※【C言語版】【C++言語版】のコンテンツがあります。

本コンテンツを使用したセミナーを定期的に開催しています。【主催】ガイオ・テクノロジー株式会社 URL : http://www.gaio.co.jp/event/event.html

単体テスト教育

単体テスト代行サービス

テスト導入支援

ソフトウェア品質を確保するために重要な工程である「単体テスト」を代行します。ブラックボックス、ホワイトボックス、ロバスト性の観点から、高品質な単体テストを実施します。

単体テスト代行サービスの効果に不安がある場合、試験的に数関数に対して単体テスト代行サービスを実施することも可能です。

※ガイオ・テクノロジー株式会社の単体テスト代行サービスを支援しております。

ソフトウェア品質を確保するために重要な工程である「単体テスト」を代行します。ブラックボックス、ホワイトボックス、ロバスト性の観点から、高品質な単体テストを実施します。

単体テスト代行サービスの効果に不安がある場合、試験的に数関数に対して単体テスト代行サービスを実施することも可能です。

※ガイオ・テクノロジー株式会社の単体テスト代行サービスを支援しております。

テスト導入支援は単体テスト以外の内容もカバーしたサービスです。単体テスト以外(設計や結合テスト)の工程も改善しなければソフトウェア品質が向上しない場合、お客様の現場に合った方法をご提案します。【例】テストガイドライン策定、テスト設計レビュー、設計書確認

※ガイオ・テクノロジー株式会社のテスト導入支援を支援しております。

テスト導入支援は単体テスト以外の内容もカバーしたサービスです。単体テスト以外(設計や結合テスト)の工程も改善しなければソフトウェア品質が向上しない場合、お客様の現場に合った方法をご提案します。【例】テストガイドライン策定、テスト設計レビュー、設計書確認

※ガイオ・テクノロジー株式会社のテスト導入支援を支援しております。

Page 23: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

23Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

単体テスト以外(Android)のサービスについて

ご質問・ご相談・資料請求はこちらまで : [email protected]

Android OSの基礎知識を学ぶとともに、Androidアプリケーション開発の基本となるプログラミングモデルを講義と実習から習得します。

Android OSの基礎知識を学ぶとともに、Androidアプリケーション開発の基本となるプログラミングモデルを講義と実習から習得します。

Androidアプリケーション開発 初級編

Androidアプリケーション開発 応用編

Android開発 ポーティング編

Androidの中枢であるアプリケーションフレームワークの仕組みを理解するとともに、実際のAndroidアプリケーション開発でよく発生する問題点の事例・解決策などを理解することで、より高度なAndroidアプリケーション開発のスキルを習得します。

Androidの中枢であるアプリケーションフレームワークの仕組みを理解するとともに、実際のAndroidアプリケーション開発でよく発生する問題点の事例・解決策などを理解することで、より高度なAndroidアプリケーション開発のスキルを習得します。

ターゲットボード上のLinuxシステム上に、Android特有のドライバの構築と、ミドルウェア、Androidアプリケーション等の搭載を行います。またAndroidのチューニング技術なども習得する事により、実践的なAndroid技術者の育成が可能になります。(企画:株式会社エンベデッド・システム 開発:日本システム開発株式会社)

ターゲットボード上のLinuxシステム上に、Android特有のドライバの構築と、ミドルウェア、Androidアプリケーション等の搭載を行います。またAndroidのチューニング技術なども習得する事により、実践的なAndroid技術者の育成が可能になります。(企画:株式会社エンベデッド・システム 開発:日本システム開発株式会社)

その他 必要スキル教育(Java,デザインパターン等)

株式会社豆蔵との連携により、Android開発に必要なその他技術要素の習得も可能です。(Java, デザインパターン, UML等)

株式会社豆蔵との連携により、Android開発に必要なその他技術要素の習得も可能です。(Java, デザインパターン, UML等)

Page 24: ESEC2012 u [ X Z b V i j b g e X g j v1.00 z z p.ppt) · arg1を「+5」しているため、ゼロ割 が発生しないと判断を誤りやすい。 ㅎㄫarg1に何の値を指定するかㄼㅎㄫarg1に何の値を指定するかㄼ

24Copyright© 2012 NIHON SYSTEM KAIHATSU CO., LTD.

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