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