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.

コードレビューのススメ

18,552 views

Published on

社内勉強会用に作成したコードレビューの資料です。
自社で実施したコードレビューの紹介と学んだ事から
今後実施する際に注意するべきポイントなどを共用する目的です。

Published in: Technology
  • Get the best essay, research papers or dissertations. from ⇒ www.HelpWriting.net ⇐ A team of professional authors with huge experience will give u a result that will overcome your expectations.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ❶❶❶ http://bit.ly/2F7hN3u ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ❤❤❤ http://bit.ly/2F7hN3u ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

コードレビューのススメ

  1. 1. コードレビュー のススメ 川平一人 13年10月8日火曜日
  2. 2. Agenda 実施したレビュー紹介 レビュー実施のススメ 13年10月8日火曜日
  3. 3. 実施したレビュー紹介 13年10月8日火曜日
  4. 4. どの様に実施した? ReviewBoardを利用 毎日実施 メンターは居ない プロセスの責任者は居る 13年10月8日火曜日
  5. 5. C / C++ / AS等のソースコード バグが再現している状態へのリモート接続 設計中の宣言だけ書かれたヘッダー 持ち込まれる物 13年10月8日火曜日
  6. 6. ハマった事の相談 困った事の相談 持ち込まれる物 13年10月8日火曜日
  7. 7. 全員 わなくてもやる パートが違っても一緒にやる ルールはチームで決める 今よりもより良くを! ルール 13年10月8日火曜日
  8. 8. チームで決めたルール一部抜粋 13年10月8日火曜日
  9. 9. コードレビューに 割いてる時間 45分 15分 1日 1時間 全員集まって 会議室でレビュー 自席のツールで レビュー 13年10月8日火曜日
  10. 10. コードレビューに 割いてる時間 1日1時間だが3人参加なので=3時間/日 毎日やっているので=60時間/月 4ヶ月継続したので=240時間 1人月換算 (160時間) で= 1.5人月 プロダクトは4ヶ月の期間で1.5人月の 作業時間がコードレビューに 割り当てられた 13年10月8日火曜日
  11. 11. ✓ 開発経験の低い人の改善に役立つ ✓ 無駄の発生が事前に気づきやすい ✓ 知らない事を学ぶ良い機会になる ✓ 設計の相談に役立つ 良いこと ✓ 時間制約があると効果が減りやすい ✓ 課題がドロップしずらい雰囲気 ✓ 知識差が大きいと聞くだけになる 悪いこと ✓ 得られる物が、減ってきた(無い) ✓ ポスト用のスクリプトが使いにくい ✓ メトリクス計測使えてない ✓ 理解度を上げる為の説明コストが高い 改善する事 先日 行われた 振り返り 13年10月8日火曜日
  12. 12. 良いこと ✓ 開発(経験の少ない人)の 改善に役立つ ✓ 無駄を事前に防止出来る ✓ 知らない事を学ぶ機会になる ✓ 設計、実装時の相談に役立つ 13年10月8日火曜日
  13. 13. 悪いこと ✓ 時間制約があると効果が薄い ✓ 課題を拒否しずらい雰囲気 ✓ 知識差が大きいと聞くだけに 13年10月8日火曜日
  14. 14. 改善する事 ①得られる物が減ってきた(無い) ②ポスト用のスクリプトが  使いにくい ③メトリクス計測が使えてない ④理解度を上げる為の説明コスト  が高い 13年10月8日火曜日
  15. 15. 得られる物が 減ってきた(無い) コーチングを身につけたい 新しい技術を共有したい  を導入して解決する 改善する事 13年10月8日火曜日
  16. 16. メトリクス計測 が使えてない レビュー会で指摘 する対象にする を導入して解決する 改善する事 13年10月8日火曜日
  17. 17. 9月からの取り組み 毎日1時間の ペアプロを実践 13年10月8日火曜日
  18. 18. 9月からの取り組み 毎週金曜日 ✓ 読書会 ✓ ふりかえり 合計1時間 13年10月8日火曜日
  19. 19. コードレビュー 実施のススメ ✓ 導入 ✓ 事例 13年10月8日火曜日
  20. 20. 導入 13年10月8日火曜日
  21. 21. 導入のポイント いくつかの誤解 責任のなすりつけ合い 効率的な手法への理解 費用対効果の疑問 13年10月8日火曜日
  22. 22. コードレビューの誤解 レビューはバグを無くす事 では無く将来に発生する 不具合を防止する改善 13年10月8日火曜日
  23. 23. リファクタリングする事や 対象箇所を確定する事 コードレビューの誤解 では無く 将来のリファクタリング回数を 減らす改善 13年10月8日火曜日
  24. 24. コードレビューの誤解 では無く全員で指摘 しあえる環境(ルール)を作る事 ベテランが皆にテクニックを 教える事 思った事、気づいたことが間違っていても良いので 指摘しあえる環境構築がとても重要 13年10月8日火曜日
  25. 25. 責任のなすりつけ合い コードでは無く人や プロダクトの欠陥を 見つける事に必死になるケース なぜ、そうなったかでは無く これから どうするのがベストか? を会話する 13年10月8日火曜日
  26. 26. 効率化手法 全てのコードを気合と根性で ソースを頭から開いてく と言う手法は非効率!! 13年10月8日火曜日
  27. 27. ✓ 指摘するべき問題を絞り込む ✓ 見るべきソースを絞り込む ✓ 自動化する 効率化手法 ツールを活用する! ツールを活用する! 13年10月8日火曜日
  28. 28. 正しい手法とツールを 活用し効果を 計測する事が大事 費用対効果 13年10月8日火曜日
  29. 29. アンチパターン ・修正を強制する ・細かく管理する ・大量に時々やる ・沢山のレビュワー ・全てのバグを発見する ・コードでは無く人の欠陥レビュー http://japan.blogs.atlassian.com/2010/03/ア ジャイルチームにおけるコードレビュー-パー/ アジャイルチームにおけるコードレビュー ‒ パートII 13年10月8日火曜日
  30. 30. 効果的な ツール 課題の管理 問題コードの算出 (複雑さ、重複、違反) 13年10月8日火曜日
  31. 31. ✓ プレコミットレビュー可能なWEBツール ✓ 課題単位でソースコードの差分を登録可能 課題の管理 ReviewBoard 13年10月8日火曜日
  32. 32. 課題の管理 ✓ 登録された課題にコメントが登録出来る ✓ 確認や承認のプロセス機能がある ReviewBoard 13年10月8日火曜日
  33. 33. 問題コードの算出 複雑度 制御構造に着目したメトリクス コードの複雑さを数値化する 分岐が多いと数値が大きく なりやすい SourceMonitor 13年10月8日火曜日
  34. 34. Sonar タイムライン 違反 重複 問題コードの算出 重複と違反 13年10月8日火曜日
  35. 35. Jenkins 問題コードの算出 重複と違反 13年10月8日火曜日
  36. 36. 事例 13年10月8日火曜日
  37. 37. フェーズ 準備 練習 実施 1週間 1週間 継続 導入にあたって イキナリの実施では無く 準備と練習期間を設けました 13年10月8日火曜日
  38. 38. ✓ メンター役が平均的な良いコードと 悪いコードを既知のコードで指摘 ✓ どの様なコードがコードレビューで 指摘されるのか(するべきか)を学ぶ 準備 準備 練習 実施 13年10月8日火曜日
  39. 39. ✓ コードレビューの指摘を実践 ✓ ツールの使い方を学ぶ ✓ レビュー時の時間の使い方を学ぶ 練習 準備 練習 実施 13年10月8日火曜日
  40. 40. ✓ 会議室でコードレビューを全員で行う ✓ 自席で自分以外のコードをレビュー ✓ 一定周期でふりかえりを行う 実践 準備 練習 実施 13年10月8日火曜日
  41. 41. 注意点 準備と練習は 1週間の人と2週間の人が居た Aさん Bさん 0 0.5 1.0 1.5 2.0 1週間 2週間 ※指摘などは得意、不得意がある 13年10月8日火曜日
  42. 42. チームと 共有した事 コードレビュー中に 13年10月8日火曜日
  43. 43. 変更は作業中のうちからレビュアに見せておけ! 見せられる状態まで作るのでは無く、作業途中の 物をそのまま見てしまおう! WIP ( Work In Progress ) DRY( Don't repeat yourself ) 情報の重複を無くせ! コピペを憎もう! キーワード 13年10月8日火曜日
  44. 44. http://www.ryuzee.com/contents/blog/4977 技術的負債にどのように取り組むか 技術的負債の悲惨なサイクル テストを書く時間がない リファクタリングする時間がない 設計レビューする時間がない 問題の本質を解決しないで 表面的に解決する 結果的に品質が下がる 急いで無理に直しとテストが不十分 自動化されていない 設計がダメなまま バグがさらに増える テストされていないコードの増加 重複コード、タコな設計のコード リファクタリングされていないコード チームのモラルの低下、健康被害 付け焼刃な対応による ファイル数やコード量の増加。 負 債 13年10月8日火曜日
  45. 45. 駄目なコードの定義 13年10月8日火曜日
  46. 46. 巨大 巨大な一枚岩の様なクラス、メソッド http://www.slideshare.net/MoriharuOhzu/ss-9224836ソースコードの品質向上のための効果的で効率的なコードレビュー 13年10月8日火曜日
  47. 47. 複雑 一見して何をしているか判らない。迷路の様なコード http://www.slideshare.net/MoriharuOhzu/ss-9224836ソースコードの品質向上のための効果的で効率的なコードレビュー 13年10月8日火曜日
  48. 48. 重複 同じ処理が色々な所にコピーされている http://www.slideshare.net/MoriharuOhzu/ss-9224836ソースコードの品質向上のための効果的で効率的なコードレビュー 13年10月8日火曜日
  49. 49. 駄目なコード「その他」 ✓ 一般的なコーディング規約とは異なる書き方 ✓ 英語のスペルが間違っている ✓ 既存ソースがコメントアウトで残っている ✓ 入力値のサニタイズやレンジチェックが  各所に分散している http://www.ryuzee.com/contents/blog/610 ソースコードレビュー 13年10月8日火曜日
  50. 50. ソフトウェアの内部構造を改善する作業で あり基本的に以下の方針に従います。 ✓ 外部的な振る舞いは変えない ✓ 内部構造を洗練していく ✓ 作業は一歩ずつ進める ✓ 安全に変更を行う UMLモデリングの本質 第4章 4.1「リファクタリングの概要」 http://www.amazon.co.jp/exec/obidos/ASIN/4822221180/ Refactoring 13年10月8日火曜日
  51. 51. 適切なコミット粒度 自分の作業の区切りででは無く 単一の目的単位でコミットをする 複数の目的や修正が含まれると 一部だけを戻す、参照する時に 利便性が下がる 13年10月8日火曜日
  52. 52. コミットログの書き方 「新規追加」とか「〇〇を更新」とか 「バグを修正」と書くのでは無く そのコミットで 「何が起こるようになるのか」を書く 例: メニューのキーヘルプ・ウィンドウの出現時に 左からスライドイン演出する機能を追加 13年10月8日火曜日
  53. 53. ✓ どんなチーム、どんなメンバーにも 有効な訳では無い ✓ メンバーのスキルに合わせてルールを  コントロールする必要がある。 発見した事 13年10月8日火曜日
  54. 54. ✓ 指摘には簡単なルールがあると便利  (無いと何処を見て良いか迷う) ✓ 新しいとりくみには練習や準備が有効 ✓ 時間オーバーをしない工夫は大事 発見した事 13年10月8日火曜日
  55. 55. まとめ 13年10月8日火曜日
  56. 56. コードレビュー コードをレビューする 事で実行される プロセス改善 13年10月8日火曜日
  57. 57. プロセス改善 の目的 問題を見つける 13年10月8日火曜日
  58. 58. 問題が発生しないよう 改善する プロセス改善 の目的 13年10月8日火曜日
  59. 59. 強制的な実施では効果が薄い 軽量に保てないと継続できない 計測し効果が十分かを判定する プロセス改善 の特性 13年10月8日火曜日
  60. 60. 何かを変えたら 「効果」を皆で確認しよう 「変化、変更は必ず良い結果」では無い 変えて駄目だったら戻す、または別の形にする ルールを変えた時 に注意するべき事 13年10月8日火曜日
  61. 61. 小さく始める ✓ 小さい取り組みを継続的に行う ✓ 取り組みの成果を確認しつづける ✓ 小さな成功を繰り返す ✓ 組織やプロセスを着実に成長させる http://www.slideshare.net/devsumi/2013a1devops基礎からわかるDevOps 13年10月8日火曜日
  62. 62. 導入のススメ ✓ 同じチームで興味がある人が2人以上いれば その人達だけでも初めてみるのをお薦めします ✓ 社内ならツールもプロセスもサポートします ✓ 社外でもITSはあると思うのでプラグインを  一つだけ導入してもらえれば環境は十分 13年10月8日火曜日
  63. 63. 導入のススメ ✓ 計測は一緒にやっているメンバーが効果が あるか?で判定 ✓ プロセス自体の責任者(コードレビューを正常に正    しく実施する人)は必要 ✓ 最初から時間が短い中で効果を得るのは難しい  最初は長めの時間が必要 13年10月8日火曜日
  64. 64. 参考資料 http://steps.dodgson.org/b/2012/08/18/ code-review-styles/ コードレビューいろいろ http://www.slideshare.net/MoriharuOhzu/ss-9224836ソースコードの品質向上のための効果的で効率的なコードレビュー http://www.slideshare.net/Crest/ss-6031767より良いコードを書くための http://hiroki.jp/2012/09/13/5626/コードレビューツール 6選 どれが最適? http://daipresents.com/2008/java_selfcheck_sheet/Javaの机上チェックリスト http://www.slideshare.net/tq_ed/writing-nice-code「いいコード」をみんなで書こう! http://blog.ik.am/entry/view/id/138/Javaのソースコードレビュー観点をまとめてみた http://www.ryuzee.com/contents/blog/610ソースコードレビュー http://msdn.microsoft.com/ja-jp/library/ ms182019(v=vs.90).aspx デザイン レビューとコード レビューを実施するためのガイドライン http://japan.blogs.atlassian.com/2010/03/ア ジャイルチームにおけるコードレビュー-パー/ アジャイルチームにおけるコードレビュー ‒ パートII 13年10月8日火曜日
  65. 65. http://bitnami.com/stack/reviewboard BitNami Review Board installer How to install オール・イン Windows / Linux どちらも最新版が数クリックだけで Install可能! ReviewBoard 13年10月8日火曜日
  66. 66. 文字化け対策 http://assam-at-night.blogspot.jp/2008/01/reviewboarddiff.html 夜でもアッサム ReviewBoardで日本語ファイルのdiffをとる BitNamireviewboard-1.7.6-0appsreviewboardLibsite-packageeReviewBoard-1.7.6-py2.7.eggreviewboarddiffviewerdiffutiliy.py 対象ファイル 変更内容 try: # First try strict unicode (for when everything is valid utf-8) return unicode(s, 'utf-8') except UnicodeError: # Now try any candidate encodings. for e in enc.split(','): try: - #u = unicode(s, e) + u = unicode(s, 'sjis') return u.encode('utf-8') except UnicodeError: pass 強制的に SJIS変換... diffutility.py 329行目 ReviewBoard 13年10月8日火曜日
  67. 67. 検索機能を使う https://code.google.com/a/apache-extras.org/p/pylucene-extra/downloads/detail?name=lucene-3.6.0-py2.7-win32.egg lucene-3.6.0-py2.7-win32.egg https://code.google.com/a/apache-extras.org/p/pylucene-extra/downloads/detail?name=JCC-2.13-py2.7-win32.egg&can=2&q= JCC-2.13-py2.7-win32.egg 最後にDevelopment Toolsも入れときましょう. $easy_install nose Sphinx ReviewBoard 13年10月8日火曜日

×