Просмотр кода

Просмотр кода (англ. code review, иногда также англ. peer review — «экспертная проверка») — это процесс обеспечения качества программного обеспечения, при котором один или несколько участников анализируют исходный код компьютерной программы, как после реализации, так и в ходе разработки. Участники проверки, не являющиеся автором кода, называются «рецензентами». По крайней мере один рецензент не должен быть автором проверяемого кода[1].

Просмотр кода отличается от других методов обеспечения качества, таких как статический анализ кода, самостоятельная проверка, тестирование программного обеспечения и парное программирование. Статический анализ основывается главным образом на автоматических инструментах, самостоятельная проверка выполняется только автором, тестирование требует исполнения кода, а парное программирование проходит непрерывно в ходе разработки, а не как отдельный этап[1].

undefined

Цели

Хотя непосредственное выявление проблем с качеством часто является основной целью[2], просмотр кода обычно проводится для достижения комплекса целей:[3][4]

  • Повышение качества кода — улучшение внутреннего качества и сопровождаемости благодаря лучшей читаемости, последовательности и понятности для других разработчиков.
  • Обнаружение дефектов — обеспечение качества по внешним критериям, включая корректность, а также выявление проблем с производительностью, уязвимостей и внедрённого вредоносного кода.
  • Обучение и передача знаний — распространение информации о кодовой базе, способах решения задач и ожиданиях по качеству между рецензентами и автором.
  • Повышение чувства коллективной ответственности — формирование ощущения общей собственности на код и сплочённости команды.
  • Поиск лучших решений — генерация идей для новых и более эффективных решений не только для текущего кода, но и в целом.
  • Соответствие стандартам QA и ISO/IEC — выполнение требований по обязательному просмотру кода в ряде сфер, включая системы управления воздушным движением и другие критически важные системы.

Виды просмотра кода

Существует несколько вариантов процесса просмотра кода, дополнительные типы описаны в стандарте IEEE 1028[5].

  • Управленческие обзоры
  • Технические обзоры
  • Инспекции
  • Пошаговый разбор (walk-through)
  • Аудиты

Инспекция (формальная)

Первым подробно изученным и описанным видом просмотра кода стал процесс под названием «инспекция», предложенный Майклом Фейганом[6]. Фейгановская инспекция — это формализованный процесс, включающий тщательное и поэтапное обсуждение с участием нескольких специалистов. При формальном просмотре кода разработчики собираются на серию встреч для построчного анализа, часто используя бумажные копии исходников. Исследования показывают, что такие инспекции крайне детальны и эффективны для выявления дефектов[6].

Регулярная проверка изменений (пошаговый разбор, walk-through)

На практике команды разработки чаще используют более лёгкие процессы, при которых обзор касается изменений, связанных с тикетом, пользовательской историей, коммитом или иной единицей работы[7].[2] Часто устанавливаются правила, интегрирующие просмотр в рабочий процесс (например, обязательная проверка всех тикетов, обычно через механизм pull request), исключая отдельное планирование для каждой задачи. Такой процесс называют регулярным просмотров кода на основе изменений[1]. Существует множество вариаций этого подхода.

По данным исследования 2017 года, 90 % команд, применяющих просмотр кода, используют именно процесс, основанный на изменениях, а 60 % из них — регулярный просмотр на основе изменений[2]. Крупные ИТ-компании, применяющие этот подход, включают Microsoft[8], Google[9], и Facebook.

Эффективность и результативность

Согласно исследованиям Каперса Джонса, основанным на анализе более 12 000 проектов, формальные инспекции выявляют 60–65 % скрытых дефектов, неформальные проверки — менее 50 %, а тестирование — около 30 %[10].

Однако данные исследования, включённые в книгу Best Kept Secrets of Peer Code Review[10], показывают, что «лёгкие» проверки находят столько же ошибок, сколько и формальные, но при этом быстрее и дешевле[11].

Исследования показывают, что до 75 % замечаний в ходе просмотра кода относятся не к функциональности, а к развитию и поддерживаемости программного обеспечения[12], что делает просмотр кода особенно полезным для компаний с длительным жизненным циклом продуктов[13]. Менее 15 % дискуссий в процессе просмотра кода напрямую связаны с ошибками[14].

Рекомендации по проведению просмотра кода

Результативность просмотра кода зависит от скорости его проведения: наиболее эффективной считается скорость 200–400 строк кода в час[15].

Анализ и проверка большего объёма кода в час (особенно при критических приложениях) приводят к высокому риску пропуска ошибок[15][16].

Вспомогательные инструменты

Инструменты статического анализа кода помогают рецензентам автоматически выявлять известные уязвимости и паттерны ошибок, особенно при работе с большими объёмами кода[17]. Согласно исследованию VDC Research (2012), 17,6 % инженеров, занятых разработкой встроенного ПО, уже используют автоматизированные инструменты для просмотра кода, а 23,7 % планируют их внедрение в течение двух лет[18].

Примечания

  1. 1 2 3 Baum, Тобиас. A Faceted Classification Scheme for Change-Based Industrial Code Review Processes // 2016 IEEE International Conference on Software Quality, Reliability and Security (QRS) / Тобиас Baum, Ольга Лискин, Кай Никлас … [и др.]. — 2016. — P. 74–85. — ISBN 978-1-5090-4127-5. — doi:10.1109/QRS.2016.19.
  2. 1 2 3 Baum, Тобиас. The Choice of Code Review Process: A Survey on the State of the Practice // Product-Focused Software Process Improvement / Тобиас Baum, Хендрик Leßmann, Курт Шнайдер. — 2017. — Vol. 10611. — P. 111–127. — ISBN 978-3-319-69925-7. — doi:10.1007/978-3-319-69926-4_9.
  3. Bacchelli, A; Bird, C Expectations, outcomes, and challenges of modern code review. Proceedings of the 35th IEEE/ACM International Conference On Software Engineering (ICSE 2013) (май 2013). Дата обращения: 2 сентября 2015. Архивировано 4 сентября 2025 года.
  4. Baum, Тобиас. Factors Influencing Code Review Processes in Industry // Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering - FSE 2016 / Тобиас Baum, Ольга Лискин, Кай Никлас … [и др.]. — 2016. — P. 85–96. — ISBN 9781450342186. — doi:10.1145/2950290.2950323.
  5. IEEE Standard for Software Reviews and Audits. — IEEE STD 1028-2008, август 2008. — P. 1–53. — ISBN 978-0-7381-5768-9. — doi:10.1109/ieeestd.2008.4601584.
  6. 1 2 Фейган, Майкл (1976). “Design and code inspections to reduce errors in program development”. IBM Systems Journal. 15 (3): 182—211. DOI:10.1147/sj.153.0182.
  7. Rigby, Питер. Convergent contemporary software peer review practices // Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering / Питер Rigby, Кристиан Bird. — 2013. — P. 202–212. — ISBN 9781450322379. — doi:10.1145/2491411.2491444.
  8. MacLeod, Лора; Грилер, Микаэла; Стори, Маргарет-Анн; Bird, Кристиан; Червонка, Яцек (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.
  9. Sadowski, Кэйтлин. Modern code review: A case study at google // Proceedings of the 40th International Conference on Software Engineering: Software Engineering in Practice / Кэйтлин Sadowski, Эмма Söderberg, Люк Church … [и др.]. — 2018. — P. 181–190. — ISBN 9781450356596. — doi:10.1145/3183519.3183525.
  10. 1 2 Джонс, Каперс Measuring Defect Potentials and Defect Removal Efficiency. Crosstalk, The Journal of Defense Software Engineering (июнь 2008). Дата обращения: 5 октября 2010. Архивировано 6 августа 2012 года.
  11. Джейсон Коэн. Best Kept Secrets of Peer Code Review (Modern Approach. Practical Advice.). — Smart Bear Inc., 2006. — ISBN 978-1-59916-067-2.
  12. Червонка, Яцек. Code Reviews do Not Find Bugs. How the Current Code Review Best Practice Slows Us Down // 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering / Яцек Червонка, Микаэла Грилер, Джек Тилфорд. — 2015. — Vol. 2. — P. 27–28. — ISBN 978-1-4799-1934-5. — doi:10.1109/ICSE.2015.131.
  13. Siy, Harvey; Votta, Lawrence Does the Modern Code Inspection Have Value? unomaha.edu (1 декабря 2004). Дата обращения: 17 февраля 2015. Архивировано 28 апреля 2015 года.
  14. Bosu, Амиангшу; Грилер, Микаэла; Bird, Крис Characteristics of Useful Code Reviews: An Empirical Study at Microsoft. 2015 IEEE/ACM 12th Working Conference on Mining Software Repositories (май 2015). Дата обращения: 28 ноября 2020. Архивировано 26 сентября 2025 года.
  15. 1 2 Kemerer, C.F.; Paulk, M.C. (2009-04-17). “The Impact of Design and Code Reviews on Software Quality: An Empirical Study Based on PSP Data”. IEEE Transactions on Software Engineering. 35 (4): 534—550. Bibcode:2009ITSEn..35..534K. DOI:10.1109/TSE.2009.27. HDL:11059/14085. S2CID 14432409.
  16. Ganssle, Jack A Guide to Code Inspections. The Ganssle Group (февраль 2010). Дата обращения: 5 октября 2010. Архивировано 11 марта 2003 года.
  17. Balachandran, Vipin. Reducing human effort and improving quality in peer code reviews using automatic static analysis and reviewer recommendation // 2013 35th International Conference on Software Engineering (ICSE). — 2013. — P. 931–940. — ISBN 978-1-4673-3076-3. — doi:10.1109/ICSE.2013.6606642.
  18. VDC Research Automated Defect Prevention for Embedded Software Quality. VDC Research (1 февраля 2012). Дата обращения: 10 апреля 2012. Архивировано 7 апреля 2012 года.

Категории