Разработка и качество программного обеспечения
Разработка и качество программного обеспечения касаются дисциплинированного создания работающего кода и методов — тестирования, верификации, анализа и измерения — которые устанавливают и гарантируют соответствие программного обеспечения его требованиям и целям качества.
Definition
Разработка программного обеспечения — это детальное создание работающего программного обеспечения посредством кодирования, верификации, модульного тестирования и отладки, а качество программного обеспечения — это степень, в которой программное обеспечение удовлетворяет своим заявленным и подразумеваемым требованиям, обеспечиваемая верификацией, валидацией и деятельностью по управлению качеством.
Scope
Эта область охватывает практики разработки программного обеспечения, включая стандарты кодирования, защитное программирование и модульное тестирование; уровни и методы тестирования программного обеспечения; верификацию и валидацию; статический и динамический анализ; ревью кода и рефакторинг; атрибуты и метрики качества программного обеспечения; а также формальные методы доказательства корректности. Она объединяет действия, которые производят и обеспечивают надежное программное обеспечение.
Sub-topics
Core questions
- Какие практики позволяют создавать код, который является корректным, читаемым и поддерживаемым?
- Как обнаруживаются дефекты посредством тестирования, анализа и обзора?
- Как определяется, измеряется и обеспечивается качество программного обеспечения?
- Когда корректность может быть установлена формальным доказательством, а не только тестированием?
Key theories
- Тестирование выявляет наличие, а не отсутствие дефектов
- Тестирование может продемонстрировать существование дефектов, но не может доказать их отсутствие; поэтому эффективное тестирование направлено на максимизацию вероятности обнаружения ошибок посредством систематического выбора тестовых случаев, а не исчерпывающего выполнения.
- Верификация и валидация
- Верификация проверяет, что программное обеспечение построено правильно в соответствии со спецификацией, в то время как валидация проверяет, что было построено правильное программное обеспечение для удовлетворения потребностей пользователя; вместе они охватывают обзоры, анализ и тестирование на протяжении всего жизненного цикла.
- Качество закладывается, а не тестируется
- Качество является результатом практик разработки, проектирования и дисциплины процессов, а не инспекции в конце; предотвращение дефектов и раннее обнаружение намного дешевле, чем поздняя коррекция.
Clinical relevance
Действия по разработке и обеспечению качества определяют надежность, безопасность и ремонтопригодность системы и доминируют в стоимости дефектов; ранняя и систематическая верификация сокращает количество сбоев в эксплуатации и доработок, что является центральным для поставки надежного программного обеспечения.
Evidence & guidelines
ISO/IEC 25010 определяет модель качества программного продукта, а области знаний SWEBOK по разработке, тестированию и качеству программного обеспечения предоставляют консенсусное справочное руководство.
History
Систематическое тестирование было сформулировано Майерсом в 1970-х годах, структурное программирование и верификация — Дейкстрой и Хоаром в ту же эпоху, а мастерство разработки — Макконнеллом в 1990-х годах; модели и стандарты качества, такие как ISO/IEC 25010, консолидировали атрибуты качества и измерения.
Debates
- Тестирование против формальной верификации
- Обсуждается, должна ли уверенность в корректности основываться на обширном тестировании или на формальном доказательстве; тестирование масштабируется до больших систем, но не может гарантировать корректность, в то время как формальные методы дают сильные гарантии при более высокой стоимости и зарезервированы для критически важных компонентов.
Key figures
- Glenford Myers
- Steve McConnell
- C. A. R. Hoare
- Edsger Dijkstra
Related topics
Seminal works
- myers2011
- mcconnell2004
- swebok2014
Frequently asked questions
- Может ли тестирование доказать корректность программы?
- Нет. Тестирование использует конечный набор входных данных и может выявить дефекты, но не может продемонстрировать их отсутствие; доказательство корректности для всех входных данных требует формальной верификации, которая осуществима только для ограниченных или критически важных частей системы.
- Является ли качество тем же самым, что и отсутствие ошибок?
- Нет. Качество программного обеспечения многомерно, оно охватывает функциональную корректность плюс такие атрибуты, как надежность, производительность, безопасность, удобство использования и ремонтопригодность; программа с небольшим количеством ошибок все еще может быть низкого качества, если она не подлежит сопровождению или небезопасна.