Your SlideShare is downloading. ×
コードレビューのススメ
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

コードレビューのススメ

5,223
views

Published on

社内勉強会用に作成したコードレビューの資料です。 …

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

Published in: Technology

0 Comments
18 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,223
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
34
Comments
0
Likes
18
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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