ゴール 品質問題の直接的な発見が主な目的となることが多いが、[ 3 ] コードレビューは通常、複数の目的を達成するために実施される。[ 4 ] [ 5 ]
コード品質の向上 – 可読性、統一性、理解しやすさ を向上させることで、内部コードの品質と保守性を向上させる。 欠陥の 検出 – 外部的な側面、特に正確性に関する品質を向上させるだけでなく、パフォーマンスの問題、セキュリティの脆弱性、注入されたマルウェアなどの問題も発見します。 学習/知識移転 – コードベースの知識、解決策、品質に関する期待値を、レビュー担当者と作成者の両方に共有する。 相互責任感を高める – コードの 共同所有意識と連帯感を高める より良い解決策を見つける – 手元の特定のコードにとらわれず、新しいより良い解決策やアイデアを生み出す 品質保証ガイドライン、ISO/IEC規格への準拠 –航空交通管制ソフトウェアや 安全性が重要な ソフトウェアなど、一部の分野ではコードレビューが必須です。
レビューの種類 コードレビュープロセスにはいくつかのバリエーションがあり、IEEE 1028 では追加のタイプが規定されています。[ 6 ]
経営陣のレビュー 技術レビュー 検査 ウォークスルー 監査
定期的な変更ベースのコードレビュー(ウォークスルー)ソフトウェア開発チームは通常、より軽量なレビュープロセスを採用し、各レビューの範囲は、チケット、ユーザーストーリー、コミット、またはその他の作業単位に対応するコードベースの変更に関連します。[ 9 ] [ 3 ] さらに、各レビューを明示的に計画するのではなく、プルリクエスト の一部としてすべてのチケットを必須レビューするなどの慣習を通じて、レビュータスクを開発ワークフローに統合するルールや慣習があります。このようなプロセスは「定期的な変更ベースのコードレビュー」と呼ばれます。[ 1 ] この基本的なプロセスには多くのバリエーションがあります。
2017年に240の開発チームを対象に行った調査では、コードレビューを使用しているチームの90%が変更ベースのプロセスに従っており、そのうち60%が定期的な変更ベースのレビューを具体的に使用していることがわかりました。[ 3 ] 変更ベースのコードレビューを使用していることで知られる主要なソフトウェア企業には、Microsoft [ 10 ] 、 Google [ 11 ] 、Facebook [ 12 ] などがあります 。
効率性と有効性 Capers Jones による 12,000 を超えるソフトウェア開発プロジェクトを分析する継続的な研究では、正式な検査では潜在的な欠陥の発見率が 60 ~ 65% であるのに対し、非公式な検査では欠陥の 50% 未満しか検出されないことがわかりました。ほとんどのテスト形式の潜在的な欠陥の発見率は約 30% です。[ 13 ] [ 14 ] 『 Best Kept Secrets of Peer Code Review』 という書籍に掲載されたコードレビューのケーススタディはCapers Jones の研究と矛盾しており、[ 13 ] 軽量レビューは正式なレビューと同じくらい多くのバグを発見でき、しかもより速く、より低コストであることがわかりました。[ 15 ]
研究によると、コードレビューのコメントの最大 75% は機能ではなくソフトウェアの進化可能性と保守性に影響を与えることが示されており、[ 16 ] [ 17 ] [ 4 ] [ 18 ] コードレビューは製品またはシステムのライフサイクルが長いソフトウェア企業にとって優れたツールであることを示唆しています。[ 19 ] したがって、コードレビューで議論される問題の 15% 未満がバグに直接関係しています。[ 20 ]
静的コード分析 ツールは、特に大規模なコード塊について、既知の脆弱性や欠陥パターンをソースコードから自動的にチェックすることで、レビュー担当者を支援します。[ 26 ] VDC Researchによる2012年の調査では、調査対象となった組み込みソフトウェアエンジニアの17.6%が現在、ピアコードレビューを支援するために自動化ツールを使用しており、23.7%が2年以内に使用する予定です。[ 27 ]
外部リンク コードレビューにおける5つのアンチパターン Java Magazine、2020年ベスト
参考文献 1 2 3 Baum, Tobias; Liskin, Olga; Niklas, Kai; Schneider, Kurt (2016). "変更ベースの産業用コードレビュープロセスのためのファセット分類スキーム". 2016 IEEE International Conference on Software Quality, Reliability and Security (QRS) . pp. 74–85 . doi : 10.1109/QRS.2016.19 . ISBN 978-1-5090-4127-5 . S2CID 9569007 . ↑ Kolawa, Adam; Huizinga, Dorota (2007). Automated Defect Prevention: Best Practices in Software Management . Wiley-IEEE Computer Society Press. p. 260. ISBN 978-0-470-04212-0 。1 2 3 Baum, Tobias; Leßmann, Hendrik; Schneider, Kurt (2017). "コードレビュープロセスの選択:実践状況に関する調査". Product-Focused Software Process Improvement . Lecture Notes in Computer Science. Vol. 10611. pp. 111–127 . doi : 10.1007/978-3-319-69926-4_9 . ISBN 978-3-319-69925-7 。1 2 Bacchelli, A; Bird, C (2013 年 5 月)。 「現代のコードレビューの期待、成果、課題」 (PDF) 。第 35 回 IEEE/ACM 国際ソフトウェア工学会議 (ICSE 2013) 議事録。2015 年 9 月 2 日 に取得 。 ↑ Baum, Tobias; Liskin, Olga; Niklas, Kai; Schneider, Kurt (2016). "産業界におけるコードレビュープロセスに影響を与える要因". Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering - FSE 2016. pp. 85–96 . doi : 10.1145/2950290.2950323 . ISBN 9781450342186 . S2CID 15467294 . ↑ IEEEソフトウェア レビューおよび監査規格 。IEEE STD 1028-2008。2008年8 月。pp. 1–53。doi : 10.1109 / ieeestd.2008.4601584。ISBN 978-0-7381-5768-9 。1 2 Fagan, Michael (1976). "プログラム開発におけるエラーを減らすための設計およびコード検査". IBM Systems Journal . 15 (3): 182– 211. doi : 10.1147/sj.153.0182 . ↑ Fagan, Michael E. (1986). "ソフトウェア検査の進歩" . IEEE Transactions on Software Engineering . SE-12 (7): 744– 751. doi : 10.1109/TSE.1986.6312976 . ISSN 2326-3881 . 2026-07-03 に取得. ↑ Rigby, Peter; Bird, Christian (2013). "Convergent contemporary software peer review practices". Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering . pp. 202–212 . CiteSeerX 10.1.1.641.1046 . doi : 10.1145/2491411.2491444 . ISBN 9781450322379 . S2CID 11163811 . ↑ MacLeod, Laura; Greiler, Michaela; Storey, Margaret-Anne ; Bird, Christian; Czerwonka, Jacek (2017). "Code Reviewing in the Trenches: Challenges and Best Practices" (PDF) . IEEE Software . 35 (4): 34. doi : 10.1109/MS.2017.265100500 . S2CID 49651487 . 2020-11-28 に取得. ↑ Sadowski, Caitlin; Söderberg, Emma; Church, Luke; Sipko, Michal; Baachelli, Alberto (2018). "Modern code review: A case study at google". Proceedings of the 40th International Conference on Software Engineering: Software Engineering in Practice . pp. 181–190 . doi : 10.1145/3183519.3183525 . ISBN 9781450356596 . S2CID 49217999 . ↑ Savor, Tony; Douglas, Mitchell; Gentili, Michael; Williams, Laurie; Beck, Kent; Stumm, Michael (2016). "FacebookとOANDAにおける継続的デプロイメント" . 2016 IEEE/ACM 38th International Conference on Software Engineering Companion (ICSE-C) . 2026年6月1日 取得 。 1 2 Jones、Capers(2008年6月)。 「欠陥の可能性と欠陥除去効率の測定」 (PDF) 。Crosstalk、防衛ソフトウェアエンジニアリングジャーナル。 2012年8月6日に オリジナル (PDF)からアーカイブ。 2010年10月5日 に取得 。 ↑ Jones, Capers; Ebert, Christof (2009年4月)「組み込みソフトウェア:事実、数字、 そして 未来 」 Computer.42 ( 4 ) : 42–52.Bibcode : 2009Compr..42d..42E.doi : 10.1109 / MC.2009.118.S2CID 14008049 . ↑ ジェイソン・コーエン (2006). ピアコードレビューの秘訣(現代的アプローチ。実践的アドバイス) 。スマートベア社 。ISBN 978-1-59916-067-2 。↑ Czerwonka, Jacek; Greiler, Michaela; Tilford, Jack (2015). "コードレビューではバグは見つからない。現在のコードレビューのベストプラクティスが開発を遅らせる理由". 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering (PDF) . Vol. 2. pp. 27–28 . doi : 10.1109/ICSE.2015.131 . ISBN 978-1-4799-1934-5 . S2CID 29074469 . 2020-11-28 に取得. ↑ Mantyla, MV; Lassenius, C. (2009). "コードレビューで実際に発見される欠陥の種類は何ですか?" (PDF) . IEEE Transactions on Software Engineering . 35 (3): 430– 448. Bibcode : 2009ITSEn..35..430M . CiteSeerX 10.1.1.188.5757 . doi : 10.1109/TSE.2008.71 . S2CID 17570489 . 2012-03-21 に取得. ↑ Beller, M; Bacchelli, A; Zaidman, A; Juergens, E (2014 年 5 月) 「オープンソース プロジェクトにおける最新のコード レビュー: どの問題を解決しているのか?」 (PDF) . 第 11 回ソフトウェア リポジトリ マイニングに関するワーキング カンファレンス (MSR 2014) の議事録. 2015 年 9 月 2 日 に取得 . ↑ Siy, Harvey; Votta, Lawrence (2004-12-01). "現代の建築基準検査には価値があるか?" (PDF) . unomaha.edu . 2015-04-28 の オリジナル (PDF) からアーカイブ済み。2015-02-17 に 取得 。 ↑ Bosu, Amiangshu; Greiler, Michaela; Bird, Chris (2015 年 5 月). "有用なコードレビューの特徴: Microsoft での実証研究" (PDF) . 2015 IEEE/ACM 12th Working Conference on Mining Software Repositories . 2020 年 11 月 28 日 取得 . 1 2 Kemerer, CF; Paulk, MC (2009-04-17). "ソフトウェア品質に対する設計レビューとコードレビューの影響: PSPデータに基づく実証研究". IEEE Transactions on Software Engineering . 35 (4): 534–550 . Bibcode : 2009ITSEn..35..534K . doi : 10.1109/TSE.2009.27 . hdl : 11059/14085 . S2CID 14432409 . ↑ 「コードレビューメトリクス」 。 オープンWebアプリケーションセキュリティプロジェクト 。 2015年10月9日に オリジナルからアーカイブ済み 。 2015年 10月9日 に取得。 ↑ 「ピアコードレビューのベストプラクティス」 。Smart Bear。Smart Bear Software。 2015年10月9日に オリジナルからアーカイブ済み 。 2015年 10月9日 に取得。 ↑ Bisant, David B. (1989 年 10 月). 「プログラミング生産性を向上させるための 2 人による検査方法」 . IEEE Transactions on Software Engineering . 15 (10): 1294–1304 . doi : 10.1109/TSE.1989.559782 . S2CID 14921429. 2015 年 10 月 9 日 取得 。 ↑ ガンスル、ジャック(2010年2月)。 「コード検査の手引き」 (PDF) 。ガンスルグループ。 2010年10月5日 取得 。 ↑ Balachandran, Vipin (2013). "自動静的解析とレビュー担当者推薦を用いたピアコードレビューにおける人的労力の削減と品質向上". 2013 第35回国際ソフトウェア工学会議 (ICSE) . pp. 931–940 . doi : 10.1109/ICSE.2013.6606642 . ISBN 978-1-4673-3076-3 . S2CID 15823436 . ↑ VDC Research (2012-02-01). "組み込みソフトウェア品質のための自動欠陥防止" . VDC Research . 2012-04-10 に取得.