stringtranslate.com

Обзор кода

Инженеры-программисты ( они же программисты) проверяют программу

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

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

Цель

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

Типы обзоров

Существует несколько вариантов процессов проверки кода, а также дополнительные типы, указанные в 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]

Смотрите также

Внешние ссылки

Ссылки

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