Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

より良いコードを書くための

3,355 views

Published on

Published in: Technology, News & Politics
  • Be the first to comment

より良いコードを書くための

  1. 1. より良いコードを書くための静的コード解析入門<br />Presented by CREST<br />
  2. 2. 自己紹介<br />プログラマー@NEET<br />CREST’s Weblog(d.hatena.ne.jp/Crest) の管理人<br />Twitterやってます。 @thayamizu<br />趣味<br />プログラミングとか逆アセとか、写真撮影とか、絵を描いたりカラオケしたり、博物館に行ったりとか<br />
  3. 3. 静的コード解析とは<br />静的コード解析ってなんぞや?<br />実行ファイルを実行せずにコード解析を行う<br />人間がやると、インスペクションとかコードレビューと呼ばれる<br />ソースコードに対して行われることが多い、ただし少数ながらオブジェクトコードに対して行う場合もある<br />
  4. 4. 静的コード解析の手法<br />数学的手法<br />表示的意味論<br />公理的意味論<br />操作的意味論<br />形式的手法<br />モデル検査<br />抽象解釈<br />
  5. 5. 静的コード解析のツール<br />C/C++<br />Lint<br />BLAST<br />Cppcheck<br />C++test<br />JAVA<br />Checkstyle<br />Bugfound<br />C#<br />Fortify SCA<br />Visual Studio (Team Edition 以上)<br />
  6. 6. cppcheckの紹介<br />C++用の静的コード解析ツール<br />オープンソースなので、導入が簡単<br />日本語マニュアルがあるので、とっつきやすい<br />検出できるもの<br />メモリリーク<br />バッファオーバーラン<br />初期化されていなメンバ変数<br />関数の不正使用<br />不正なポインタ操作<br />virtual でないデストラクタ<br />
  7. 7. cppcheckの使い方<br />CUIプログラムなのでコマンドラインから実行するだけ<br />主要なコマンド<br />--enable =all …すべてのチェック項目を実行<br />-j num   …num個のスレッドを使って並列実行<br />--xml …XML形式の出力<br />foobar> cppcheck path > result.txt<br />
  8. 8. cppcheckを使う(1)<br />配列の境界の検出<br />int main()<br />{<br />char a[10];<br />a[10] = 0;<br />return 0;<br />}<br />
  9. 9. cppcheckを使う(2)<br />メモリーリークの検出<br />int main()<br /> {<br />char *str=(char*)malloc(sizeof(char)*10);<br /> return 0;<br /> }<br />
  10. 10. cppcheckを使う(3)<br />初期化されていないメンバ変数の検出<br />class CSample<br />{<br />public:<br />CSample(void) {<br /> }<br /> void PrintInfo() {<br />cout << value<<endl;<br /> }<br />private:<br />int value; //メンバ変数<br />};<br />
  11. 11. まとめ<br />静的コード解析ツールを使うと、プログラムの「よくない兆候を発見できる」<br />よくない兆候を早期に見つけることができれば、発生するバグの数を減らせてウマー<br />

×