Проверка кода (иногда называемая экспертной проверкой ) - это деятельность по обеспечению качества программного обеспечения, при которой один или несколько человек проверяют программу в основном путем просмотра и чтения частей ее исходного кода , и они делают это после реализации или в качестве прерывания реализации. По крайней мере, одно из лиц не должно быть автором кода. Лица, проводящие проверку, за исключением автора, называются «рецензентами». [1] [2]
Хотя прямое обнаружение проблем качества часто является основной целью, [3] проверки кода обычно выполняются для достижения нескольких целей: [4] [5]
- Лучшее качество кода - улучшение внутреннего качества кода и удобства сопровождения (читаемость, единообразие, понятность и т. Д.)
- Обнаружение дефектов - улучшите качество в отношении внешних аспектов, особенно правильности, но также найдите проблемы с производительностью, уязвимости безопасности, внедренное вредоносное ПО и т. Д.
- Обучение / передача знаний - помощь в передаче знаний о кодовой базе, подходах к решениям, ожиданиях в отношении качества и т.д .; как рецензентам, так и автору
- Повышение чувства взаимной ответственности - повышение чувства коллективной собственности и солидарности
- Поиск лучших решений - генерируйте идеи для новых и лучших решений и идей, выходящих за рамки конкретного кода.
- Соответствие руководящим принципам обеспечения качества, стандартам ISO / IEC - в некоторых контекстах обязательны обзоры кодов, например, программное обеспечение для воздушного движения, программное обеспечение, критически важное для безопасности.
Вышеупомянутое определение обзора кода отличает его от соседних, но отдельных методов обеспечения качества программного обеспечения : при статическом анализе кода основная проверка выполняется автоматизированной программой, при самопроверках только автор проверяет код, при тестировании выполнения кода является неотъемлемой частью, и парное программирование выполняется непрерывно во время реализации, а не как отдельный шаг. [1]
Типы обзоров
Существует множество вариантов процессов проверки кода, некоторые из которых будут подробно описаны ниже. Дополнительные типы обзора являются частью IEEE 1028
IEEE 1028-2008 перечисляет следующие типы проверки: [6]
- Обзоры со стороны руководства
- Технические обзоры
- Инспекции
- Прогулки
- Аудит
Инспекция (формальная)
Исторически первый процесс проверки кода, который был изучен и подробно описан, был назван его изобретателем Майклом Фаганом «Инспекцией» . [7] Эта инспекция Фэгана - формальный процесс, который включает в себя тщательное и детальное выполнение с множеством участников и множеством фаз. Формальные обзоры кода - это традиционный метод обзора, при котором разработчики программного обеспечения посещают серию встреч и просматривают код построчно, обычно используя печатные копии материалов. Формальные проверки являются чрезвычайно тщательными и доказали свою эффективность при обнаружении дефектов в проверяемом коде. [7]
Регулярная проверка кода на основе изменений (пошаговые инструкции)
В последние годы [ когда? ] многие отраслевые команды ввели более легкий вид проверки кода. [8] [3] Его основная характеристика заключается в том, что объем каждого обзора основан на изменениях в кодовой базе, выполненных в заявке, пользовательской истории, фиксации или какой-либо другой единице работы. Кроме того, существуют правила или соглашения, которые включают задачу проверки в процесс разработки (например, «каждая заявка должна быть проверена») вместо явного планирования каждой проверки. Такой процесс проверки называется «регулярной проверкой кода на основе изменений». [1] Есть много вариантов этого основного процесса. Опрос 240 команд разработчиков в 2017 году показал, что 90% команд используют процесс проверки, основанный на изменениях (если они вообще используют обзоры), а 60% используют регулярную проверку кода на основе изменений. [3] Кроме того, большинство крупных корпораций по разработке программного обеспечения, таких как Microsoft, [9] Google, [10] и Facebook, следуют процессу проверки кода на основе изменений.
Оперативность и результативность отзывов
Постоянный анализ более 12 000 проектов разработки программного обеспечения, проведенный Каперсом Джонсом, показал, что уровень обнаружения скрытых дефектов при формальной проверке находится в диапазоне 60-65%. При неофициальном осмотре цифра меньше 50%. Уровень обнаружения скрытых дефектов для большинства форм тестирования составляет около 30%. [11] [12] Пример анализа кода, опубликованный в книге Best Kept Secrets of Peer Code Review, показал, что легкие обзоры могут выявить столько же ошибок, сколько и формальные обзоры, но были быстрее и экономичнее [13] в отличие от исследование, проведенное Capers Jones [11]
Также были изучены типы дефектов, обнаруженных при проверке кода. Эмпирические исследования показали, что до 75% дефектов проверки кода влияют на эволюционируемость / ремонтопригодность программного обеспечения, а не на функциональность, [14] [15] [4] [16], что делает обзоры кода отличным инструментом для компаний-разработчиков программного обеспечения с длинными жизненными циклами продуктов или систем . [17] Это также означает, что менее 15% проблем, обсуждаемых при проверке кода, связаны с ошибками. [18]
Методические рекомендации
Было обнаружено, что эффективность проверки кода зависит от скорости проверки. Скорость проверки кода должна составлять от 200 до 400 строк кода в час. [19] [20] [21] [22] Проверка и проверка более нескольких сотен строк кода в час для критически важного программного обеспечения (например, критически важного для безопасности встроенного программного обеспечения ) может оказаться слишком быстрой для обнаружения ошибок. [19] [23]
Вспомогательные инструменты
Статический анализ кода программного обеспечение уменьшает задачу анализа больших кусков коды на разработчике систематически проверять исходный код для известных уязвимостей и типов дефектов. [24] Исследование, проведенное VDC Research в 2012 году, сообщает, что 17,6% опрошенных инженеров по встроенному ПО в настоящее время используют автоматизированные инструменты для поддержки коллегиального обзора кода, а 23,7% планируют использовать их в течение 2 лет. [25]
Смотрите также
- Обзор программного обеспечения
- Качество программного обеспечения
- Лучшие практики кодирования
- Список философий разработки программного обеспечения
Внешние ссылки
- Пять антипаттернов проверки кода ( журнал Java, лучшее за 2020 год )
Рекомендации
- ^ a b c Баум, Тобиас; Лискин, Ольга; Никлас, Кай; Шнайдер, Курт (2016). «Схема многогранной классификации для основанных на изменениях процессов обзора промышленного кодекса». 2016 IEEE Международная конференция по качеству программного обеспечения, надежности и безопасности (КСС) . С. 74–85. DOI : 10.1109 / QRS.2016.19 . ISBN 978-1-5090-4127-5. S2CID 9569007 .
- ^ Колава, Адам; Хейзинга, Дорота (2007). Автоматическое предотвращение дефектов: передовой опыт управления программным обеспечением . Пресса компьютерного общества Wiley-IEEE. п. 260. ISBN 978-0-470-04212-0.
- ^ а б в Баум, Тобиас; Лессманн, Хендрик; Шнайдер, Курт (2017). Выбор процесса проверки кода: обзор состояния практики . Улучшение процесса разработки программного обеспечения, ориентированного на продукт: 18-я международная конференция, PROFES 2017, Труды . Конспект лекций по информатике. 10611 . С. 111–127. DOI : 10.1007 / 978-3-319-69926-4_9 . ISBN 978-3-319-69925-7.
- ^ а б Баккелли, А; Берд, К. (май 2013 г.). «Ожидания, результаты и проблемы современной проверки кода» (PDF) . Материалы 35-й Международной конференции IEEE / ACM по разработке программного обеспечения (ICSE 2013) . Проверено 2 сентября 2015 .
- ^ Баум, Тобиас; Лискин, Ольга; Никлас, Кай; Шнайдер, Курт (2016). «Факторы, влияющие на процессы проверки кодекса в промышленности». Материалы 24-го международного симпозиума ACM SIGSOFT по основам программной инженерии 2016 г. - FSE 2016 . С. 85–96. DOI : 10.1145 / 2950290.2950323 . ISBN 9781450342186. S2CID 15467294 .
- ^ «Стандарт IEEE для обзоров и аудита программного обеспечения» . DOI : 10.1109 / ieeestd.2008.4601584 . Цитировать журнал требует
|journal=
( помощь ) - ^ а б Фэган, Майкл (1976). «Проверка дизайна и кода для уменьшения ошибок при разработке программ». IBM Systems Journal . 15 (3): 182–211. DOI : 10.1147 / sj.153.0182 .
- ^ Ригби, Питер; Птица, Кристиан (2013). Конвергентные современные практики экспертной оценки программного обеспечения . Труды 2013 9 Совместное совещание по Основе программной инженерии . п. 202. CiteSeerX 10.1.1.641.1046 . DOI : 10.1145 / 2491411.2491444 . ISBN 9781450322379. S2CID 11163811 .
- ^ МакЛауд, Лаура; Грейлер, Микаэла; Стори, Маргарет-Энн; Птица, Кристиан; Червонка, Яцек (2017). «Проверка кода в окопах: проблемы и передовой опыт» (PDF) . Программное обеспечение IEEE . 35 (4): 34. DOI : 10,1109 / MS.2017.265100500 . S2CID 49651487 . Проверено 28 ноября 2020 .
- ^ Садовски, Кейтлин; Седерберг, Эмма; Церковь, Лука; Сипко, Михал; Баачелли, Альберто (2018). «Modern Code Review: пример использования Google» . Международная конференция по программной инженерии, программная инженерия на практике Трек : 181. doi : 10.1145 / 3183519.3183525 . S2CID 49217999 .
- ^ а б Джонс, Каперс (июнь 2008 г.). «Измерение потенциала дефектов и эффективности удаления дефектов» (PDF) . Перекрестные помехи, журнал оборонной программной инженерии. Архивировано из оригинального (PDF) на 2012-08-06 . Проверено 5 октября 2010 .
- ^ Джонс, Каперс; Эберт, Кристоф (апрель 2009 г.). «Встроенное программное обеспечение: факты, цифры и будущее». Компьютер . 42 (4): 42–52. DOI : 10,1109 / MC.2009.118 . S2CID 14008049 .
- ^ Джейсон Коэн (2006). Лучшие секреты коллегиальной проверки кодекса (современный подход. Практические советы) . ISBN Smart Bear Inc. 978-1-59916-067-2.
- ^ Червонка, Яцек; Грейлер, Микаэла; Тилфорд, Джек (2015). «Проверки кода не обнаруживают ошибок. Как текущая передовая практика проверки кода тормозит нас» (PDF) . ICSE '15: Материалы 37-й Международной конференции по программной инженерии . 2 : 27–28. DOI : 10.1109 / ICSE.2015.131 . ISBN 978-1-4799-1934-5. S2CID 29074469 . Проверено 28 ноября 2020 .
- ^ Мантила, М.В. Лассениус, К. (2009). «Какие типы дефектов действительно обнаруживаются при проверке кода?» (PDF) . IEEE Transactions по разработке программного обеспечения . 35 (3): 430–448. CiteSeerX 10.1.1.188.5757 . DOI : 10.1109 / TSE.2008.71 . S2CID 17570489 . Проверено 21 марта 2012 .
- ^ Беллер, М; Баккелли, А; Зайдман, А; Юргенс, Э (май 2014 г.). «Современные проверки кода в проектах с открытым исходным кодом: какие проблемы они решают?» (PDF) . Материалы 11-й рабочей конференции по репозиториям программного обеспечения для майнинга (MSR 2014) . Проверено 2 сентября 2015 .
- ^ Сий, Харви; Вотта, Лоуренс (2004-12-01). «Имеет ли ценность современная проверка кодекса?» (PDF) . unomaha.edu . Архивировано из оригинального (PDF) 28 апреля 2015 года . Проверено 17 февраля 2015 .
- ^ Босу, Амиангшу; Грейлер, Микаэла; Птица, Крис (май 2015 г.). «Характеристики полезных обзоров кода: эмпирическое исследование в Microsoft» (PDF) . 2015 12-я рабочая конференция IEEE / ACM по репозиториям программного обеспечения для майнинга . Проверено 28 ноября 2020 .
- ^ а б Кемерер, CF; Полк, MC (17 апреля 2009 г.). «Влияние анализа дизайна и кода на качество программного обеспечения: эмпирическое исследование, основанное на данных PSP». IEEE Transactions по разработке программного обеспечения . 35 (4): 534–550. DOI : 10.1109 / TSE.2009.27 . S2CID 14432409 .
- ^ «Метрики проверки кода» . Откройте проект безопасности веб-приложений . Откройте проект безопасности веб-приложений. Архивировано из оригинала на 2015-10-09 . Проверено 9 октября 2015 года .
- ^ «Лучшие практики коллегиальной проверки кода» . Умный медведь . Программное обеспечение Smart Bear. Архивировано из оригинала на 2015-10-09 . Проверено 9 октября 2015 года .
- ^ Бисант, Дэвид Б. (октябрь 1989 г.). «Метод проверки двумя людьми для повышения производительности программирования» . IEEE Transactions по разработке программного обеспечения . 15 (10): 1294–1304. DOI : 10.1109 / TSE.1989.559782 . S2CID 14921429 . Проверено 9 октября 2015 года .
- ^ Ганссл, Джек (февраль 2010 г.). «Руководство по проверке кода» (PDF) . Группа Ganssle . Проверено 5 октября 2010 .
- ^ Балачандран, Випин (2013). «Сокращение человеческих усилий и повышение качества экспертных проверок кода с помощью автоматического статического анализа и рекомендаций проверяющих». 2013 35-я Международная конференция по программной инженерии (ICSE) . С. 931–940. DOI : 10.1109 / ICSE.2013.6606642 . ISBN 978-1-4673-3076-3. S2CID 15823436 .
- ^ Исследование VDC (01.02.2012). «Автоматическое предотвращение дефектов для обеспечения качества встроенного программного обеспечения» . VDC Research . Проверено 10 апреля 2012 .