Деятельность, в которой один или несколько человек проверяют код программы.
Обзор кода (иногда называемый рецензией ) — это деятельность по обеспечению качества программного обеспечения , в которой один или несколько человек проверяют исходный код компьютерной программы либо после внедрения, либо в процессе разработки. Лица, выполняющие проверку, за исключением автора, называются «рецензентами». По крайней мере один рецензент не должен быть автором кода. [1] [2]
Хотя прямое обнаружение проблем качества часто является основной целью, [3] обзоры кода обычно проводятся для достижения комбинации целей: [4] [5]
Улучшение качества кода – улучшение внутреннего качества кода и удобства его поддержки за счет лучшей читаемости, единообразия и понятности.
Обнаружение дефектов — повышение качества в отношении внешних аспектов, особенно корректности, а также выявление таких проблем, как проблемы с производительностью, уязвимости безопасности и внедрение вредоносного ПО.
Обучение/передача знаний – обмен знаниями о кодовой базе, подходами к решению и ожиданиями по качеству как с рецензентами, так и с автором.
Увеличить чувство взаимной ответственности – Увеличить чувство коллективной ответственности за код и солидарности
Поиск лучших решений — генерирование идей для новых и лучших решений, а также идей, выходящих за рамки конкретного кода.
Соответствие рекомендациям по обеспечению качества, стандартам ISO/IEC. В некоторых контекстах обзоры кода являются обязательными, например, для программного обеспечения для управления воздушным движением и программного обеспечения , критически важного для безопасности.
Типы обзоров
Существует несколько вариантов процессов проверки кода, а также дополнительные типы, указанные в IEEE 1028. [6 ]
Обзоры управления
Технические обзоры
Инспекции
Проходы
Аудиты
Инспекция (формальная)
Исторически первый процесс проверки кода, который был изучен и подробно описан, был назван «Инспекцией» его создателем Майклом Фейганом . [7] Инспекция Фейгана — это формальный процесс, который включает тщательное и подробное выполнение с несколькими участниками и фазами. В формальных проверках кода разработчики программного обеспечения посещают ряд собраний для изучения кода строка за строкой, часто используя печатные копии. Исследования показали, что формальные проверки являются чрезвычайно тщательными и высокоэффективными для выявления дефектов. [7]
Регулярный обзор кода на основе изменений (сквозные обзоры)
В последние годы [ когда? ] многие отраслевые команды приняли облегченный процесс обзора, в котором областью каждого обзора являются изменения в кодовой базе, выполненные в тикете, пользовательской истории, коммите или какой-либо другой единице работы. [8] [3] Кроме того, существуют правила или соглашения, которые интегрируют задачу обзора в рабочий процесс разработки с помощью соглашений, таких как обязательный обзор всех тикетов, обычно как часть запроса на извлечение , вместо явного планирования каждого обзора. Такой процесс называется «регулярным обзором кода на основе изменений». [1] Существует множество вариаций этого базового процесса. Опрос 240 команд разработчиков, проведенный в 2017 году, показал, что 90% команд, использующих обзор кода, следовали процессу на основе изменений, причем 60% специально использовали регулярный обзор на основе изменений. [3] Крупные корпорации-разработчики программного обеспечения, включая такие, как Microsoft, [9] Google, [10] и Facebook, следуют процессу обзора кода на основе изменений.
Эффективность и результативность
Текущее исследование Capers Jones, анализирующее более 12 000 проектов по разработке программного обеспечения, показало, что формальные проверки имели уровень обнаружения скрытых дефектов 60-65%, в то время как неформальные проверки обнаруживали менее 50% дефектов. Уровень обнаружения скрытых дефектов для большинства форм тестирования составляет около 30%. [11] [12] Исследование случая обзора кода, опубликованное в книге Best Kept Secrets of Peer Code Review, противоречит исследованию Capers Jones, [11] обнаружив, что легкие обзоры могут обнаружить столько же ошибок, сколько и формальные обзоры, будучи при этом более эффективными с точки зрения затрат и денег [13]
Исследования показывают, что до 75% комментариев к обзору кода влияют на возможность развития и обслуживания программного обеспечения, а не на функциональность, [14] [15] [4] [16], что говорит о том, что обзоры кода являются отличным инструментом для компаний-разработчиков программного обеспечения с длительными жизненными циклами продуктов или систем. [17] Таким образом, менее 15% проблем, обсуждаемых в обзорах кода, напрямую связаны с ошибками. [18]
Руководящие принципы
Исследования показывают, что эффективность обзора коррелирует со скоростью обзора. Оптимальная скорость обзора кода составляет от 200 до 400 строк кода в час. [19] [20] [21] [22] Проверка и обзор более нескольких сотен строк кода в час для критически важного программного обеспечения (например, критически важного для безопасности встроенного программного обеспечения ) может оказаться слишком быстрой для поиска ошибок. [19] [23]
Вспомогательные инструменты
Программное обеспечение для статического анализа кода помогает рецензентам, автоматически проверяя исходный код на наличие известных уязвимостей и шаблонов дефектов, особенно для больших фрагментов кода. [24] Исследование, проведенное VDC Research в 2012 году, сообщает, что 17,6% опрошенных инженеров встроенного программного обеспечения в настоящее время используют автоматизированные инструменты для поддержки коллегиальной проверки кода, а 23,7% планируют использовать их в течение двух лет. [25]
^ abc Баум, Тобиас; Лискин, Ольга; Никлас, Кай; Шнайдер, Курт (2016). «Схема многогранной классификации для процессов проверки промышленного кода на основе изменений». Международная конференция IEEE 2016 года по качеству, надежности и безопасности программного обеспечения (QRS) . стр. 74–85. doi :10.1109/QRS.2016.19. ISBN 978-1-5090-4127-5. S2CID 9569007.
^ Колава, Адам; Хейзинга, Дорота (2007). Автоматизированное предотвращение дефектов: лучшие практики в управлении программным обеспечением. Wiley-IEEE Computer Society Press. стр. 260. ISBN978-0-470-04212-0.
^ abc Баум, Тобиас; Лессманн, Хендрик; Шнайдер, Курт (2017). «Выбор процесса проверки кода: обзор состояния практики». Улучшение процесса разработки программного обеспечения, ориентированного на продукт . Конспект лекций по информатике. Том 10611. С. 111–127. doi :10.1007/978-3-319-69926-4_9. ISBN978-3-319-69925-7.
^ ab Bacchelli, A; Bird, C (май 2013 г.). "Ожидания, результаты и проблемы современного обзора кода" (PDF) . Труды 35-й Международной конференции IEEE/ACM по программной инженерии (ICSE 2013) . Получено 2015-09-02 .
^ Баум, Тобиас; Лискин, Ольга; Никлас, Кай; Шнайдер, Курт (2016). «Факторы, влияющие на процессы проверки кода в промышленности». Труды 24-го Международного симпозиума ACM SIGSOFT по основам программной инженерии 2016 г. — FSE 2016. стр. 85–96. doi :10.1145/2950290.2950323. ISBN9781450342186. S2CID 15467294.
^ Стандарт IEEE для обзоров и аудитов программного обеспечения. IEEE STD 1028-2008. Август 2008. С. 1–53. doi :10.1109/ieeestd.2008.4601584. ISBN978-0-7381-5768-9.
^ ab Фаган, Майкл (1976). «Проектирование и инспекции кода для уменьшения ошибок при разработке программ». IBM Systems Journal . 15 (3): 182–211. doi :10.1147/sj.153.0182.
^ Ригби, Питер; Берд, Кристиан (2013). «Конвергентные современные практики рецензирования программного обеспечения». Труды 9-го совместного заседания по основам программной инженерии 2013 г. . стр. 202–212. CiteSeerX 10.1.1.641.1046 . doi :10.1145/2491411.2491444. ISBN9781450322379. S2CID 11163811.
^ Маклеод, Лора; Грейлер, Микаэла; Стори, Маргарет-Энн; Берд, Кристиан; Червонка, Яцек (2017). «Обзор кода в окопах: проблемы и лучшие практики» (PDF) . IEEE Software . 35 (4): 34. doi :10.1109/MS.2017.265100500. S2CID 49651487 . Получено 28.11.2020 .
^ Садовски, Кейтлин; Сёдерберг, Эмма; Чёрч, Люк; Сипко, Михал; Баакелли, Альберто (2018). «Современный обзор кода: исследование случая в Google». Труды 40-й Международной конференции по программной инженерии: программная инженерия на практике . стр. 181–190. doi : 10.1145/3183519.3183525 . ISBN9781450356596. S2CID 49217999.
^ ab Jones, Capers (июнь 2008 г.). "Измерение потенциала дефектов и эффективности удаления дефектов" (PDF) . Crosstalk, The Journal of Defense Software Engineering. Архивировано из оригинала (PDF) 2012-08-06 . Получено 2010-10-05 .
^ Джонс, Кейперс; Эберт, Кристоф (апрель 2009 г.). «Встроенное программное обеспечение: факты, цифры и будущее». Computer . 42 (4): 42–52. doi :10.1109/MC.2009.118. S2CID 14008049.
^ Джейсон Коэн (2006). Лучшие секреты Peer Code Review (Современный подход. Практические советы.) . Smart Bear Inc. ISBN978-1-59916-067-2.
^ Czerwonka, Jacek; Greiler, Michaela; Tilford, Jack (2015). «Обзоры кода не находят ошибок. Как текущая передовая практика обзора кода замедляет нас». 2015 IEEE/ACM 37-я Международная конференция IEEE по программной инженерии (PDF) . Том 2. С. 27–28. doi :10.1109/ICSE.2015.131. ISBN978-1-4799-1934-5. S2CID 29074469 . Получено 28.11.2020 .
^ Mantyla, MV; Lassenius, C. (2009). «Какие типы дефектов действительно обнаруживаются при обзорах кода?» (PDF) . IEEE Transactions on Software Engineering . 35 (3): 430–448. CiteSeerX 10.1.1.188.5757 . doi :10.1109/TSE.2008.71. S2CID 17570489 . Получено 21.03.2012 .
^ Беллер, М.; Баккелли, А.; Зайдман, А.; Юргенс, Э. (май 2014 г.). «Современные обзоры кода в проектах с открытым исходным кодом: какие проблемы они исправляют?» (PDF) . Труды 11-й рабочей конференции по репозиториям программного обеспечения для майнинга (MSR 2014) . Получено 2015-09-02 .
^ Siy, Harvey; Votta, Lawrence (2004-12-01). "Имеет ли современная инспекция кода ценность?" (PDF) . unomaha.edu . Архивировано из оригинала (PDF) 2015-04-28 . Получено 2015-02-17 .
^ Босу, Амиангшу; Грейлер, Микаэла; Берд, Крис (май 2015 г.). «Характеристики полезных обзоров кода: эмпирическое исследование в Microsoft» (PDF) . 12-я рабочая конференция IEEE/ACM 2015 г. по репозиториям программного обеспечения для майнинга . Получено 28 ноября 2020 г.
^ ab Kemerer, CF; Paulk, MC (2009-04-17). «Влияние дизайна и обзоров кода на качество программного обеспечения: эмпирическое исследование на основе данных PSP». IEEE Transactions on Software Engineering . 35 (4): 534–550. doi :10.1109/TSE.2009.27. hdl : 11059/14085 . S2CID 14432409.
^ "Code Review Metrics". Open Web Application Security Project . Архивировано из оригинала 2015-10-09 . Получено 9 октября 2015 г.
^ "Best Practices for Peer Code Review". Smart Bear . Программное обеспечение Smart Bear. Архивировано из оригинала 2015-10-09 . Получено 9 октября 2015 г.
^ Bisant, David B. (октябрь 1989 г.). «Метод инспекции двумя людьми для повышения производительности программирования». IEEE Transactions on Software Engineering . 15 (10): 1294–1304. doi :10.1109/TSE.1989.559782. S2CID 14921429. Получено 9 октября 2015 г.
^ Ganssle, Jack (февраль 2010 г.). "Руководство по инспекциям кода" (PDF) . The Ganssle Group . Получено 2010-10-05 .
^ Балачандран, Випин (2013). «Сокращение человеческих усилий и повышение качества при экспертной оценке кода с использованием автоматического статического анализа и рекомендаций рецензентов». 2013 35-я Международная конференция по программной инженерии (ICSE) . С. 931–940. doi :10.1109/ICSE.2013.6606642. ISBN978-1-4673-3076-3. S2CID 15823436.
^ VDC Research (2012-02-01). "Автоматизированное предотвращение дефектов для обеспечения качества встроенного программного обеспечения". VDC Research . Получено 2012-04-10 .