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.

C-HelperでC言語を効率的に学習しよう

25,824 views

Published on

APASEC2013春で発表した資料です。
C-HelperはC言語初学者向きの静的解析ツールです。
サイボウズ・ラボユースで開発しました。

Published in: Technology
  • Be the first to comment

C-HelperでC言語を効率的に学習しよう

  1. 1. C-HelperでC言語を 効率よく勉強しよう サイボウズ・ラボユース 成果報告13年4月5日金曜日
  2. 2. 自己紹介 • サイボウズ・ラボユース2期生 • プログラミング教育に興味あり13年4月5日金曜日
  3. 3. いざ会場へ13年4月5日金曜日
  4. 4. 迷った!!13年4月5日金曜日
  5. 5. 迷った!! _人人人人人人人人_ > 20分無駄歩き <  ̄Y^Y^Y^Y^Y^Y^Y ̄13年4月5日金曜日
  6. 6. 会場発見 • 会場「BumB」はセキュリティに配慮 • その証拠↓13年4月5日金曜日
  7. 7. 会場発見 • 会場「BumB」はセキュリティに配慮 • その証拠↓13年4月5日金曜日
  8. 8. おまけ (本編)13年4月5日金曜日
  9. 9. 独学13年4月5日金曜日
  10. 10. 独学 本を買う13年4月5日金曜日
  11. 11. 独学 本を買う 読む13年4月5日金曜日
  12. 12. 独学 本を買う 読む 分からない13年4月5日金曜日
  13. 13. 独学 本を買う 読む 分からない 質問する人がいない13年4月5日金曜日
  14. 14. 独学 本を買う 読む 分からない 質問する人がいない ::::::::::::::::::::   ::::::::::::::::     ::::::::::::    Λ_Λ :::::::   /彡ミヘ  )ー、  ::::    /:ノ:ヽ  \::| :::  /:|::  \  ヽ| ::: ‾ ̄L_ノ‾ ̄‾ ̄‾ ̄\ノ‾ ̄‾ ̄13年4月5日金曜日
  15. 15. 独学13年4月5日金曜日
  16. 16. 独学          ∧_∧        掲示板に質問する        (  ·・ω·・)    _|  ⊃/(___ /    └-­(____/13年4月5日金曜日
  17. 17. 独学          ∧_∧        掲示板に質問する        (  ·・ω·・)    _|  ⊃/(___ /    └-­(____/  <͡/ヽ-、___ /<_/____/ 返信来ない13年4月5日金曜日
  18. 18. そうだ 自動化、 しよう。13年4月5日金曜日
  19. 19. C-Helperとは13年4月5日金曜日
  20. 20. C-Helperとは • C言語初学者向け静的解析ツール • Eclipseプラグイン13年4月5日金曜日
  21. 21. 静的解析 ソースコード 様々な解析 警告・提案13年4月5日金曜日
  22. 22. 検出例 インデントの乱れ 1 void f(void) { 2 int i; 3 while(!foo()){ 4 for(i=0;i<20;i++){ 5 bar();} 6 } 7 } test.c:2:1:行頭から書き始めるのは分かりにくいため、 スペース 4 個分インデントすべきです。 test.c:4:1:インデントが乱れています。 スペース 8 個分インデントすべきです。 test.c:5:1:インデントが乱れています。 スペース 12 個 分インデントすべきです。 13 / 3313年4月5日金曜日
  23. 23. 検出例 インデントの乱れ 1 void f(void) { 2 int i; 3 while(!foo()){ 4 for(i=0;i<20;i++){ 5 bar();} 6 } 7 } test.c:2:1:行頭から書き始めるのは分かりにくいため、 スペース 4 個分インデントすべきです。 test.c:4:1:インデントが乱れています。 スペース 8 個分インデントすべきです。 test.c:5:1:インデントが乱れています。 スペース 12 個 分インデントすべきです。 14 / 3313年4月5日金曜日
  24. 24. 検出例 インデントの乱れ 1 void f(void) { 2 int i; 3 while(!foo()){ 4 for(i=0;i<20;i++){ 5 bar();} 6 } 7 } test.c:2:1:行頭から書き始めるのは分かりにくいため、 スペース 4 個分インデントすべきです。 test.c:4:1:インデントが乱れています。 スペース 8 個分インデントすべきです。 test.c:5:1:インデントが乱れています。 スペース 12 個 分インデントすべきです。 15 / 3313年4月5日金曜日
  25. 25. 検出例 インデントの乱れ 1 void f(void) { 2 int i; 3 while(!foo()){ 4 for(i=0;i<20;i++){ 5 bar();} 6 } 7 } test.c:2:1:行頭から書き始めるのは分かりにくいため、 スペース 4 個分インデントすべきです。 test.c:4:1:インデントが乱れています。 スペース 8 個分インデントすべきです。 test.c:5:1:インデントが乱れています。 スペース 12 個 分インデントすべきです。 16 / 3313年4月5日金曜日
  26. 26. 検出例 文字列の代入 void f(void) { char arr[20]; arr[20] = "string"; } char型配列の1つの要素に文字列を格納できません。 strcpy を使うことを検討してください。 17 / 3313年4月5日金曜日
  27. 27. 検出例 余分なセミコロン int main(void); { } 関数定義にはセミコロン ; を付けません。 Splint test.c:2:2: Parse Error. (For help on parse errors, see splint -help parseerrors.) *** Cannot continue. 18 / 3313年4月5日金曜日
  28. 28. 検出例 sizeofの使用 char *p = malloc(128); printf("%un", sizeof(p)); sizeof(p) は 128 ではなく 4 を返します (仮定6)。 それは本当に意図したことですか? 仮定 6: ポインタ変数のサイズを 4 バイト と仮定しています 19 / 3313年4月5日金曜日
  29. 29. 検出例 メモリリーク int f(void) { char *p, *q; p = malloc(10); q = malloc(20); if (!q) return -1; // do something free(p); free(q); return 0; } メモリリークする可能性があります 20 / 3313年4月5日金曜日
  30. 30. 検出例 実体定義 hoge.c #include "hoge.h" hoge.h int g_x; ヘッダファイルには実体を定義すべきではありません。 (extern宣言を用いてください。 (extern int g_x;) ) 21 / 3313年4月5日金曜日
  31. 31. 実装 • ソースコードをEclipse CDTでパース • 型情報付き抽象構文木を取得 ソースコード 抽象構文木 標準ヘッダ 制御フロー 最小限の内容 到達定義 22 / 3313年4月5日金曜日
  32. 32. 実装 • 制御フロー情報を基にポインタ解析 • 種々の情報を組み合わせ、問題を検出 制御フロー ポインタ解析 抽象構文木 問題検出 指摘・提案 到達定義 23 / 3313年4月5日金曜日
  33. 33. ねらい13年4月5日金曜日
  34. 34. ねらい • 初学者が陥りやすいミスを認識13年4月5日金曜日
  35. 35. ねらい • 初学者が陥りやすいミスを認識 • 分かりやすい言葉で指摘13年4月5日金曜日
  36. 36. ねらい • 初学者が陥りやすいミスを認識 • 分かりやすい言葉で指摘 • 可能なら解決策を提案13年4月5日金曜日
  37. 37. ねらい • 初学者が陥りやすいミスを認識 • 分かりやすい言葉で指摘 • 可能なら解決策を提案 • →学習効率が向上!13年4月5日金曜日
  38. 38. 合宿でやったこと • バグ取り • 新機能の実装 • 囲碁 • 政治談義13年4月5日金曜日
  39. 39. 新機能13年4月5日金曜日
  40. 40. 新機能 • 宣言されていない関数名を警告 • 標準関数→ヘッダ名13年4月5日金曜日
  41. 41. 使ってみよう • ブログで使い方など紹介 「uchanote c-helper」で検索! • アンケートにご協力を 修士論文研究の一環なんです…13年4月5日金曜日
  42. 42. まとめ • バグが取れた • 新機能ができた • 政治談義できた13年4月5日金曜日
  43. 43. まとめ • バグが取れた • 新機能ができた • 政治談義できた 有意義な合宿!!13年4月5日金曜日

×