ある日上司に言われました
ちょっと、
あのbugだらけなタスクを何とかしてきてXPの薦め
東京エレクトロン ソフトウェア・テクノロジーズ
出羽 弘明
TOKYO ELECTRONTOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

着手したときの状況

・ソースをいじれば高確率でデグレ発生
・リーダー不在のチーム構成(一人っきりチーム！)
働けど、働けど我が暮らし楽にならず
3

2

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

なんでこんなひどいことになってるんだ！

・工数の1/3以上が不具合対処

TOKYO ELECTRONTOKYO ELECTRONTOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

問題点をばらした結果、問題は以下の2つであった・ドキュメントの出来が悪すぎる・ソースコードの出来はもっと悪すぎる
もはや作り直す他に道はない
TOKYO ELECTRON

4TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

XPで言ってるチームが共有すべき4つの価値修正までの道のり
現状の調査

・顧客と開発者の円滑なコミュニケーション

修正方法の判断・必要最小限の設計しか行なわない単純さ

機能仕様
外部/詳細設計・頻繁なテストによるフィードバック
コーディング
開発者試験

今回のお話

・大胆な設計変更に立ち向かう勇気

リリース、その後
TOKYO ELECTRON

5TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

TOKYO ELECTRON

6TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

XPで言ってる12のプラクティス

開発環境

・計画ゲーム(The Planning Game)

全部一度にやるなんて、絶対無理！

・小規模リリース(Small Releases)

・ペアプログラミング(Pair Programming)・比喩(Metaphor)・同所有権(Collective Ownership)・シンプルデザイン(Simple Design)
・テスティング(Testing)・リファクタリング(Refactoring)

・継続的インテグレーション(Continuous Integration)
・週40時間(40-Hour Week)

・オンサイト顧客(On-Site Customer)

言語:COS: Unix系
ハードウェア: PC/AT互換機
Unit Test: Cunit for Mr.Ando
ソースコード管理: CVS
Bug Tracking System : 影舞・コーディング標準(Coding Standards)

TOKYO ELECTRON

7TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

TOKYO ELECTRON

8TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

タスク紹介
動作セット管理担当システム

動作ログ管理まずはコーディング

GUI

担当タスク
I/O制御
各種モジュール、センサ

TOKYO ELECTRON

9TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

コーディング前の壁・まだコーダーがやってきていない
新人をどうやって教育しよう…
・前と同じく、コーダーの質でソフトの品質が決まるようだと困るぞ
・納期が決まっていて、コーディングとテストで6ヶ月しかないぞ

そうは言っても、まずは教育からはじめなくては……

TOKYO ELECTRON

11TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

TOKYO ELECTRON

10TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

全部教えるなんて最初から諦めちゃえ
内容を限定した教育・当社のコーディング規約を読ませる
・周辺Toolの一つを作らせて、各人のコーディングの質を把握する・詳細設計書からコードに落とす練習をする以上を3weekほどで実施した。

TOKYO ELECTRON

12TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

Unit Testとは？

品質の高いコード作成
・Unit Testを行いながらのコーディング

関数の入/出力を利用して関数レベルでの正当性を検証するテスト方法。

・ペア(三すくみ)によるチェック体制

例)

コーダーA

「Function1は入力値が0だった場合エラーを返す」という仕様であった場合にコーディング

retCode = Function1(0);&コードレビュー
コーダーB

でretCodeがエラーであることを確かめるテスト方法
コーダーC

・測定ソフトによる、ソースコードの状態の把握
TOKYO ELECTRON

13

C/C++

TOKYO ELECTRONTOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

gcovとは？

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

14

コーディングFlow

カバレッジを測定してくれるツール

C/C++

詳細設計よりUnitテスト関数を作成する

・各関数が実行される頻度

製品関数を作りこむ

製品関数の雛形を作成する

・ファイルレベルの頻度情報

テストを行い、テストが成功することを確認する

テストを行い、テストが失敗することを確認する
テストの実施結果をgcovにかける

テストのレビューを行う

・関数レベルの頻度情報

gcovの結果を使用して関数のレビューを行う

TOKYO ELECTRON

15TOKYO ELECTRONTOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

Unit Testの効果
機能試験中の不具合修正 Phaseにおける結果

Unit Test動作回数：586回発見したコードミス : 20件
例)「==」と「!=」間違えた 「¦¦」と「&&」間違えた etc…
これらをコーディングの段階で発見しなかった場合、・BTSへの不具合の投稿・デバッガを立ち上げての原因箇所の特定・類似箇所検索の余計な作業が発生していた
最悪の場合不具合を見逃していたかもTOKYO ELECTRON

17TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

16

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

色々やってみてよかった点
・必ず、関数の詳細設計が出来上がっている・Testを意識してソースを書くため、戻り値のチェックやエラー処理などが揃い、 ソースの品質が安定している・三すくみでコードチェックを行わせていたので、Testの実施と合わせて作業を安心して任せられる
コーダーA
Unit Testの結果と進捗を毎日管理

リーダー

コーディング&コードレビューコーダーB

・新しい詳細設計
・詳細設計レビューでコードレビューを丸投げ

・設計の残件・基幹部分のコーディング
・特殊処理が絡むコーディング

コーダーC
TOKYO ELECTRON

18TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

Unit Testの導入

Toolによる製品状態のモニタリング

ただし既存のシステムに、導入するにはハードルが高い
・既存の関数が、テストを意識して作られていないかも
・戻り値を正しく評価していない関数がたくさんあるかも・既存の関数にたくさん手を入れることになるかも・「テストを作る工数が馬鹿にならない」と上司に言われるかも

CCCCにかけて、
McCabe‘s 複雑度30以上
LOC 100以上の関数にリファクタ検討を行う

静的コード解析Toolにかけて、ランクA(危険度高)の指摘を修正するなので大規模な改修や作り直しや新規タスク作成のときに導入するTOKYO ELECTRON

19TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

結果をコーディング作業にフィードバック
TOKYO ELECTRON

20TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

Toolによる製品状態のモニタリング
・CCCCにより、BIG Functionや”出来”の悪い関数を機械的に見つけることが出来るので、修正を検討できる
一般的な目標値
LOC:100以内
MVG:30以内

さあ、テストだ・PG-Reliefにより、不具合の種となりうる箇所を潰せる
主に発見された重大な指摘
未初期化変数となってしまうPathの発見
無限Loopに陥りかねないPathcopy size間違え…etc

これらの評価に工数がほとんど掛からない
TOKYO ELECTRON

21

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

TOKYO ELECTRON

22TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

試験Flow

機能試験
・新規作成試験仕様書(166項目)
新/旧比較試験
項目に従った試験

機能洗い出し不具合の分析
影響範囲の確認

機能と試験項目のマッピング
試験項目の追加

過去の試験
仕様書
過去の試験仕様書

不具合の修正で試験を行う・過去の試験仕様書 (383項目)
有識者試験・有識者によるチェック

新しい試験仕様書

NG項目発見BTSへ投稿TOKYO ELECTRON

23TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

TOKYO ELECTRON

24

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

不具合検証の一例

不具合検証の一例発見不具合(Task別割合)

不具合発見試験発見総数：2742526%※重複あり(全部で305)

12

試験仕様書(比較試験)

14

NEW TASK1
NEW TASK2OLD TASKGUI
I/O Task
Other Task

3112211

単位:件TOKYO ELECTRON

25

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

試験仕様書(新)49%

試験仕様書(旧)15%

半分は「試験仕様書(新)」のテストでいずれ絡め取っていたTOKYO ELECTRON

その他

10%

26

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

不具合検証の一例

発見試験について

BUGのデータを取っておこう○今回のような作り直しの開発では、旧TASKとの比較試験は非常に効率的である

今回このような検証ができているのは、
BUG情報を取りためていたから○有識者による、試験は不具合発見に有効である
・弱い部分を知っている・動作が変であると、直ぐに検知できる○バグはそのソフトの強い部分も弱い部分も教えてくれる○過去の試験仕様書による試験は不具合発見に有効である
・マイニングできなかった機能を見つけることが出来る

TOKYO ELECTRON

27

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

○開発中に対策を打っていくことができる○みんなで情報を共有できる

TOKYO ELECTRON

目標は達成できたのか

28

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

作り直し効果

タスクを改善するためには以下の2つが必要であった・整備されたドキュメント
・質の高いソースコード

・後追い工数減少
・機能追加が容易になった・自由な時間が激増

上記を達成してリリースした

TOKYO ELECTRON

29

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

TOKYO ELECTRON

30TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

「整備されたドキュメント」と「質の高いソースコード」の効果(件)「整備されたドキュメント」と「質の高いソースコード」の効果開発中に見つかる不具合の原因工程とその量(件)DRの指摘割合とその量

70

250

6020050150
100

要求確認
機能仕様
概略設計
詳細設計
Cording
既存40

試験仕様
詳細設計
概略設計
機能仕様

30
2050

1000
Ver.OLD A

Ver.NEW

Ver.OLD B

TOKYO ELECTRON

31

Ver.OLD A

TOKYO ELECTRONTOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

Ver.NEW

Ver.OLD B

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

32

XPで言ってる12のプラクティス
・計画ゲーム(The Planning Game)・小規模リリース(Small Releases)

・ペアプログラミング(Pair Programming)・比喩(Metaphor)・同所有権(Collective Ownership)・シンプルデザイン(Simple Design)
・テスティング(Testing)・リファクタリング(Refactoring)

今日はこれまで！

・継続的インテグレーション(Continuous Integration)
・週40時間(40-Hour Week)
・オンサイト顧客(On-Site Customer)
・コーディング標準(Coding Standards)

TOKYO ELECTRON

33

TOKYO ELECTRONTOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

34

発見総数：223

NEW TASKでの発見不具合推移
(件)
250

200

150

Appendix

100

5000204060(日)※67稼働日での結果

TOKYO ELECTRON

35

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

TOKYO ELECTRON

36TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

混入工程
0%

5% 0% 5%8%

混入工程について

2%
17%

3%

○詳細設計に起因する不具合が非常に多い

調査
機能仕様
概略設計
詳細設計
コーディング
未作成
未動作Toolmake
既存仕様変更デグレ

3%

4%1%・人員を確保して教育する時間を十分に取れなかったため、詳細設計の段階でレビューが不十分であった・しかし、機能マッピングした試験計画で試験をおこなっているので想定している機能ないでの保障は行えているために特に問題はない。(つまり予定通り試験で絡め取っている)○コーディングによるデグレがほとんど発生しない
不具合におけるコーディングのデグレが占める割合：0.4%(しかもUnit Test適応外関数)

52%TOKYO ELECTRONTOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

37

TOKYO ELECTRONTOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

38

コード量は?

機能マッピング例
機能に対して試験項目をマッピングして、内容の網羅性を検証

(行)

20000

試験仕様書6

試験仕様書5

試験仕様書4

試験仕様書3

機能試験仕様書2

試験仕様書1

25000

15000
LOC
10000
5000

指定コマンドの実行を行う
外部に現在の実行状態を知らせる：：TOKYO ELECTRON

性能評価

○0○

OLD TASK

39

TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

LOC分布比較(対数表示)(個)

908070
頻度6050OLD TASKNEW TASK

403020100101001000 (行)

LOCTOKYO ELECTRON41TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.

TOKYO ELECTRONNEW TASK

40TOKYO ELECTRONSOFTWARE TECHNOLOGI ES LTD.