МИНИСТЕРСТВО НАУКИ И ОБРАЗОВАНИЯ РОССИСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего профессионального образования «Московский физико-технический институт (государственный университет)» МФТИ «УТВЕРЖДАЮ» Проректор по учебной и методической работе _______________ Д.А. Зубцов «___»______________ 20___ г. Рабочая программа дисциплины (модуля) по дисциплине: Верификация программного обеспечения по направлению: Прикладные математика и физика (магистратура) профиль подготовки/ магистерская программа: Телекоммуникационные сети и системы факультет: радиотехники и кибернетики кафедра: проблем передачи информации и анализа данных курс: 1 квалификация: магистр Семестр, формы промежуточной аттестации: 10 (Весенний) - Дифференцированный зачёт Аудиторных часов: 34 всего, в том числе: лекции: 34 час. практические (семинарские) занятия: 0 час. лабораторные занятия: 0 час. Самостоятельная работа: 5 час. всего, в том числе: задания, курсовые работы: 0 час. Подготовка к экзамену: 0 час. Всего часов: 39, всего зач.ед.: 1 Программу составил: Н.В. Пакулин, кандидат физико-математических наук Программа обсуждена на заседании кафедры 14 мая 2014 года СОГЛАСОВАНО: Заведующий кафедрой А.П. Кулешов Декан факультета радиотехники и кибернетики С.Н. Гаричев Начальник учебного управления И.Р. Гарайшина 1. Цели и задачи Цель дисциплины Познакомить с предметом верификации ПО, представить широкую палитру существующих методов и подходов, осветить преимущества и ограничения, присущие методам верификации. В рамках курса рассматриваются общее понятие качества ПО, подпроцессы обеспечения качества в рамках жизненного цикла ПО, методы статического анализа программ, методы проверки моделей (model checking), методы динамического анализа программ и различные варианты функционального тестирования. Задачи дисциплины - формирование базовых знаний в области обеспечения качества программного обеспечения, как неотъемлемой части теории и практики разработки ПО, адресуемого к проблемам построения корректных и надежных программ, и имеющего важное методологическое значение как для подготовки специалистов в области современных информационных технологий, так и для поддержки разнообразных инновационных сфер деятельности; - обучение студентов основам жизненного цикла программного обеспечения и задачам верификации, возникающим в ходе разработки, внедрения и эксплуатации ПО; - обучение студентов методам функционального тестирования, применяемым в различных сценариях разработки ПО, включая модульное тестирование, случайное тестирование, тестирование с использованием моделей, а также методам оценки полноты тестирования; - обучение студентов базовым методам анализа корректности программ; - формирование теоретических подходов к верификации программного обеспечения для проведения исследований в рамках выпускных работ на степень магистра. 2. Место дисциплины (модуля) в структуре образовательной программы бакалавриата (магистратуры Дисциплина «Верификация программного обеспечения» включает в себя разделы, которые могут быть отнесены к вариативной части цикла М.1. Дисциплина «Верификация программного обеспечения» базируется на дисциплинах: Дискретный анализ; Информатика; Теория информационных систем; Технологии программирования. 3. Перечень планируемых результатов обучения по дисциплине (модулю), соотнесенных с планируемыми результатами освоения образовательной Освоение дисциплины «Верификация программного обеспечения» направлено на формирование следующих общекультурных, общепрофессиональных и профессиональных компетенций бакалавра/магистра: способность анализировать научные проблемы и физические процессы, использовать на практике фундаментальные знания, полученные в области естественных наук (ОК-1); способность осваивать новую проблематику, терминологию, методологию и овладевать научными знаниями и навыками самостоятельного обучения (ОК-2); способность логически точно, аргументировано и ясно строить устную и письменную речь, формулировать свою точку зрения; владение навыками ведения научной и общекультурной дискуссий (ОК-4); способность применять в своей профессиональной деятельности знания, полученные в области физических и математических дисциплин, включая дисциплины: информатика, програм2 мирование и численные методы; физические основы получения, хранения, обработки и передачи информации; высшая математика (ПК-1); способность понимать сущность задач, поставленных в ходе профессиональной деятельности, и использовать соответствующий физико-математический аппарат для их описания и решения (ПК-3); способность использовать знания в области физических и математических дисциплин для дальнейшего освоения дисциплин в соответствии с профилем подготовки (ПК-4); способность применять теорию и методы математики для построения качественных и количественных моделей (ПК-8); способность работать в коллективе исполнителей над решением конкретных исследовательских и инновационных задач (ПК-9). В результате освоения дисциплины обучающиеся должны знать: - место и роль средств верификации в жизненном цикле ПО; - связь курса верификации со смежными дисциплинами дискретной математики, проектирования программных комплексов, телекоммуникационных протоколов; - методы тестирования и аналитического исследования ПО; - современные средства и технологии верификации; уметь: - эффективно использовать на практике теоретические знания в области верификации программ; - представить панораму универсальных и специальных методов верификации; - выбрать методы и сценарии верификации, адекватные предметной области и исследуемой задаче; - эффективно применять средства верификации для обеспечения качества разрабатываемого программного обеспечения; владеть: - современными средствами и технологиями верификации ПО; - навыками использования систем тестирования для языков высокого уровня; - навыками использования систем динамического исследования программ; - навыками использования систем аналитического исследования программ. 4. Содержание дисциплины (модуля), структурированное по темам (разделам) с указанием отведенного на них количества академических часов и видов учебных занятий 4.1. Разделы дисциплины (модуля) и трудоемкости по видам учебных занятий № 1 2 3 4 5 6 Тема (раздел) дисциплины Понятие качества ПО и верификации. Тестирование Модели программных систем Тестирование с использованием моделей Статический анализ программ Динамический анализ программ Виды учебных занятий, включая самостоятельную работу Практич. Задания, Лаборат. Самост. Лекции (семинар.) курсовые работы работа занятия работы 2 - 10 6 1 1 8 1 4 1 4 1 3 Итого часов Общая трудоёмкость 34 39 час., 1 зач.ед. 5 4.2. Содержание дисциплины (модуля), структурированное по темам (разделам) Семестр: 10 (Весенний) 1. Понятие качества ПО и верификации. Базовые понятия о качестве программного обеспечения. Задачи верификации. Тестирование. Классификация тестирования по размеру целевых систем. Место тестирования в процессах жизненного цикла. 2. Тестирование. Методология тестирования xUnit. Инструмент Junit. Разработка на основе тестирования (Test Driven Development). Тесты и требования. Тестирование асинхронных систем и обратных интерфейсов. Заглушки (mock). Тестирование распределенных систем. Особенности модульного тестирования С/С++. Инструменты CppUnit, CxxUnit, Google Testing Framework. Критерии покрытия. Покрытие по коду; MCDC. Покрытия пространства входных параметров; понятие цели тестирования. Покрытие по требованиям. Понятие адаптеров. Тестирование веб-сервисов. Тестирование протоколов. Компонентное тестирование. Задачи интеграционного и системного тестирования. 3. Модели программных систем. Введение в моделирование программ. История вопроса. Исполнимые модели. Конечные автоматы, расширенные конечные автоматы. Моделирование реактивных систем и протоколов. Недетерминизм. Проблема взрыва числа состояний. Диаграммы состояний UML. Логические модели. Аксиоматические модели. Тройки Хора. 4. Тестирование с использованием моделей. Виды моделей, пригодные для тестирования. Применение моделей в тестировании. Задача извлечения тестов. Задача построения оракула. Связь требований и модели. Связь кода и модели. Технология UniTESK. Контрактные спецификации, пред- и пост-условия. Генерация тестовых последовательностей из частично заданных автоматов тестов. Критерии покрытия. Инструменты Summer / C++TESK. Генерация тестов из моделей. Построение маршрутов в обходах моделей. Разрешение ограничений. Проблема взрыва числа состояний. Покрытие требований. Инструмент SpecExplorer. Применение моделей в интеграционном и системном тестировании (Model-in-the-Loop). Создание тестовых стендов для системного тестирования. 5. Статический анализ программ. Представление о статическом анализе. Статическая и динамическая семантика языка 4 программирования. Базовый статический анализ на этапе компиляции. Инструмент BLAST, абстрактная интерпретация. 6. Динамический анализ программ. Методы контроля потока управления в бинарных исполнимых файлах. Обнаружение утечек памяти. Инструмент Valgrind. Методы, основанные на разрешении ограничений. DART, Avalanche, KLEE. 5. Описание материально-технической базы, необходимой для осуществления образовательного процесса по дисциплине (модулю) Учебная аудитория, оснащенная мультимедийным оборудованием (проектор или плазменная панель), доской. 6. Перечень основной и дополнительной литературы, необходимой для освоения дисциплины (модуля) Основная литература 1. Кулямин В.В. Технологии программирования. Компонентный подход. М.: ИНТУИТ-Бином, 2007. - 463 с. 2. Кларк Э.М., Грамберг О., Пелед Д. Верификация моделей программ. Model Checking. М.: МЦНМО, 2002. - 416 с. Дополнительная литература 1. Котляров В.П. Основы тестирования программного обеспечения. М.: ИНТУИТ.РУ, 2006. 360 с. 2. Мендельсон Э. Введение в математическую логику. М.: Наука, 1984. - 320 с. 3. Миронов А.М., Жуков Д.Ю. Математическая модель и методы верификации программных систем // Информационные технологии и вычислительные системы. 2005. - 220 с. 4. Карпов Ю.Г. Model Checking. Верификация параллельных и распределенных программных систем. С-Пб.: БХВ-Петербург, 2010. - 560 с. 5. Липаев В.В. Системное проектирование сложных программных средств для информационных систем // Серия "Управление качеством". Издание второе. М: СИНТЕГ, 2002. - 268 с. 6. Липаев В.В. Качество программных средств. М: Янус-К, 2002. - 400 с. 7. Перечень учебно-методического обеспечения для самостоятельной работы обучающихся по дисциплине (модулю) 1. Синицын С.В., Налютин Н.Ю. Верификация программного обеспечения // Учебное пособие. М.: ИНТУИТ-Бином, 2008. - 368 с. 8. Перечень ресурсов информационно-телекоммуникационной сети «Интернет», необходимых для освоения дисциплины (модуля) 9. Перечень информационных технологий, используемых при осуществлении образовательного процесса по дисциплине (модулю), включая перечень программного обеспечения и информационных справочных систем (при необходимости) На лекционных занятиях используются мультимедийные технологии, включая демонстрацию презентаций. 5 Необходимое программное обеспечение: компилятор Java (JDK) версии не ниже 1.6, среда разработки Eclipse версии не ниже 3.6, программный пакет тестирования с использованием моделей Summer, программный пакет для проверки на моделях Blast. 10. Методические указания для обучающихся по освоению дисциплины Студент, изучающий дисциплину, должен, с одной стороны, овладеть общими понятийным аппаратом, а с другой стороны, должен научиться применять теоретические знания на практике. В результате изучения дисциплины студент должен знать основные определения, понятия, методы тестирования и аналитического исследования ПО. Успешное освоение курса требует напряженной самостоятельной работы студента. В программе курса отведено минимально необходимое время для работы студента над темой. Самостоятельная работа включает в себя: - чтение и конспектирование рекомендованной литературы; - проработку учебного материала (по конспектам занятий, учебной и научной литературе), подготовку ответов на вопросы, предназначенные для самостоятельного изучения, решение задач; - подготовка к дифференцированному зачёту. Руководство и контроль за самостоятельной работой студента осуществляется в форме индивидуальных консультаций. Важно добиться понимания изучаемого материала, а не механического его запоминания. При затруднении изучения отдельных тем, вопросов следует обращаться за консультациями к лектору. 11. Фонд оценочных средств для проведения промежуточной аттестации по итогам обучения Приложение. 6 ПРИЛОЖЕНИЕ ФОНД ОЦЕНОЧНЫХ СРЕДСТВ ДЛЯ ПРОВЕДЕНИЯ ПРОМЕЖУТОЧНОЙ АТТЕСТАЦИИ ОБУЧАЮЩИХСЯ ПО ДИСЦИПЛИНЕ «Верификация программного обеспечения» 1. Перечень типовых контрольных заданий, используемых для оценки знаний, умений, навыков Перечень контрольных вопросов к дифференцированному зачёту: 1. Качество программного обеспечения. Аспекты качества. 2. Верификация ПО. Цели и задачи. Основные подходы. 3.Тестирование. Задачи тестирования. 4. Классификация видов тестирования по размеру целевой системы. 5. Модульное тестирование. Основные элементы подхода xUnit. 6. Модульное тестирование. Пример использования JUnit или аналогичных фреймворков для других языков. 7. Тестовые покрытия по коду. Назначение, способ подсчета, ограничения. 8. Тестовые покрытия по ветвлениям. Назначение, способ подсчета, ограничения. 9. Тестовые покрытия по пространствам аргументов. Назначение, способ подсчета, ограничения. 10. Виды моделей ПО. Конечные и расширенные конечные автоматы. 11. Виды моделей ПО. Диаграммы состояний UML. 12. Виды моделей ПО. Логические модели: темпоральные логики, контрактные спецификации. 13. Тестирование с использованием моделей (MBT). Виды моделей для MBT. 14. Извлечение тестов из автоматных моделей. 15. Применение моделей в интеграционном и системном тестировании. Model-in-the-Loop. 16. Технология тестирования UniTESK. Контрактные спецификации, частичное задание автомата теста. 17. Тестирование с использованием моделей: тестовые покрытия по моделям. 18. Статический анализ программ. Blast. 19. Динамический анализ программ. Основные подходы. Использование Valgrind. 20. Динамический анализ программ: Avalanche, KLEE. 2. Критерии оценивания Оценка Баллы отлично 10 Критерии Выставляется студенту, показавшему всесторонние, систематизированные, глубокие знания учебной программы дисциплины, проявляющему интерес к данной предметной области, продемонстрировавшему умение уверенно и творчески применять их на практике при решении конкретных задач, свободное и правильное обоснование принятых решений. 7 9 8 7 хорошо 6 5 4 удовлетворительно 3 2 неудовлетворительно 1 Выставляется студенту, показавшему всесторонние, систематизированные, глубокие знания учебной программы дисциплины и умение уверенно применять их на практике при решении конкретных задач, свободное и правильное обоснование принятых решений. Выставляется студенту, показавшему систематизированные, глубокие знания учебной программы дисциплины и умение уверенно применять их на практике при решении конкретных задач, правильное обоснование принятых решений, с некоторыми недочетами. Выставляется студенту, если он твердо знает материал, грамотно и по существу излагает его, умеет применять полученные знания на практике, но недостаточно грамотно обосновывает полученные результаты. Выставляется студенту, если он твердо знает материал, грамотно и по существу излагает его, умеет применять полученные знания на практике, но допускает в ответе или в решении задач некоторые неточности. Выставляется студенту, если он в основном знает материал, грамотно и по существу излагает его, умеет применять полученные знания на практике, но допускает в ответе или в решении задач достаточно большое количество неточностей. Выставляется студенту, показавшему фрагментарный, разрозненный характер знаний, недостаточно правильные формулировки базовых понятий, нарушения логической последовательности в изложении программного материала, но при этом он освоил основные разделы учебной программы, необходимые для дальнейшего обучения, и может применять полученные знания по образцу в стандартной ситуации. Выставляется студенту, показавшему фрагментарный, разрозненный характер знаний, допускающему ошибки в формулировках базовых понятий, нарушения логической последовательности в изложении программного материала, слабо владеет основными разделами учебной программы, необходимыми для дальнейшего обучения и с трудом применяет полученные знания даже в стандартной ситуации. Выставляется студенту, который не знает большей части основного содержания учебной программы дисциплины, допускает грубые ошибки в формулировках основных принципов и не умеет использовать полученные знания при решении типовых задач. Выставляется студенту, который не знает основного содержания учебной программы дисциплины, допускает грубейшие ошибки в формулировках базовых понятий дисциплины и вообще не имеет навыков решения типовых практических задач. 3. Методические материалы, определяющие процедуры оценивания знаний, умений, навыков и (или) опыта деятельности Дифференцированный зачёт проводится в устной форме. При проведении устного дифференцированного зачёта обучающемуся предоставляется 30 минут на подготовку. 8 Во время проведения дифференцированного зачёта обучающиеся могут пользоваться программой дисциплины, а также справочной литературой, вычислительной техникой и проч. 9