- •"Управление качеством разработки программного обеспечения" Содержание
- •1. Введение
- •2. Основные определения
- •3. Процесс разработки программного обеспечения.
- •3.1 Жизненный цикл программного обеспечения.
- •3.2 Модели жизненного цикла программного обеспечения.
- •3.2.1 Каскадная модель (1970, w.W. Royce)
- •3.2.2. Инкрементная модель жизненного цикла разработки программного обеспечения
- •3.2.3 Итерационная модель
- •3.2.4 Спиральная модель (Бари Боэм, 1988.)
- •3.2.6 Модель быстрого прототипирования
- •3.2.7 Agileметодологии
- •Преимущества непрерывной интеграции:
- •Недостатки непрерывной интеграции:
- •3.2.7.3 Гибкая разработка - scrum(Ken Schwaber & Jeff Sutherland, 1996)
- •Планирование спринта, митинг первый
- •Планирование спринта, митинг второй
- •Остановка спринта (Sprint Abnormal Termination).
- •Демо и ревью спринта.
- •3.2.8 Подгонка модели жизненного цикла разработки.
- •4 Качество программных продуктов.
- •4.1 Определение качества. Стандарты качества.
- •Методы контроля качества
- •4.2 Стоимость качества.
- •4.3 Введение в cmmi
- •4.4. Управление требованиями
- •Способы описания требований и анализ требований.
- •Виды требований по уровням
- •Виды требований по характеру
- •Типы документов требований
- •5. Тестирование программного обеспечения.
- •5.1. Цели и задачи. Основные определения.
- •5.1.1 Методологии тестирования
- •5.1.2 Уровни тестирования
- •5.2 Процесс тестирования.
- •5.2.3 Планирование тестирования.
- •Кто будет тестировать?
- •Что нужно тестировать?
- •В каком объеме тестировать?
- •Виды тест планов
- •Оценка качества тестов
- •Тестовые метрики
- •5.2.4. Автоматизация тестирования
- •Упрощение интеграции
- •Документирование кода
- •Отделение интерфейса от реализации
- •Ограничения
- •Приложения модульного тестирования
- •5.3. Дефекты. Причины, описания, отслеживание.
- •***Этимология
- •Жизненный цикл дефекта
- •Примеры систем отслеживания ошибок
- •5.4. Типы дефектов и статические методы тестирования (Майерс)
- •5.5 Техники создания тест-кейсов.
- •5.5.1 Проектирование и исполнение.
- •5.5.2 Техники создания тест-кейсов: методология «черного ящика»
- •Свойства правильно выбранного теста
- •Техники стратегии чёрного ящика
- •Эквивалентное разбиение
- •Анализ граничных значений
- •Анализ причинно-следственных связей
- •Предположение об ошибке
- •5.5.3 Техники создания тест-кейсов: методология «белого ящика».
- •Структура rup
- •Продукты, поддерживающие rup
- •Артефакты и роли
- •Введение в uml
- •Принципы моделирования
- •Сущности в uml
- •Отношения в uml
- •Виды диаграмм uml
- •Автоматизированное тестирование
- •Обработка требований на ошибки
- •Приемка
- •Приемосдаточные испытания
- •Регрессионное тестирование
- •Система отслеживания ошибок
- •Тестирование
5.5 Техники создания тест-кейсов.
5.5.1 Проектирование и исполнение.
Проектирование теста может быть достаточно трудоемким процессом. Оно включает в себя следующие этапы:
1) задаться целью теста;
2) написать входные значения и шаги;
3) написать предполагаемые выходные значения;
4) выполнить тест и зафиксировать результат;
5) проанализировать результат.
От правильного подхода к каждому этапу зависит качество тестирования в целом. О проблеме неверной постановки цели говорилось в первой главе. Необходимость второго этапа обосновано технологической необходимостью.
Третий этап проектирования позволит избежать неоднозначности на пятом этапе. Очень часто, при отсутствии описания, что должно получиться, пытаются «подогнать» логику рассуждений в анализе результатов. Кроме того, очень часто этот пункт требует формирования либо независимой оценки (критерия), либо альтернативного просчета по алгоритму.
В первом случае очень легко контролировать общий результат, во втором – более детально понять работу алгоритма. Бывают случаи, когда при ручном просчете предполагаемых выходных значений находят ошибки в логике работы программы.
Четвертый этап является практически механическим. На этом этапе не нужно думать, а только строго следовать предписанию и аккуратно фиксировать полученные значения.
Если исполнение теста приносит результаты, не соответствующие предполагаемым, то это означает, что либо имеется ошибка, либо неверны предполагаемые результаты (ошибка в тесте). Для устранения такого рода недоразумений нужно тщательно проверять набор тестов («тестировать» тесты).
Применение автоматизированных средств позволяет снизить трудоемкость процесса тестирования. Например, существуют средства, которые позволяют избавиться от потребности в драйверах. Средства анализа потоков дают возможность пронумеровать маршруты в программе, определить неисполняемые операторы, обнаружить места, где переменные используются до присвоения им значения. Также существуют программы позволяющие выполнять функции с набором параметров, которые варьируются в заданных пределах, что в общем случае, позволяет методом перебора проверить работу функции или метода.
При подготовке к тестированию модулей целесообразно еще раз пересмотреть психологические и экономические принципы. При исполнении теста следует обращать внимание на побочные эффекты, например, если метод делает то, чего он делать не должен. В общем
случае такую ситуацию обнаружить трудно, но иногда побочные эффекты можно выявить, если проверить не только предполагаемые выходные переменные, но и другие, состояние которых в процессе тестирования измениться не должно. Поэтому при его исполнении наряду с предполагаемыми результатами необходимо проверить и эти переменные.
Во время тестирования возникают и психологические проблемы, связанные с личностью тестирующего. Программистам полезно поменяться кодом, чтобы не тестировать свой собственный. Так, программист, сделавший функцию вызова метода, является хорошим кандидатом для тестирования вызываемого метода. Заметим, что это относится только к тестированию, а не к отладке, которую всегда должен выполнять автор класса или модуля.
Не следует выбрасывать результаты тестов; представляйте их в такой форме, чтобы можно было повторно воспользоваться ими в будущем. Если в некотором подмножестве классов обнаружено большое число ошибок, то эти классы, по-видимому, содержат еще большее число необнаруженных ошибок. Такие классы должны стать объектом дальнейшего тестирования; желательно даже дополнительно произвести контроль или просмотр их текста. Наконец, следует помнить, что задача тестирования заключается не в демонстрации корректной работы, а в выявлении ошибок.