Summit
Developers
Developers Summit 2013 Kansai Action ! 
コード品質は曖昧なままか	
~ソフトウェアサプライチェーンマネージメントことはじめ~	
安竹 由起夫
コベリティ日本支社	
	
...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
これ、誰が書いたコード?	
2	
  
Summit
Developers
Developers Summit 2013 Kansai Action ! 
コードガバナンスが必要な背景	
  
•  COTS	
  イニシアチブとポリシー	
  
–  商業的に購入可能なソフトウェア...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
US	
  法律からの引用	
  
SEC.	
  933.	
  IMPROVEMENTS	
  IN	
  ASSURANC...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
• 自動的に客観的にコード品質を評価できるしくみ
が必要	
  
•  自動的に検出できるランタイムエラーは実は多い	
  
•...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
静的解析のススメ	
SAT ソルバ
全パス &
プロシージャ間
解析
不不具合が発⽣生しない
パスを排除し、
誤検知を減らす	
...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
例:バッファーオーバーラン	
7
シングルトン
の変数	
Address渡し	
呼出し先の	
  
関数内表示	
渡された変
数...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
例:コピペミス	
8
変数名の書
き換えミス	
同一の関数
以外でも、	
  
検出可能
Summit
Developers
Developers Summit 2013 Kansai Action ! 
例:クロスサイトスクリプティング	
入り口 (source)
経路
サニタイズすべき箇所
修正方法の提示
Summit
Developers
Developers Summit 2013 Kansai Action ! 
オープン・ソースコードは?	
1
0	
  
Summit
Developers
Developers Summit 2013 Kansai Action ! 
Python
Summit
Developers
Developers Summit 2013 Kansai Action ! 
Samba
Summit
Developers
Developers Summit 2013 Kansai Action ! 
ANTLR	
1
3	
  
Summit
Developers
Developers Summit 2013 Kansai Action ! 
サイズ別残不具合密度平均	
1
4	
  
Summit
Developers
Developers Summit 2013 Kansai Action ! 
国内製造業既存顧客データ	
1
5	
  
1,000	
  行あたり
の初期検出不
具合数	
1,000	
  行あたり
の不...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
ポリシーとともにトラッキングする	
24	
  
開 発 組 織 、 プ ロ ジ ェ ク ト 、 サ プ ラ イ ヤ
Summit
Developers
Developers Summit 2013 Kansai Action ! 
まとめ	
•  第三者のコードが混在するのはあたりまえ	
  
•  コードの品質を客観的に測ろう	
  
– コーディング規約...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
ところで、他にも自動化できるところが	
26	
  
0"
50"
100"
150"
200"
250"
300"
350"
...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
一般的なリリースプロセス:	
  
•  6	
  ヶ月のリリースサイクル	
  
•  3	
  ヶ月の次期リリース計画	
 ...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
Front End
Compilation
Analysis
Core Analysis
Coverity
Connect (C...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
Coverity	
  Connect	
  の自動テストの例	
  
Confidential: For Coverity a...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
コードカバレッジに対するチャレンジ	
3
0
%CodeTested
Effort to develop tests
100%
...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
自動テスト開発支援ツール	
31	
優先的にテストすべき箇所	
を開発者に通知	
カバ
レッジ	
ソース
変更情
報	
変更の
...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
社内での経験	
  –	
  ケーススタディ	
  
•  十分テストされている製品のコンポーネントにこの社内ツールを適用	
 ...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
テスト自動化の進捗	
  
•  2011年秋〜2013年春までの Coverity	
  Connect	
  と	
  En...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
製品顧客からのフィードバック	
34	
  
0"
0.2"
0.4"
0.6"
0.8"
1"
1.2"
1.4"
1.6"
...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
製品にしてしまいましたヽ(´ー`)ノ	
•  Coverity	
  Test	
  Advisor	
35
Summit
Developers
Developers Summit 2013 Kansai Action ! 
I	
  suggest	
  your	
  Next	
  AcTon!
Summit
Developers
Developers Summit 2013 Kansai Action ! 
現状を知ろう	
M Y 	
   R E C O M M E N D 	
   N E X T 	
   A C T I O N...
Summit
Developers
Developers Summit 2013 Kansai Action ! 
新規・修正
コード+テスト
不不具合情報
単体レベル
構成管理理
不不具合情報
統合レベル
修正
解析
不不具合検出
クリーンな...
Upcoming SlideShare
Loading in …5
×

デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)

1,553 views

Published on

DevelopersSummit2013Kansai(2013/9/20神戸)での登壇資料です。
(概要)「キミに不満はないが、キミのコードが不安だ。」 わたしたちの生活に密接なソフトウェアは、その品質によっては、ときに重大な問題をユーザにもたらすことも事実です。ソフトウェアの品質といえば、ISO/IEC9126で品質特性が定義されていますが、オープン・ソースやサードパーティコード、アウトソースにより開発されたコードすべての品質を人手で評価するのは困難に思えます。拡大するソフトウェア・サプライチェーンの中でこの不安を軽減する、コベリティのデベロップメントテスティングとそのエコシステムについて共有させていただきたいと思います。

Published in: Technology
  • Be the first to comment

デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)

  1. 1. Summit Developers Developers Summit 2013 Kansai Action ! コード品質は曖昧なままか ~ソフトウェアサプライチェーンマネージメントことはじめ~ 安竹 由起夫 コベリティ日本支社 A4 #kansumiA4
  2. 2. Summit Developers Developers Summit 2013 Kansai Action ! これ、誰が書いたコード? 2  
  3. 3. Summit Developers Developers Summit 2013 Kansai Action ! コードガバナンスが必要な背景   •  COTS  イニシアチブとポリシー   –  商業的に購入可能なソフトウェアを使用し開発コストを分散   –  初期導入時からソフトウェアが成熟   –  COTSソフトウェアは脆弱性が少なく、外的影響を受けにくい   •  オープンソースイニシアチブとポリシー   –  無料にみえるため、使用を奨励されている   –  それゆえ、クリティカルなシステムでの使用が増えている   •  リファレンス: h(p://scan.coverity.com   •  保守性   –  元の開発者とは違う開発者に作成されたコード   •  ビルド過程は完全で、全ての必要なビルドツールはそろっているか?   –  実行ファイルは納品されたソースから作成されているか?   •  ソースがないバイナリのモジュールが含まれているか?   •  潜在的に問題となる動作を隠すためにソースを変更したか?  
  4. 4. Summit Developers Developers Summit 2013 Kansai Action ! US  法律からの引用   SEC.  933.  IMPROVEMENTS  IN  ASSURANCE  OF  COMPUTER  SOFTWARE  PROCURED  BY  THE   DEPARTMENT  OF  DEFENSE.   国防総省が製造したコンピュータ・ソフトウェアの保証改善   (a)  Baseline  SoMware  Assurance  Policy-­‐  The  Under  Secretary  of  Defense  for  AcquisiTon,  Technology,   and  LogisTcs,  in  coordinaTon  with  the  Chief  InformaTon  Officer  of  the  Department  of  Defense,  shall   develop  and  implement  a  baseline  soMware  assurance  policy  for  the  enTre  lifecycle  of  covered   systems.  Such  policy  shall  be  included  as  part  of  the  strategy  for  trusted  defense  systems  of  the   Department  of  Defense.   (b)  Policy  Elements-­‐  The  baseline  soMware  assurance  policy  under  subsecTon  (a)  shall-­‐-­‐   (1)  require  use  of  appropriate  automated  vulnerability  analysis  tools  in  computer  so3ware  code   during  the  en7re  lifecycle  of  a  covered  system,  including  during  development,  operaTonal  tesTng,   operaTons  and  sustainment  phases,  and  reTrement;   (2)  require  covered  systems  to  idenTfy  and  prioriTze  security    vulnerabiliTes  and,  based  on  risk,  determine   appropriate  remediaTon  strategies  for  such  security  vulnerabiliTes;   (3)  ensure  such  remedia7on  strategies  are  translated  into  contract  requirements  and  evaluated   during  source  selecTon;   NaTonal  Defense  AuthorizaTon  Act  2013  
  5. 5. Summit Developers Developers Summit 2013 Kansai Action ! • 自動的に客観的にコード品質を評価できるしくみ が必要   •  自動的に検出できるランタイムエラーは実は多い   • 開発チームにとっては、早期のバグの発見                 👇             手戻りの削減   客観的なポリシー設定が必要 5  
  6. 6. Summit Developers Developers Summit 2013 Kansai Action ! 静的解析のススメ SAT ソルバ 全パス & プロシージャ間 解析 不不具合が発⽣生しない パスを排除し、 誤検知を減らす 関数またはファイルに 跨る不具合の検出 統計的な解析 プログラムの目的を
 推測し、予期しない
 動作を報告する if x=0 ... ... If x != 0 NULL の参照解除 X!=0 X=0 X!=0X=0 void foo(int *p) { *p = 42; } void bar() { foo(p); if(p != 0) { ... } } int  *p  =  malloc(sizeof(int));   if(p  !=  0)    *p  =  42;   ...   int  *p  =  malloc(sizeof(int));   if(p  !=  0)    *p  =  42;     int  *p  =   malloc(sizeof(int));   *p  =  42;   多分正しい 多分間違い ホワイトボックス ファザー 汚染データを投入し、 無害化されているかを 自動的に確認する htmlEncode() &lt; &gt; &amp; &quot; ' a b c d …  < > & ‘ …
  7. 7. Summit Developers Developers Summit 2013 Kansai Action ! 例:バッファーオーバーラン 7 シングルトン の変数 Address渡し 呼出し先の   関数内表示 渡された変 数を配列とし てアクセス  
  8. 8. Summit Developers Developers Summit 2013 Kansai Action ! 例:コピペミス 8 変数名の書 き換えミス 同一の関数 以外でも、   検出可能
  9. 9. Summit Developers Developers Summit 2013 Kansai Action ! 例:クロスサイトスクリプティング 入り口 (source) 経路 サニタイズすべき箇所 修正方法の提示
  10. 10. Summit Developers Developers Summit 2013 Kansai Action ! オープン・ソースコードは? 1 0  
  11. 11. Summit Developers Developers Summit 2013 Kansai Action ! Python
  12. 12. Summit Developers Developers Summit 2013 Kansai Action ! Samba
  13. 13. Summit Developers Developers Summit 2013 Kansai Action ! ANTLR 1 3  
  14. 14. Summit Developers Developers Summit 2013 Kansai Action ! サイズ別残不具合密度平均 1 4  
  15. 15. Summit Developers Developers Summit 2013 Kansai Action ! 国内製造業既存顧客データ 1 5   1,000  行あたり の初期検出不 具合数 1,000  行あたり の不具合修正 数 1,000行あたり の高・中リスク の残不具合数 不具合1件あた りの修正工数 の削減   最大 5.9  件/K行 4.85件/K行 0.69件/K行 15人時間/件   最低 0.05件/K行 0件/K行 0.01件/K行 1人時間/件 平均 1.47件/K行 0.69件/K行 0.16件/K行 9人時間/件 •  有効解答:  20  プロジェクト   •  解析対象総コード行数:1億7千900万行  (179M  step)   •  主な調査データ: –  解析コード行数、検出不具合数、修正済み不具合数、修正対象外(誤 検知含む)数   –  高・中リスクの残不具合件数 –  コベリティ導入前と導入後の不具合修正工数の変化
  16. 16. Summit Developers Developers Summit 2013 Kansai Action ! ポリシーとともにトラッキングする 24   開 発 組 織 、 プ ロ ジ ェ ク ト 、 サ プ ラ イ ヤ
  17. 17. Summit Developers Developers Summit 2013 Kansai Action ! まとめ •  第三者のコードが混在するのはあたりまえ   •  コードの品質を客観的に測ろう   – コーディング規約違反 < ランタイムエラー   – トレンドをみる   •  以前とくらべて悪くなっているのか?良くなっているの か?   – 組織内のコードを比較してみる   – コード品質に対するポリシーを設定する 25  
  18. 18. Summit Developers Developers Summit 2013 Kansai Action ! ところで、他にも自動化できるところが 26   0" 50" 100" 150" 200" 250" 300" 350" 400" Alameda" Berkeley" Carmel" Davis" Eureka*" Number'of'Defects' Defects'Addressed'by'Coverity'Quality/Security'Advisor'' High"Impact" Medium"Impact" Low"Impact"
  19. 19. Summit Developers Developers Summit 2013 Kansai Action ! 一般的なリリースプロセス:   •  6  ヶ月のリリースサイクル   •  3  ヶ月の次期リリース計画   •  リリース直前の6  週間の “ハードニング”   サイクル   •  2  週間の  “フィーチャーフリーズ”     •  2  週間の  “インテグレーションフリーズ”   •  2  週間の  “リリースフリーズ”  と  GA  のための アップロード   •  リリースのコードネームはカリフォルニア 州の都市名   •  Alameda,  Berkeley,  Davis,  Eureka,  Fresno,  …   リリースを実行するプロセス:   •  アジャイルプロセス   •  部門横断的なスクラムチーム   •  2  週間のスプリント   •  メールまたは対面での日次スタンド・アッ プ   •  Jira  と  Pivotal  を介した進捗管理   •  Bugzilla  によるバグ管理   •  週1回のステータスミーティング   •  リリースハードニングでは、週に3回   コベリティの製品リリースプロセス  
  20. 20. Summit Developers Developers Summit 2013 Kansai Action ! Front End Compilation Analysis Core Analysis Coverity Connect (CC) Defect Management 1 Gc_rc gc_pbkdf2_sha1 (const char *P, size_t Plen, 2 const char *S, size_t Slen, 3 unsigned int c, 4 char *DK, size_t dkLen) 5 { 6 char U[20] T[20]; 7 unsigned int hlen = 20, u, l, r, i, k; 8 int rc; char *tmp; size_t tmplen 9 10 if (c == 0) 11 return GC_PKCS5_INVALID_ITERATION_COUNT; 12 r = dkLen - (l - 1) * hLen; 13 14 memcpy (tmp, S, Slen); 2年前の状況   コベリティの製品構造概要:   Tests automated and run during build Tests automated and run during build Mostly manually tested End-to-end (E2E) tests performed manually 2年前のテストアプローチ: •  フロントエンドと解析のコンポーネントは自動化されたテストでテストされていた •  Coverity Connect はほとんどが手動でテスト •  End-to-End のテストは手動で行われていた ConfidenTal:  For  Coverity  and  Partner  use  only.  Copyright  Coverity,  Inc.,  2013    28
  21. 21. Summit Developers Developers Summit 2013 Kansai Action ! Coverity  Connect  の自動テストの例   Confidential: For Coverity and Partner use only. Copyright Coverity, Inc., 2013 2 9
  22. 22. Summit Developers Developers Summit 2013 Kansai Action ! コードカバレッジに対するチャレンジ 3 0 %CodeTested Effort to develop tests 100% Diminishing return for increased test effort 1 Not all code is testable - unreachable statements - dead code, ... 2 Not all tested code adds equal value to the test - non-critical code - debug code, legacy code - exception handling, ... 3 テストされたコード(%) テスト作成の工数 テスト工数の増加 に対し効果は減少 テストを行う価値がないコード -  重要でないコード -  デバッグコード、既存コード -  決まりきった例外処理 -  … テストできないコードも存在 -  到達できないステートメント -  デッドコード -  ...
  23. 23. Summit Developers Developers Summit 2013 Kansai Action ! 自動テスト開発支援ツール 31 優先的にテストすべき箇所 を開発者に通知 カバ レッジ ソース 変更情 報 変更の 影響 外部SCMから入力:    Git,  CVS,  Mercurial,        Subversion,  Perforce,      ClearCase,  AccuRev,        MS  TFS   独自に作り込み 外部カバッレジツールから入力:       gcov  (C/C++)            Bullseye(C/C++)              IBM  PureCov(C/C++)            Corbertura  (Java)     せめて新規コードと   それに影響をうけるところ   だけでも….  
  24. 24. Summit Developers Developers Summit 2013 Kansai Action ! 社内での経験  –  ケーススタディ   •  十分テストされている製品のコンポーネントにこの社内ツールを適用   •  3ヶ月間、1テストエンジニアが1週間のうち4時間、テスト違反の箇所にテストを追加した   •  テストポリシー:  テスト可能なコードは 100%  テストする  (除外: デバッグコード,  実行されない コード,  その他)   0" 2" 4" 6" 8" 10" 12" 14" 16" 18" 20" 0" 5" 10" 15" 20" 25" 30" 35" 28*Apr*12"5*M ay*12"12*M ay*12"19*M ay*12"26*M ay*12" 2*Jun*12" 9*Jun*12"16*Jun*12"23*Jun*12"30*Jun*12" 7*Jul*12"14*Jul*12"21*Jul*12" Number'of'Bugs'Found' Number'of'Tests'from'TA' Date' Test'Advisor'Applica:on'in'Frontend'Project' Tests"added"through"TA" Bugs"found"by"TA"tests" •  1人週間換算で29件のテストを追加 •  製品から19件のバグを発見 – いくつ かは重大なもの •  例: Keil コンパイラの正しい機 能を阻害するバグ 3 2
  25. 25. Summit Developers Developers Summit 2013 Kansai Action ! テスト自動化の進捗   •  2011年秋〜2013年春までの Coverity  Connect  と  End-­‐to-­‐End  のテスト自動化 の結果   0" 20" 40" 60" 80" 100" 120" Alameda" Berkeley" Carmel" Davis" Today" Person'Days' CC'Manual'Tes0ng'Effort' 0" 4" 8" 12" 16" 20" Alameda" Berkeley" Carmel" Davis" Today" Person'Days' E2E'Manual'Tes1ng'Effort' Alameda' Berkeley' Carmel' Davis' Today' Manual'CC'GUI'Tests' 347' 661' 1006' 931' 1194' Automated'CC'GUI''Tests' 0' 2' 44' 220' 403' 0' 250' 500' 750' 1000' 1250' 1500' 1750' CC"Test"Automa,on"Progress" Alameda' Berkeley' Carmel' Davis' Today' Manual'E2E'Tests' 300' 370' 175' 143' 60' Automated'E2E'Tests' 0' 120' 1468' 1761' 3466' 0' 500' 1000' 1500' 2000' 2500' 3000' 3500' 4000' E2E#Test#Automa-on#Progress# 3 3  
  26. 26. Summit Developers Developers Summit 2013 Kansai Action ! 製品顧客からのフィードバック 34   0" 0.2" 0.4" 0.6" 0.8" 1" 1.2" 1.4" 1.6" Alameda" Berkeley" Carmel" Davis" Normalized+Number+ of+Defects+ Customer4found+Defects+
  27. 27. Summit Developers Developers Summit 2013 Kansai Action ! 製品にしてしまいましたヽ(´ー`)ノ •  Coverity  Test  Advisor 35
  28. 28. Summit Developers Developers Summit 2013 Kansai Action ! I  suggest  your  Next  AcTon!
  29. 29. Summit Developers Developers Summit 2013 Kansai Action ! 現状を知ろう M Y   R E C O M M E N D   N E X T   A C T I O N ! 37   •  神頼みでなく、   まずは、   現状を知ること。   •  無料コード・テスト診断   受付中です!     “コベリティ”で検索  
  30. 30. Summit Developers Developers Summit 2013 Kansai Action ! 新規・修正 コード+テスト 不不具合情報 単体レベル 構成管理理 不不具合情報 統合レベル 修正 解析 不不具合検出 クリーンな ファイルを登録 Coverity QA/SA 単体レベル Jenkins-‐‑‒CI コべリティ プラグイン 最新のコードセットを 自動取得 Coverity  解析 QA/SA/TA 統合レベル 最新のコード セット 新規不不具合検出 Coverity Policy Manager QA・VIP +ALM製品 Coverity   コードレベル 不不具合管理理 (Coverity  Connect) コンプライアンス 遵守チェック 不不具合管理理・ トリアージ 開発者 QA・テスター 通知 開発者 不不具合未検出 最新のテスト セット QNX テストポリシー 違反

×