- •Надежность программного обеспечения
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Изучение теоретической темы.
- •Рабочая учебная программа
- •Учреждение образования
- •«Белорусский государственный университет
- •Информатики и радиоэлектроники»
- •1. Содержание дисциплины
- •1. Индивидуальные практические работы, их характеристика
- •2. Контрольные работы, их характеристика
- •3. Курсовая работа, ее характеристика
- •4. Литература
- •4.1.Основная
- •4.2. Дополнительная
- •5. Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •Теоретический раздел Введение
- •1. Основные понятия и определения в области надёжности аппаратного обеспечения компьютерных систем
- •2. Показатели надежности компьютерных систем
- •2.1. Общие сведения
- •2.2. Показатели надежности невосстанавливаемых объектов
- •2.2.1. Вероятность безотказной работы
- •2.2.2. Вероятность отказа
- •2.2.3. Плотность распределения наработки до отказа
- •2.2.4. Интенсивность отказов
- •2.2.5. Средняя наработка до отказа
- •2.3. Показатели надежности восстанавливаемых объектов
- •2.3.1. Коэффициент готовности
- •2.3.2. Стационарный коэффициент готовности
- •2.4. Основные модели, используемые в теории надежности
- •3. Основные понятия и определения в области надежности программного обеспечения компьютерных систем
- •3.1. Проблема надежности программного обеспечения и её актуальность
- •3.2. Понятие свойств, функций и требований к программному обеспечению. Критерии качества требований
- •Корректность (правильность) требований
- •Недвусмысленность требований
- •Полнота набора требований
- •Непротиворечивость требований
- •Упорядоченность по важности и/или стабильности
- •Проверяемость требований (верифицируемость)
- •Целостность
- •Модифицируемость
- •Трассируемость
- •3.3. Понятие ошибки и отказа программного обеспечения
- •3.4. Понятие надежности программного обеспечения
- •3.5. Особенности программ по сравнению с аппаратурой
- •4. Анализ причин появления ошибок в программном обеспечении
- •4.1. Процесс разработки программного обеспечения в соответствии со стандартом стб исо/мэк 12207-2003
- •4.2. Причины появления ошибок в программном обеспечении
- •5. Модели надежности программного обеспечения
- •5.1. Общие сведения
- •5.2. Модель Джелинского–Моранды
- •5.3. Модель Шика–Волвертона
- •5.4. Геометрическая модель
- •5.5. Статистическая модель Миллса
- •5.6. Модель Нельсона
- •5.7. Статистическое моделирование надёжности программ
- •6. Стандартизация оценки надежности программных средств в Республике Беларусь
- •6.1. Общие сведения о стандартах в области оценки качества программных средств
- •6.2. Оценка надежности программных средств по гост 28195–99
- •6.3. Оценка надежности программных средств по стб исо/мэк 9126–2003
- •1. Определение требований к надежности
- •2. Подготовка к оцениванию
- •3. Процедура оценивания
- •7. Оценка надежности программных средств в соответствии с международными стандартами iso/iec 9126-1-3:2001-2003 и iso/iec 14598-1:1999
- •7.1. Общие сведения о сериях стандартов iso/iec 9126-1-4:2001-2004 и iso/iec 14598-1-6:1998-2001
- •7.2. Модель надежности программных средств по стандарту iso/iec 9126-1:2001
- •7.3. Внутренние метрики надежности программных средств по стандарту iso/iec 9126-3:2003
- •7.4. Внешние метрики надежности программных средств по стандарту iso/iec 9126-2:2003
- •7.5. Метод оценки надежности программных средств по стандарту iso/iec 14598–1:1999
- •1. Установка требований к оценке надежности
- •1.1. Установка цели оценки
- •1.2. Идентификация типов продуктов
- •1.3. Определение модели надежности
- •2. Определение оценки надежности
- •2.1. Выбор метрик надежности
- •2.2. Установка уровней ранжирования метрик
- •2.3. Установка критериев для оценки
- •8. Тестирование программного обеспечения
- •8.1. Введение в тестирование по
- •8.2. Определение тестирования по
- •8.3. Объекты тестирования
- •8.4. Направления тестирования по
- •8.5. Принципы разработки тестов
- •8.6. Информационные потоки процесса тестирования
- •8.7. Принципы организации тестирования
- •8.8. Методы тестирования по
- •8.8.1. Общие сведения
- •8.8.2. Структурное тестирование
- •8.8.2.1. Понятие потокового графа, пути, цикломатической сложности
- •8.8.2.2. Тестирование по критерию путей
- •8.8.2.3. Тестирование по критерию ветвей
- •8.8.2.4. Метод тестирования базисных путей
- •8.8.2.5. Тестирование циклов
- •8.8.3. Функциональное тестирование программного обеспечения
- •8.8.3.1. Общие сведения
- •8.8.3.2. Пример иллюстрации сложности задачи разработки тестов
- •8.8.3.3. Метод эквивалентного разбиения
- •8.8.3.4. Метод анализа граничных условий
- •8.9. Документирование тестов
- •8.10. Методика тестирования программных средств
- •8.10.1. Общие сведения
- •8.10.2. Тестирование модулей
- •8.10.3. Тестирование сборки
- •8.10.3.1. Восходящее тестирование сборки
- •8.10.3.2. Нисходящее тестирование сборки
- •8.10.4. Тестирование правильности
- •8.10.5. Системное тестирование
- •8.11. Пример тестирования программы
- •1) Подготовка процесса
- •4) Анализ требований к программному средству
- •5) Проектирование программной архитектуры
- •6) Техническое проектирование программного средства
- •7) Программирование и тестирование модулей
- •Компонент пользовательского интерфейса:
- •Компонент математического расчёта:
- •8) Сборка программного средства
- •9) Квалификационные испытания программного средства
- •12) Ввод в действие программного средства
- •13) Обеспечение приёмки программного средства
- •8.12. Регрессионное тестирование
- •8.13. Документирование программных ошибок
- •8.14. Мутационное тестирование
- •8.15. Проектирование тестов, основанных на случайных наборах исходных данных
- •8.15.1. Анализ случайных векторов исходных данных
- •8.15.2. Генерация случайных векторов исходных данных
- •8.16. Оценка правильности результатов выполнения программы
- •9. Верификация программного обеспечения
- •9.1. Элементы математической логики Исчисление высказываний
- •Операции над высказываниями
- •(Если a, то b)
- •Исчисление предикатов
- •Операции над высказывательными формами
- •9.2. Метод индуктивных утверждений
- •9.2.1. Общие сведения
- •9.2.2. Последовательность шагов по доказательству корректности схем алгоритмов программ
- •9.3. Основные проблемы доказательства корректности программ
- •Экзаменационные вопросы по дисциплине «Надежность программного обеспечения»
- •1.2. Числовые константы и переменные
- •1.3. Операторы
- •1.4. Функции встроенные и задаваемые пользователем
- •1.5. Математические выражения
- •1.6. Присваивание переменным значений
- •1.7. Ранжированные переменные и таблицы вывода
- •1.8. Понятие о массивах и матрицах
- •1.8.1. Функции, определяемые пользователем, и массивы
- •1.8.2. Индексация элементов массивов
- •1.8.3. Матрицы
- •1.8.4. Нижние индексы и верхние индексы
- •1.8.5. Нижние индексы и элементы вектора
- •1.8.6. Нижние индексы и элементы матрицы
- •1.8.7. Верхние индексы и столбцы матрицы
- •1.8.8. Изменение значения системной переменной origin
- •2. Редактирование
- •2.1. Формульный редактор
- •2.1.1. Наборные панели и шаблоны
- •2.2. Текстовый редактор
- •3. Арифметические и логические операторы
- •3.1. Арифметические операторы
- •3.1.1. Расширенные арифметические операторы
- •3.2. Операторы отношения (логические операторы)
- •3.3. Функция условных выражений if
- •3.4. Задание функций пользователя
- •3.5. Типовые статистические функции
- •4. Решение уравнений
- •4.1. Решение одного уравнения
- •4.2. Решение уравнений с параметром
- •4.3. Системы уравнений
- •4.4. Многократное решение уравнений
- •4.5. Приближенные решения
- •5. Символьная математика
- •5.1. Настройка символьного знака равенства
- •6. Файлы данных
- •6.1. Функции доступа к файлам
- •6.2. Аргументы функций доступа к файлам
- •7. Графики
- •7.1. Создание графика
- •7.2. Вывод функции на график
- •7.3. Построение декартова графика
- •7.4. Графическое представление вектора
- •7.5. Графическое представление файлов данных
- •7.6. Размещение нескольких графиков на чертеже
- •7.7. Форматирование осей
- •7.8. Свойства графиков
- •7.9. Оформление графика
- •7.10. Заголовки графиков
- •7.11. Изменение представления графика
- •7.12. Изменение масштаба на графике
- •7.13. Считывание координат точек графика
- •Приложение 1. Основные законы распределения нсв
- •Приложение 2. Пример выполнения задания
- •Приложение 3. Математические функции
- •Приложение 4. Статистические функции
- •Литература
- •Автоматизация тестирования программного обеспечения. Работа в среде silktest. Теоретические и практические сведения к выполнению индивидуальных практических работ
- •Введение
- •1. Тестирование программного обеспечения
- •1.1. Задача и цели тестирования программного обеспечения
- •1.2. Классификация видов тестирования по
- •1.3. Этапы процесса тестирования по
- •1.4. Разработка тест-кейсов
- •1.5. Контрольные вопросы
- •2. Автоматизация тестирования по
- •2.1. Эффективность автоматизации тестирования
- •2.2. Технология Record&Playback
- •2.3. Язык скриптов
- •2.4. Структура автоматизации тестирования
- •2.5. Требования к автоматизированному тесту
- •2.6. Инструментальные средства автоматизации тестирования
- •2.7. Контрольные вопросы
- •3. Работа в среде SilkTest 8.0
- •3.1. Начало работы
- •3.1.3. Создание тест-кейсов
- •3.2. Реализация технологии Record/PlayBack в среде SilkTest
- •3.2.1. Создание библиотеки объектов
- •3.2.2. Создание тестового скрипта
- •3.2.3. Среда запуска скриптов
- •3.2.4. Средство распознавания объектов
- •3.3. Recovery-система
- •3.4. Создание тестплана (TestPlan)
- •3.4.1. Добавление тесткейса в тестплан
- •3.4.2. Подключение файлов в тестплане
- •3.4.3. Запуск тестплана (полный, выборочный)
- •3.5. Использование внешних данных (Data Driven Test)
- •3.6. Просмотр результатов исполнения тестовых сценариев
- •3.7. Пример разработки теста
- •3.7.1. Задание для тестирования
- •3.7.2. Создание фрейма приложения
- •3.7.3. Настройка Recovery System
- •3.7.4. Запись и воспроизведение скрипта
- •3.7.5. Создание Testcase с использованием Data Driven Test
- •3.7.6. Создание ТестПлана
- •3.8. Задания для лабораторных работ
- •Литература
- •Приложение 1. Описание языка 4test п1.1. Типы данных
- •П1.1.1. Синтаксис определения переменной
- •П1.1.2. Синтаксис определения константы
- •П1.1.3. Примеры определения и инициализации переменных
- •П1.1.4. Массивы данных
- •П1.2. Операторы языка 4Test п1.2.1. Арифметические операторы
- •П1.2.2. Логические операторы
- •П1.2.3. Операторы сравнения
- •П1.2.4. Условные операторы
- •П1.2.5. Операторы цикла
- •П1.2.6. Функции приведения типа
- •П1.2.7. Функции работы с массивами
- •П1.2.8. Функции работы со строками
- •П2.2.2. Функции для Menu (меню)
- •П2.2.3. Функции для ListBox/ComboBox (Раскрывающийся список/ Поле со списком)
- •П2.2.4. Функции для Button (кнопка)
- •П2.2.5. Функции для CheckBox/RadioButton (Флажок/Переключатель)
- •П2.2.6. Функции для EditBox (Поле ввода)
- •П2.2.7. Функция для Тab (Вкладка)
- •П2.3. Функции имитации клавиатурного ввода
- •П2.4. Функции имитации действий, выполняемых мышью
- •П2.5. Функции работы с системой
- •П2.6. Функции оповещения о результатах
- •П2.7. Функции синхронизации
- •П2.8. Функции проверки существования обьекта
- •П2.9. Функции работы с файлами
- •П2.10. Функции пользователя
- •Контрольные работы Контрольная работа № 1 Тема задания
- •Методические указания к выполнению контрольной работы № 1
- •Содержание отчета по контрольной работе № 1
- •Контрольная работа № 2 Тема задания
- •Методические указания к выполнению контрольной работы №2
- •Содержание отчета по контрольной работе № 2
- •Правила оформления отчетов по контрольным работам
- •Образец титульного листа
- •Содержание отчета по индивидуальной практической работе № 1
- •Правила оформления отчетов по индивидуальным практическим работам
- •Образец титульного листа
13) Обеспечение приёмки программного средства
Заключительная работа жизненного цикла разработки программного средства обеспечивает передачу готового, укомплектованного ПС непосредственно заказчику. Разработчик должен на этом этапе обеспечить проведение заказчиком оценки готовности к приёмке и приёмочным испытаниям программного продукта. При оценке готовности ПС к приёмке должны быть учтены результаты тестирования и квалификационных испытаний. Так же разработчик должен обеспечить непрерывную поддержку и обучение персонала заказчика.
8.12. Регрессионное тестирование
Основной работой тестировщиков является регрессионное тестирование. Оно основано на повторном использовании ранее разработанных тестов. Тестировщик после обнаружения ошибки передает отчета о ней программисту. В отчете приводятся симптомы проявления ошибки. Программист анализирует отчет, исправляет данную ошибку и отдает исправленное ПО назад тестировщику. Тестировщик затем опять проверяет ПО на том же самом тесте, который ранее приводил к ошибке, так как должен убедиться в том, что ошибка исправлена и больше не проявляется.
Реально программист может исправить только описанные в отчете симптомы, и фактически могут исправляться только отдельные причины проявления ошибки. Кроме того, программист может не правильно понять отчет об ошибке и исправить не то, что надо. Таким образом, после исправления одни ошибки устраняются, а другие остаются.
Статистика показывает, что примерно каждое третье исправление ошибки приводит к внесению новых ошибок. Поэтому очевидно, что после исправления программистом каждой ошибки, тестировщик должен спроектировать дополнительные тесты. Целью данных тестов является проверка того, чтобы убедиться, что при исправлении ошибки не внесены дополнительные. Для этого необходимо проанализировать те части ПО, которые могут быть затронуты внесением изменений.
Кроме того, рекомендуется проверить целостность ПО, то есть правильность работы на следующих тестах:
перечисленные тесты в начальном плане тестирования;
тесты, которые выявляли все предыдущие обнаруженные ошибки;
тесты, сгенерированные случайным образом.
8.13. Документирование программных ошибок
В общем программная ошибка(или баг) представляет собой некоторый дефект в разработке программного продукта, который вызывает несоответствие ожидаемых результатов выполнения программного продукта и фактически полученных результатов.
В общем задокументировать ошибку может практически любой разработчик или пользователь, обнаруживший некорректное поведение программы. Но собственно написание отчёта об ошибке(«bug report») является одним из основных результатов работы тестировщика. Основная цель написания отчёта об ошибке- устранение ошибки. В общем отчёт об ошибке представляет собой технический документ, написанный с целью:
- предоставить информацию о возникшей проблеме, её свойствах и последствиях;
- назначить приоритет возникшей проблеме с учётом её важности и скорости устранения;
- помочь программистам обнаружить и устранить источник проблемы.
Для формирования отчёта об ошибке используются так называемые багтрэкинговые системы.
Часто данные системы интегрируются с системами управления проектами, так как ошибка в разрабатываемом приложении является угрозой для качественного выполнения проекта в целом. Типовая стандартная форма отчёта об ошибках, используемая в ведущих IT-компаниях, содержит следующие основные поля, которые заполняются как тестировщиком, так и менеджером проекта:
1) Краткое описание(Summary). Содержит краткое описание ошибки, возникшей в приложении. Чаще всего указывается место, где произошла ошибка, и вкратце её суть.
2) Версия приложения, в котором была обнаружена ошибка(Build found) .
3) Симптом (Symptom) ошибки. Это поле показывает вид ошибки, т.е. как она проявляется. Наиболее широко распространённые симптомы:
- некорректная операция (incorrect operation). Например, неверная арифметическая операция;
- повреждение/потеря данных (data corruption/loss). В результате ошибки данные повреждаются или теряются.
- крах системы (system crash). Например, приложение или операционная система виснет, перезагружается или закрывается.
- косметический дефект (cosmetic flaw). Например, опечатки, повреждённые картинки, не тот цвет и т.п.
- проблема в документации (documentation issue). Если ошибка описывает проблему не в приложении, а в документации.
- нереализованная функциональность (missing feature).
4) Серьёзность (Severity) ошибки. Это поле показывает, насколько серьёзна найденная ошибка. Обычно выделяют следующие уровни серьёзности:
- критическая (critical) ошибка. Это самые серьёзные ошибки, ведущие к краху приложения или операционной системы, серьёзному повреждению базы данных, падению веб-сервера или сервера приложений;
- высокая (major) ошибка. Это также серьёзные ошибки, ведущие к потере/искажению данных, падению значительной части функциональности приложения, падению браузера и т.п.;
- средняя (medium) ошибка. Это ошибки, которые не приводят к краху системы или потере данных. Они обычно затрагивают небольшой набор функциональности, чаще всего это некорректная обработка вводимых значений. Как правило, такие ошибки можно «обойти», т.е. выполнить требуемое действие иным способом, не приводящим к возникновению ошибки;
-низкая (minor) ошибка. Как правило, это ошибки «косметического» плана. Они непосредственно не мешают работе с приложением.
5) Приоритет (Priority) ошибки. Это поле показывает, как быстро необходимо исправить ошибку. Обычно выделяют следующие уровни приоритета:
- наивысший (ASAP, as soon as possible). При этом ошибка должна быть исправлена немедленно, так как её наличие делает невозможным дальнейшую работу над проектом;
- высокий (high). Обычно присваивается ошибкам, которые нужно исправить как можно быстрее;
- обычный (normal). Ошибка должна быть исправлена в ближайшем будущем после исправления всех ошибок с более высоким приоритетом;
- низкий (low). Это самые низкоприоритетные ошибки, которые исправляются в последнюю очередь.
Если серьёзность ошибки выставляет тестировщик, то приоритет ошибки выставляет менеджер проекта после просмотра отчёт об ошибке.
6) Воспроизводимость (Reprodusible) ошибки. Это поле показывает, как воспроизводится ошибка. Возможны два уровня воспроизводимости ошибки:
-всегда (always), когда ошибка воспроизводится постоянно;
-иногда (sometimes), когда ошибка воспроизводится при определённых условиях.
7) Шаги для воспроизведения ошибки (Steps to reproduce). Данное поле приводится для того, чтобы воспроизвести ошибку в кратчайшие сроки. Это поле следует заполнять максимально подробно.
8) Подробное описание ошибки (Description). Приводится для того, чтобы программист чётко понял суть проблемы. Чем подробнее описание, тем быстрее причина ошибки будет обнаружена и тем быстрее ошибка будет исправлена.
Кроме словесного описания в поле Discription тестировщик может «прикрепить» Screen Shot, изображающий полученную ошибку. Хорошее описание содержит необходимую информацию об ошибке, описание ожидаемого результата, описание полученного результата и ссылку на требование.
