Верификация программного обеспечения
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
ИНТУИТ
Год издания: 2016
Кол-во страниц: 320
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-94774-825-3
Артикул: 825920.01.99
Курс знакомит слушателей с современными технологиями верификации программного обеспечения, применяемыми при промышленной разработке сложных и отказоустойчивых программных систем.
Курс рассчитан на читателей, заинтересованных в изучении основных подходов и путей решения проблем, связанных с современными технологиями верификации программного обеспечения. Курс основан на методиках тестирования промышленных программных систем. Он охватывает вопросы построения тестового окружения, планирования системы тестов, анализа и обнаружения дефектов программного кода тестируемой системы, интеграционного и системного тестирования, общих аспектов тестирования пользовательских интерфейсов. В программу курса входит рассмотрение процессов верификации проектной документации, а также процессов формальной инспекции кода и документации. Детально рассматриваются различные виды документов, сопровождающих процесс верификации, и процессы разработки, в которых эти документы участвуют. В завершение курса дается обзор методов разработки устойчивого программного обеспечения, позволяющих уменьшить продолжительность фазы тестирования без снижения его качества. Основным инструментальным средством, используемым при обучении, является Microsoft Visual Studio Team Edition for Software Testers. По завершении курса студент овладевает всеми основными навыками, необходимыми для участия в верификации сложных промышленных систем.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- ВО - Магистратура
- 09.04.01: Информатика и вычислительная техника
- 09.04.02: Информационные системы и технологии
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Верификация программного обеспечения 2-е издание, исправленное Синицын С.В. Налютин Н.Ю. Национальный Открытый Университет “ИНТУИТ” 2016 2
УДК 004.052.42(07) ББК 22 С38 Верификация программного обеспечения / Синицын С.В., Налютин Н.Ю. - M.: Национальный Открытый Университет “ИНТУИТ”, 2016 (Основы информационных технологий) ISBN 978-5-94774-825-3 Курс знакомит слушателей с современными технологиями верификации программного обеспечения, применяемыми при промышленной разработке сложных и отказоустойчивых программных систем. Курс рассчитан на читателей, заинтересованных в изучении основных подходов и путей решения проблем, связанных с современными технологиями верификации программного обеспечения. Курс основан на методиках тестирования промышленных программных систем. Он охватывает вопросы построения тестового окружения, планирования системы тестов, анализа и обнаружения дефектов программного кода тестируемой системы, интеграционного и системного тестирования, общих аспектов тестирования пользовательских интерфейсов. В программу курса входит рассмотрение процессов верификации проектной документации, а также процессов формальной инспекции кода и документации. Детально рассматриваются различные виды документов, сопровождающих процесс верификации, и процессы разработки, в которых эти документы участвуют. В завершение курса дается обзор методов разработки устойчивого программного обеспечения, позволяющих уменьшить продолжительность фазы тестирования без снижения его качества. Основным инструментальным средством, используемым при обучении, является Microsoft Visual Studio Team Edition for Software Testers. По завершении курса студент овладевает всеми основными навыками, необходимыми для участия в верификации сложных промышленных систем. (c) ООО “ИНТУИТ.РУ”, 2008-2016 (c) Синицын С.В., Налютин Н.Ю., 2008-2016 3
Общая информация о курсе Курс знакомит слушателей с современными технологиями верификации программного обеспечения, применяемыми при промышленной разработке сложных и отказоустойчивых программных систем. Курс рассчитан на читателей, заинтересованных в изучении основных подходов и путей решения проблем, которые связаны с современными технологиями верификации программного обеспечения. Курс основан на методиках тестирования промышленных программных систем. Он охватывает вопросы построения тестового окружения, планирования системы тестов, анализа и обнаружения дефектов программного кода тестируемой системы, интеграционного и системного тестирования, общих аспектов тестирования пользовательских интерфейсов. В программу курса входит рассмотрение процессов верификации проектной документации, а также процессов формальной инспекции кода и документации. Детально рассматриваются различные виды документов, сопровождающих процесс верификации, и процессы разработки, в которых эти документы участвуют. В завершение курса дается обзор методов разработки устойчивого программного обеспечения, позволяющих уменьшить продолжительность фазы тестирования без снижения его качества. Основным инструментальным средством, используемым при обучении, является Microsoft Visual Studio Team Edition for Software Testers. По завершении курса студент будет владеть всеми основными навыками, необходимыми для участия в верификации сложных промышленных систем. Предисловие Учебный курс “Верификация программного обеспечения” разработан преподавателями кафедры “Кибернетика” МИФИ в тесном сотрудничестве с предприятияем авиационной отрасли ДС БАРС (Бортовые Алгоритмы и Разработка Систем) и московским представительством корпорации Microsoft. Кафедра “Кибернетика” МИФИ готовит специалистов по специальности “прикладная математика и информатика” с квалификацией “математик, системный программист”. Кафедра имеет более чем 30-летний опыт в преподавании курсов по программной инженерии. Цикл дисциплин по программированию (дисциплин технологического цикла) построен таким образом, что студенты уже со второго курса начинают знакомство с промышленными методами разработки программного обеспечения. Во всех выполняемых на 2-3 курсах учебных задачах помимо разработки программного кода требуется определять функциональные требования к разрабатываемым модулям и программам, составлять тест-требования и тест-планы и реализовывать тестовое окружение. При этом на втором курсе большее внимание уделяется разработке и тестированию отдельных программных модулей, а на третьем - разработке и тестированию отдельных программ и многопроцессных систем, использующих средства межпроцессного взаимодействия. 4
На четвертом курсе студенты проходят годичный курс “Технология программирования”, в ходе которого они знакомятся с современными методами и организационными процедурами разработки комплексного программного обеспечения и выполняют групповой курсовой проект. Цель проекта: разработать коллективом небольшую, но реально работающую систему, проходящую все стадии жизненного цикла - от формулировки задачи до приемо-сдаточных испытаний. В рамках проекта выполняется разработка стандартов проекта и продукта, реализация и верификация. Программа курса регулярно пересматривается, чтобы обеспечить ее соответствие современным информационным технологиям. Параллельно с этим, студентам читается учебный курс “Сертификация программного обеспечения”, который затрагивает вопросы, связанные с жизненным циклом систем повышенной надежности и сертифицируемого программного обеспечения. В курсе используется опыт сотрудничества кафедры с предприятиями в области разработки бортовых систем для гражданской авиации, подробно рассматриваются процессы, связанные с гарантией и управлением качеством, управлением конфигурациями. В ходе практических занятий студенты получают опыт работы с инструментарием разработки и верификации реальных сертифицируемых программных систем. Учебный курс “Верификация программного обеспечения” представляет те знания и опыт, которые были накоплены кафедрой в области программной инженерии за последние 30 лет. Курс основан на реальных технологиях и технологических процессах верификации, применяющихся в настоящее время в авиационной промышленности, при разработке и анализе комплексов обеспечения информационной безопасности, при разработке высокоустойчивых прикладных систем. Курс сочетает в себе фундаментальный подход к вопросам верификации и использование современных инструментальных средств верификации. Авторы курса хотели бы выразить благодарность сотрудникам кафедры “Кибернетика” Московского инженерно-физического института (государственного университета), без прямой или косвенной помощи которых данный курс не появился бы на свет: доц. Стрижевскому В.С., доц. Черняеву В.В., ст. преп. Петуховой Е.А., а также студентам кафедры: Мещанинову В.П., Черепову А.С., Вавиловой А.С. Разработка семинарских занятий и программной системы, на примере верификации которой построены семинары, проводилась студентами кафедры Несвижским А.И. и Рябовым В.А. под руководством авторов курса. Значительная часть материала данного курса опирается на многолетний опыт сотрудничества с компанией ДС БАРС (Бортовые Алгоритмы и Разработка Систем) в области верификации авиационного бортового программного обеспечения. В ходе создания данного курса неоценимую помощь оказали ее сотрудники Сабуров М.А., Пономаренко В.Э., Судьбин М. А., Бородавкин В.Е., Подрубаев А. Б. Цель курса Целью данного курса лекций является изложение комплексного взгляда на процесс верификации программного обеспечения. Предметом обсуждения будут различные 5
подходы и методы, применяемые в области верификации и, в частности, тестирования программного обеспечения. Предполагается, что разрабатываемое программное обеспечение является частью более общей системы. Подобная система включает аппаратные, информационные и организационные (человек-пользователь, человек-оператор и т.п.) компоненты, разрабатываемые, возможно, разными коллективами. Поэтому необходимы документы разработки, определяющие и согласующие требования к различным компонентам системы, и правила их взаимодействия. Кроме того, предполагается, что отказы системы могут приводить к серьезным последствиям, в том числе и катастрофическим, поэтому при разработке программного обеспечения необходимы и оправданы усилия, потраченные на выявление скрытых дефектов. В первую очередь, это сказывается на требованиях к средствам и процедурам верификации программного обеспечения. В состав курса входит ряд практических занятий, иллюстрирующих на примере простой системы приемы и методы верификации программного обеспечения в среде Microsoft Visual Studio 2005 Team Edition for Software Testers. Предварительные знания Настоящий курс ориентирован на студентов и специалистов - разработчиков программного обеспечения, изучающих вопросы технологии создания программных систем с повышенными требованиями к критичности, то есть таких систем, отказы которых могут привести к катастрофическим последствиям или значительным материальным потерям. Основная ориентация курса - на персонал, который непосредственно вовлечен в процесс верификации программного обеспечения системы. Материал курса будет полезен для руководителей проектов, разработчиков требований и архитектуры системы, так как от них зависит организация работ и качество проектной документации. В курсе затронуты вопросы конфигурационного управления и управления качеством, которые могут быть интересны всем участникам программного проекта. Предполагается, что для восприятия материала курса необходимо знать язык программирования С, С++ или C# и быть знакомым с основами разработки программных систем. Желательно иметь представление о модульном и объекноориентированном подходах, пошаговой детализации и коллективной разработке программного обеспечения. Рекомендуется знакомство со следующими курсами, представленными в библиотеке Интернет-университета информационных технологий (ссылка: http://www.intuit.ru): Терехов А.Н. Учебный курс “Введение в технологию программирования” Биллиг В.А. Учебный курс “Основы программирования на C#” 6
Место верификации среди процессов разработки программного обеспечения Лекция посвящена рассмотрению различных видов жизненного цикла разработки программного обеспечения и современных технологий разработки. Показано место процесса верификации в жизненном цикле, определена его цель и задачи. Рассматриваются различные типы процессов верификации, определяется разница между тестированием, верификацией и валидацией. Цель данной лекции: дать представление о процессе верификации как о четко определенном виде деятельности в рамках жизненного цикла разработки программной системы, определить современные подходы к верификации 1.1. Понятие верификации Верификация - это процесс определения, выполняют ли программные средства и их компоненты требования, наложенные на них в последовательных этапах жизненного цикла разрабатываемой программной системы. Основная цель верификации состоит в подтверждении того, что программное обеспечение соответствует требованиям. Дополнительной целью является выявление и регистрация дефектов и ошибок, которые внесены во время разработки или модификации программы. Верификация является неотъемлемой частью работ при коллективной разработке программных систем. При этом в задачи верификации включается контроль результатов одних разработчиков при передаче их в качестве исходных данных другим разработчикам. Для повышения эффективности использования человеческих ресурсов при разработке верификация должна быть тесно интегрирована с процессами проектирования, разработки и сопровождения программной системы. Заранее разграничим понятия верификации и отладки. Оба этих процесса направлены на уменьшение ошибок в конечном программном продукте, однако отладка - процесс, направленный на локализацию и устранение ошибок в системе, а верификация процесс, направленный на демонстрацию наличия ошибок и условий их возникновения. Кроме того, верификация, в отличие от отладки - контролируемый и управляемый процесс. Верификация включает в себя анализ причин возникновения ошибок и последствий, которые вызовет их исправление, планирование процессов поиска ошибок и их исправления, оценку полученных результатов. Все это позволяет говорить о верификации как о процессе обеспечения заранее заданного уровня качества создаваемой программной системы. 1.2. Жизненный цикл разработки программного обеспечения 7
Коллективная разработка, в отличие от индивидуальной, требует четкого планирования работ и их распределения во время создания программной системы. Один из способов организации работ состоит в разбиении процесса разработки на отдельные последовательные стадии, после полного прохождения которых получается конечный продукт или его часть. Такие стадии называют жизненным циклом разработки программной системы. Как правило, жизненный цикл начинается с формирования общего представления о разрабатываемой системе и его формализации в виде требований верхнего уровня. Завершается жизненный цикл разработки вводом системы в эксплуатацию. Однако, нужно понимать, что разработка - только один из процессов, связанных с программной системой, которая также имеет свой жизненный цикл. В отличие от жизненного цикла разработки системы, жизненный цикл самой системы заканчивается выводом ее из эксплуатации и прекращением ее использования. Жизненный цикл программного обеспечения - совокупность итерационных процедур, связанных с последовательным изменением состояния программного обеспечения от формирования исходных требований к нему до окончания его эксплуатации конечным пользователем. В контексте данного курса практически не будут затрагиваться такие этапы жизненного цикла, как системная интеграция и сопровождение. Для целей курса достаточно ограничиться упрощенным представлением, что после реализации кода и доказательства его соответствия требованиям разработка ПО завершается. 1.3. Модели жизненного цикла Любой этап жизненного цикла имеет четко определенные критерии начала и окончания. Состав этапов жизненного цикла, а также критерии, в конечном итоге определяющие последовательность этапов жизненного цикла, определяется коллективом разработчиков и/или заказчиком. В настоящее время существует несколько основных моделей жизненного цикла, которые могут быть адаптированы под реальную разработку. 1.3.1. Каскадный жизненный цикл Каскадный жизненный цикл (иногда называемый водопадным) основан на постепенном увеличении степени детализации описания всей разрабатываемой системы. Каждое повышение степени детализации определяет переход к следующему состоянию разработки (Рис. 1.1). 8
Рис. 1.1. Каскадная модель жизненного цикла На первом этапе составляется концептуальная структура системы, описываются общие принципы ее построения, правила взаимодействия с окружающим миром, определяются системные требования. На втором этапе по системным требованиям составляются требования к программному обеспечению - здесь основное внимание уделяется функциональности программной компоненты, программным интерфейсам. Естественно, все программные комплексы выполняются на какой-либо аппаратной платформе. Если в ходе проекта требуется также разработка аппаратной компоненты, параллельно с требованиями к программному обеспечению идет подготовка требований к аппаратному обеспечению. На третьем этапе на основе требований к программному обеспечению составляется детальная спецификация архитектуры системы - описываются разбиение системы по конкретным модулям, интерфейсы между ними, заголовки отдельных функций и т.п. На четвертом этапе пишется программный код, соответствующий детальной спецификации, на пятом этапе выполняется тестирование - проверка соответствия программного кода требованиям, определенным на предыдущих этапах. Особенность каскадного жизненного цикла состоит в том, что переход к следующему этапу происходит только тогда, когда полностью завершены все работы предыдущего этапа. То есть сначала полностью готовятся все требования к системе, затем по ним полностью готовятся все требования к программному обеспечению, полностью разрабатывается архитектура системы и так далее до тестирования. Естественно, что в случае достаточно больших систем такой подход себя не оправдывает. Работа на каждом этапе занимает значительное время, а внесение изменений в первичные документы либо невозможно, либо вызывает лавинообразные изменения на всех других этапах. Как правило, используется модификация каскадной модели, допускающая возврат на любой из ранее выполненных этапов. При этом фактически возникает дополнительная процедура принятия решения. Действительно если тесты обнаружили несоответствие реализации требованиям, то 9
причина может крыться: (а) в неправильном тесте, (б) в ошибке кодирования (реализации), (в) в неверной архитектуре системы, (г) в некорректности требований к программному обеспечению и т.д. Все эти случаи требуют анализа, для того чтобы принять решение о том, на какой этап жизненного цикла надо возвратиться для устранения обнаруженного несоответствия. 1.3.2. V-образный жизненный цикл В качестве своеобразной “работы над ошибками” классической каскадной модели стала применяться модель жизненного цикла, содержащая процессы двух видов основные процессы разработки, аналогичные процессам каскадной модели, и процессы верификации, представляющие собой цепь обратной связи по отношению к основным процессам (Рис. 1.2). Рис. 1.2. V-образный жизненный цикл Таким образом, в конце каждого этапа жизненного цикла разработки, а зачастую и в процессе выполнения этапа, осуществляется проверка взаимной корректности требований различных уровней. Данная модель позволяет более оперативно проверять корректность разработки, однако, как и в каскадной модели, предполагается, что на каждом этапе разрабатываются документы, описывающие поведение всей системы в целом. 1.3.3. Спиральный жизненный цикл Оба рассмотренных типа жизненных циклов предполагают, что заранее известны все требования пользователей или, по крайней мере, предполагаемые пользователи системы настолько квалифицированы, что могут высказывать свои требования к будущей системе, не видя ее перед глазами. Естественно, такая картина достаточно утопична, поэтому постепенно появилось решение, исправляющее основной недостаток V-образного жизненного цикла предположение о том, что на каждом этапе разрабатывается очередное полное описание системы. Этим решением стала спиральная модель жизненного цикла (Рис. 10