Введение
Проверка программного обеспечения — это дисциплина, относящаяся к разработке программного обеспечения, языкам программирования и теории вычислений, целью которой является подтверждение соответствия программного обеспечения заданным требованиям.
Широкий охват и классификация
Широкое определение верификации связывает её с тестированием программного обеспечения. В этом случае существует два основных подхода к верификации: динамическая верификация, также известная как экспериментальное тестирование, динамическое тестирование или просто тестирование. Она эффективна для обнаружения ошибок (программных ошибок). Статическая верификация, также известная как анализ или статическое тестирование, полезна для доказательства корректности программы. Однако она может приводить к ложноположительным результатам, если есть расхождения между реальным поведением программного обеспечения и предположениями, которые делает статическая верификация. В системе классификации вычислительной техники ACM темы верификации программного обеспечения представлены в разделе "Программное обеспечение и его разработка" в подразделе "Создание программного обеспечения", а верификация программ также встречается в разделе "Теория вычислений" в подразделе "Семантика и рассуждения, рассуждения о программах".
Dynamic verification, also known as experimentation, dynamic testing or, simply testing. This is good for finding faults (software bugs). Static verification, also known as analysis or, static testing This is useful for proving the correctness of a program. Although it may result in false positives when there are one or more conflicts between the process a software really does and what the static verification assumes it does. Under the ACM Computing Classification System, software verification topics appear under "Software and its engineering", within "Software creation", whereas Program verification also appears under Theory of computation under Semantics and reasoning, Program reasoning.
Узкий охват
Когда проверка определяется более строго, она эквивалентна исключительно статическому тестированию и предназначена для применения к артефактам. А валидация (всего программного продукта) эквивалентна динамическому тестированию и предназначена для применения к работающему программному продукту (а не к его артефактам, за исключением требований). Следует отметить, что валидация требований может выполняться как статически, так и динамически (см. валидацию артефактов).
Сравнение с валидацией
Проверка программного обеспечения часто путают с валидацией программного обеспечения. Разница между проверкой и валидацией: проверка программного обеспечения отвечает на вопрос: "Строим ли мы продукт правильно?" – то есть, соответствует ли программное обеспечение своим спецификациям? (Как дом соответствует его чертежам.) Валидация программного обеспечения отвечает на вопрос: "Строим ли мы правильный продукт?" – то есть, делает ли программное обеспечение то, что действительно требуется пользователю? (Как дом соответствует потребностям и желаниям владельца.)
Software verification asks the question, "Are we building the product right? "; that is, does the software conform to its specifications? (As a house conforms to its blueprints.) Software validation asks the question, "Are we building the right product? "; that is, does the software do what the user really requires? (As a house conforms to what the owner needs and wants.)