Задачи и цели процесса верификации
Доверяй, но верифицируй!
В состав задач процесса входит последовательная проверка того, что в программной системе: • общие требования к информационной системе, предназначенные для программной реализации, корректно переработаны в спецификацию требований высокого уровня к комплексу программ, удовлетворяющих исходным системным требованиям; • требования высокого уровня правильно переработаны в архитектуру ПО и в спецификации требований к функциональным компонентам низкого уровня, которые удовлетворяют требованиям высокого уровня; • спецификации требований к функциональным компонентам ПО, расположенным между компонентами высокого и низкого уровня, удовлетворяют требованиям более высокого уровня; • архитектура ПО и требования к компонентам низкого уровня корректно переработаны в удовлетворяющие им исходные тексты программных и информационных модулей; • исходные тексты программ и соответствующий им исполняемый код не содержат ошибок. [8] Кроме того, верификации на соответствие спецификации требований на конкретный проект программного средства подлежат требования к технологическому обеспечению жизненного цикла ПО, а также требования к эксплуатационной и технологической документации.[6] Основная цель процесса – доказательство того, что результат разработки соответствует предъявленным к нему требованиям. Обычно процесс верификации проводится сверху вниз, начиная от общих требований, заданных в техническом задании и/или спецификации на всю информационную систему до детальных требований на программные модули и их взаимодействие. Цели верификации ПО достигаются посредством последовательного выполнения комбинации из инспекций проектной документации и анализа их результатов, разработки тестовых планов тестирования и тест-требований, тестовых сценариев и процедур и последующего выполнения этих процедур. Тестовые сценарии предназначены для проверки внутренней непротиворечивости и полноты реализации требований. Выполнение тестовых процедур должно обеспечивать демонстрацию соответствия испытываемых программ исходным требованиям. На выбор эффективных методов верификации и последовательность их применения в наибольшей степени влияют основные характеристики тестируемых объектов: • класс комплекса программ, определяющийся глубиной связи его функционирования с реальным временем и случайными воздействиями из внешней среды, а также требования к качеству обработки информации и надежности функционирования; • сложность или масштаб (объем, размеры) комплекса программ и его функциональных компонентов, являющихся конечными результатами разработки; • преобладающие элементы в программах: осуществляющие вычисления сложных выражений и преобразования измеряемых величин или обрабатывающие логические и символьные данные для подготовки и отображения решений. Различия в понятиях “тестирование”, “верификация” и “валидация” Несмотря на кажущуюся схожесть, термины «тестирование», «верификация» и «валидация» означают разные уровни проверки корректности работы программной системы. Дабы избежать дальнейшей путаницы, четко определим эти понятия (Рис. 1). Рис. 1 Взаимосвязь и последовательность процессов
Тестирование программного обеспечения – вид деятельности в процессе разработки, связанный с выполнением процедур, направленных на обнаружение (доказательство наличия) ошибок (несоответствий, неполноты, двусмысленностей и т.д.) в текущем определении разрабатываемой программной системы. Процесс тестирования относится в первую очередь к проверке корректности программной реализации системы, соответствия реализации требованиям, т.е. тестирование – это управляемое выполнение программы с целью обнаружения несоответствий ее поведения и требований. Верификация программного обеспечения – более общее понятие, чем тестирование. Целью верификации является достижение гарантии того, что верифицируемый объект (требования или программный код) соответствует требованиям, реализован без непредусмотренных функций и удовлетворяет проектным спецификациям и стандартам. Процесс верификации включает в себя инспекции, тестирование кода, анализ результатов тестирования, формирование и анализ отчетов о проблемах. Таким образом, принято считать, что процесс тестирования является составной частью процесса верификации, такое же допущение сделано и в данном учебном курсе. Валидация программной системы – процесс, целью которого является доказательство того, что в результате разработки системы мы достигли тех целей, которые планировали достичь благодаря ее использованию. Иными словами, валидация – это проверка соответствия системы ожиданиям заказчика. Вопросы, связанные с валидацией выходят за рамки данного учебного курса и представляют собой отдельную интересную тему для изучения. [9] Если посмотреть на эти три процесса с точки зрения вопроса, на который они дают ответ, то тестирование отвечает на вопрос «Как это сделано?» или «Соответсвует ли поведение разработанной программы требованиям?», верификация (Рис.2) – «Что сделано?» или «Соответствует ли разработанная система требованиям?», а валидация – «Сделано ли то, что нужно?» или «Соответствует ли разработанная система ожиданиям заказчика?» Верификационный процесс, работающий с системными требованиями – это процесс валидации требований, сопоставления их реальным ожиданиям заказчика. Данный процесс отличается от приемо-сдаточных испытаний, выполняемых при передаче готовой системы заказчику, хотя может считаться частью таких испытаний. Валидация является средством доказать не только корректность реализации системы с точки зрения заказчика, но и корректность принципов, положенных основу ее разработки. (Рис. 2) [10] Рис. 2 Мероприятия верификации Основные понятия синтеза программного обеспечения Синтез — процесс соединения или объединения ранее разрозненных вещей или понятий в целое или набор. Термин происходит от др.-греч. σύνθεσις — соединение, складывание, связывание (συν- — приставка со значением совместности действия, соучастия и θέσις — расстановка, размещение, распределение, (место)положение). Синтез есть способ собрать целое из функциональных частей как антипод анализа — способа разобрать целое на функциональные части. Возможен синтез решений. В кибернетике процесс синтеза тесно связан с процессом предшествующего анализа. Синтез — инжиниринговое построение сложных систем из предварительно подготовленных блоков или модулей разных типов. Низкоуровневое, глубокое структурное объединение компонентов разных типов. С точки зрения теории познания, синтез представляет собой необходимый этап проявления познавательной деятельности сознания. В совокупности с анализом, метод синтеза позволяет получить представления о связях между составляющими предмета изучения. [6] Основной вопрос синтеза программ - это вопрос спецификация данных, по которым строится программа. Именно, решение запроса пользователя системой составляет спецификацию будущей программы. Рассматривается последовательность действий, приводящая к спецификации программы, а также языковые, логические и технические основы синтеза программ. [2] Для реализации синтеза программ необходимо было проделать ряд работ, который приведен ниже. Результаты некоторых работ можно отнести к частично новому материалу в информатике. В конечном счете, нам необходимо сформулировать ту спецификацию задачи, которая может служить исходными данными для синтеза программ. [7]
• Новое определение информатики, где вопросы обработки информации заменены вопросами обработки знаний; • Определение понятия знание; • Выделение семи видов представления знания для приближения к естественному языку (ЕЯ); • Представление и внедрение понятия термина вместо понятия идентификатора, что также обеспечивает приближение к ЕЯ; • Построена семантическая грамматика русского языка (СеГ), содержащая правила вычисления смысла утверждений [3] (в отличие от известной всем классической синтаксической грамматики (СиГ), содержащей правила построения слов и предложений); • Понимание и обобщение понятия логического уравнения; • Построение информатической логики как основания для решения логических уравнений; • Построение методов решения логических уравнений (алгебраический подход в логике); • Определение отладки и экологии знания (13 классов ошибок, 8 классов известных и 5 классов новых в программировании); • Разработка формальных языков (ФЯ) Лейбниц для внутреннего представления знаний и метаязык Марков для представления порождающих грамматик; • Разработка основ распознающих грамматик для автоматического построения программ, управляемых ФЯ (трансляторов и интерпретаторов); • Уточнение нового понятия интеллектуальной системы; • Определение понятия интеллектуального программирования (ИП) и критика процедурного программирования; • Определение и реализация нового понимания синтеза программ, подпрограмм и пакетов подпрограмм; • Конструирование программного комплекса инструментария ИП, доступного любому пользователю; • Разработка и развитие методов добычи знаний и построение БЗ. Для разработки метода синтеза программ практически необходимо коснуться каждого пункта показанного пути. [8]
|