Рано или поздно (лучше рано, конечно) руководители всех уровней задумываются о том, как сделать их проект, направление, бизнес лучшим из лучших; как работать без авралов и выходных, но успевать все вовремя; как сократить затраты и увеличить прибыль; как повысить лояльность клиентов и сделать так, чтобы они рекомендовали вас своим друзьям, знакомым и коллегам.
Существует множество различных способов для достижения этих целей. В рамках же данного монолога хотелось бы немного поговорить о КАЧЕСТВЕ. Не о каком-то абстрактном качестве из Большой Советской Энциклопедии (или из Модных Западных Стандартов), а о том реальном КАЧЕСТВЕ производимых, разрабатываемых и внедряемых нами продуктов и услуг, которое позволяет сделать эти самые продукты и услуги лучшими и, как следствие, приближает нас к заветным целям.
Я попытаюсь рассмотреть два аспекта:
Но сначала буквально несколько слов о КАЧЕСТВЕ. Что же это собственно такое, какова цена качества и с помощью чего оно достигается?
В области IT нет четкого определения качества. Каждая компания должна сама определить для себя, что понимается под качеством производимых ей продуктов или услуг. Вот, пожалуй, самые удачные определения качества, от которых можно отталкиваться.
| «Должно быть удобным в использовании» |
|
| «Должно удовлетворять требованиям» |
Из чего же складывается цена этого самого КАЧЕСТВА?
То, с помощью чего достигается достойное качество, видно из перечисленных выше составляющих: превентивные меры и тестирование.
Так что же выгоднее компании и Заказчику? Ошибки до отправки (когда они еще не приносят никаких убытков) или после (когда низкое качество продукта негативно влияет на бизнес Заказчика — и он несет убытки)? Об этом ниже.
В качестве ответа на этот вопрос я вижу следующие возможности:
Здесь основная специфика заключается в том, что проявление ошибки у Заказчика «в полевых условиях» стоит достаточно дорого, и тестирование может снизить количество таких сбоев. Это то, что может получить Заказчик, на чем он может реально сэкономить, потратив дополнительные деньги на тестирование. У Заказчика возврат инвестиций достигается за счет уменьшения количества проблем в эксплуатации, Заказчик не теряет на этом деньги, недополучая их со своих клиентов из-за сбоев в системе. Именно за это он и готов платить, увеличивая бюджет проекта.
Да, в заказной разработке увеличение бюджета — это наиболее честная линия поведения по отношению к Заказчику, как это ни странно звучит. Когда подрядчик дешево делает заказной продукт с кучей дефектов, а потом в течение продолжительного времени тянет с Заказчика деньги за поддержку, сопровождение и устранение проблем — для компании «Деньги за свои ошибки — безвыигрышная стратегия» .
"Откладывать тестирование - значит его отвергать"
Только формализованный, прозрачный, повторяемый и управляемый процесс тестирования на проектах позволит добиться всего того, о чем написано выше.
Ниже лишь тезисно обозначу основные моменты такого процесса тестирования.
1. Персонал
Это чисто психологический момент — человек, создавший что-то (в нашем случае разработчики и консультанты) не склонен специально разрушать свои творения. А у тестировщиков работа такая!
«Тестерам платят за то, что они приносят дурные вести»
2. Организация процесса тестирования
3. Документирование
Процесс тестирования, как и любой другой процесс, обязательно должен быть документирован. Для этого должны выполняться:
4. Управление ошибками
1. Тестирование требований (документации)
В целях экономии времени тестирование документации необходимо осуществлять еще на этапе ее разработки или сразу же после его завершения.
При тестировании и анализе документации следует уделять внимание на следующие критерии качества требований:
Тестировщик, работающий с документацией, отвечает за техническую точность каждого ее слова. Он обязан произвести самую тщательную проверку ее соответствия реальной структуре и поведению программы.
Необходимо обращать внимание на сложные и запутанные места текста. Они могут отражать неудачно спроектированные элементы самой программы.
2. Приемочное тестирование
При разработке ТС исключительно важно включить в ТС приемочные тесты. Набор этих тестов заранее согласовывается с Заказчиком и выполняется им по завершении разработки, т.е после выкладки очередной версии (или после завершения очередного этапа). Если программа проходит приемочные тесты, значит работы по ТС выполнены и все дальнейшие изменения будут включаться только в следующий этап. Разработка и выполнение приемочных тестов позволит, во-первых, более глубоко понять требования Заказчика, во-вторых, улучшить качество разрабатываемых систем, в-третьих, формализовать отношения с Заказчиком на этапе сдачи и, в-четвертых, убедить Заказчика в полноте и качестве выполненных работ.
Приемочные тесты также необходимо проводить и при передаче очередной версии программы разработчиками группе тестирования. При поступлении каждой новой версии тестировщики прежде всего проверяют, достаточно ли она стабильна. Если она «обрушивается» при малейшей провокации, то возиться с ней не стоит.
Копии приемочных тестов можно передавать программистам, чтобы те проводили их сами и не сдавали программы раньше времени. Это позволит избежать возвратов тестировщиками неработающих программ — моментов, психологически не приятных для обеих сторон.
Приемочные тесты должны быть короткими. В них должны проверяться только основные функции и основные данные. Если программа не пройдет даже такой тест, то с полной уверенностью можно утверждать, что эта версия никуда не годится.
Ряд приемочных тестов можно автоматизировать.
3. Функциональное (ручное) тестирование
Основной вид тестирования, направленный на проверку всех требований Заказчика.
4. Регрессионное (автоматизированное) тестирование
Данный вид тестирования направлен на проверку общей стабильности программы при внесении в какие-либо ее компоненты изменений, исправлений, доработок и т.п.
Один раз тщательно протестировать каждую область программы еще не достаточно — ее тестирование необходимо регулярно повторять. Программа постоянно меняется, возникают новые проблемы, повторно появляются новые ошибки. Регрессионное тестирование должно охватывать программу так же полно, как и первоначальное, однако, не требовать так же много времени. Поэтому все регрессионные тесты должны (по возможности) автоматизироваться.
Прежде всего в набор регрессионных тестов включаются проверки всех недавних исправлений программы. Этот набор непостоянен, тесты включаются в него, затем какое-то время спустя удаляются, уступая место новым.
Регрессионных тестов не должно быть слишком много — только необходимый минимум, полностью покрывающий выбранную область программы. Ими должны по возможности охватываться все аспекты выбранной области (подпрограммы, граничные условия и т.п.) и ситуации, чреватые сбоями и ошибками.
5. Тестирование производительности (нагрузочное тестирование, стрессовое тестирование)
Тестирование производительности (Performance testing) — любое тестирование, при котором производится оценка характеристик производительности (таких как скорость работы, использование ресурсов и т.п.) и сравнение их с ожидаемыми.
Нагрузочное тестирование (Load testing) — испытание системы под большой нагрузкой. При этом могут проверяться как функциональные характеристики (корректность работы под большой нагрузкой), так и характеристики производительности.
Стресс-тестирование (Stress testing) — разновидность нагрузочного тестирования, испытание системы под большой пиковой нагрузкой (в противоположность большой продолжительной загрузке).
Возможная схема этапов разработки и тестирования [ открыть крупнее ]
1. Регламент тестирования
Целью регламента тестирования является:
2. План тестирования
План тестирования разрабатывается один раз для каждого проекта (обычно его разработка начинается на ранних стадиях проекта). Во время выполнения проекта план тестирования корректируется, дополняется и углубляется по мере необходимости.
Цель плана тестирования — обеспечить полноту процесса тестирования.
План тестирования разрабатывается на основе технического задания — требований к продукту.
В плане тестирования описываются способы, виды и критерии тестирования для всех требований, необходимые ресурсы и порядок выполнения тестирования.
План тестирования согласуется со всеми ключевыми членами рабочей группы и утверждается менеджером проекта.
3. Спецификация проектирования тестов
Этот документ определяет, как будет тестироваться каждая функция или группа функций программы. Разрабатывается каждый раз перед тестированием той или иной функциональности.
Цель – усовершенствование и углубление подхода к тестированию функциональности, описание связи с конкретными тестами.
Спецификации разрабатываются на основе следующих документов: план тестирования, техническое задание — требования к продукту.
4. Спецификация тестов
Разрабатывается отдельно для тестирования каждой функциональности.
Цель — дать полное определение тестов, определяемых спецификацией проектирования тестов.
Спецификации тестов разрабатываются на основе следующих документов: план тестирования, техническое задание — требования к продукту, спецификация проектирования тестов.
5. Спецификация проектирования процедуры тестирования
Цель — определить набор последовательных действий для полного тестирования определенного набора требований для определенного тестируемого элемента. Тестовая процедура определяет действия для выполнения набора тестовых спецификаций.
Спецификация процедуры тестирования разрабатывается, если последовательность действий имеет какие-либо специфичные особенности, не описанные в плане тестирования.
Спецификации процедуры тестирования разрабатываются на основе следующих документов: план тестирования, техническое задание — требования к продукту, спецификация проектирования тестов, спецификации тестов.
6. Отчеты тестирования
Отчеты тестирования заполняются в процессе проведения тестирования.
Целью отчетов тестирования является отслеживание состояния качества тестируемого программного продукта.
В процессе тестирования собираются так называемые метрики, т.е. количественные оценки, позволяющие определить как качество разрабатываемого продукта, так и состояние выполнения работ. Вот лишь некоторые из них:
| Наименование метрики | Описание | Классификация |
|---|---|---|
| Количество ошибок | В процессе тестирования производится вычисление количества выявленных ошибок, включая количество разрешенных и оставшихся ошибок. | Качество |
| Степень серьезности ошибок | Количество ошибок, распределенных по уровням приоритета. Эта метрика показывает количество проблем продукта, о которых были составлены отчеты, перечисляемые согласно приоритетам. | Качество |
| Тестовое покрытие | Общее количество тестов / общее количество требований. Измерение тестового покрытия показывает плановое тестовое покрытие. | Покрытие |
| Статус выполнения тестов | Количество выполненных тестов / общее количество тестов. Статус тестов показывает объем еще не выполненных работ по тестированию. | Ход выполнения работ |
| Коэффициент обнаружения ошибок | Общее количество найденных дефектов / количество выполненных тестов. Эта метрика используется для анализа и поддержки решения о целесообразности выпуска продукта. | Ход выполнения работ |
| Коэффициент состояние качества | Количество успешно выполненных тестов (без обнаружения дефектов) по отношению к общему количеству тестов. Коэффициент состояние качества показывает, какая часть функция приложения продемонстрировала успешную работу. | Качество |
| Плотность дефектов | Общее количество найденных дефектов / количество тестов на функцию (т.е. на сценарий использования системы или на требование к тестам). Плотность дефектов помогает обнаружить тот факт, что в одной из частей тестируемой функциональности появляется особенно большое число ошибок. | Качество |
2. Тестирование производительности
— стандартные метрики
| Измерение | Описание |
|---|---|
Время отклика на команду |
Трассировка времени отклика для каждой отдельной команды, которая посылается через сеть на сервер. |
Время отклика на таймер |
Высокоуровневое время отклика, основанное на выполнении конкретных бизнес-функций и/или сценариев. |
— метрики аппаратного обеспечения
| Измерение | Описание |
|---|---|
Время отклика на команду |
Трассировка времени отклика для каждой отдельной команды, которая посылается через сеть на сервер. |
Время отклика на таймер |
Высокоуровневое время отклика, основанное на выполнении конкретных бизнес-функций и/или сценариев. |
| Централизованная группа | Внутри проектных команд |
|---|---|
|
|
Отрицательные стороны
| Централизованная группа | Внутри проектных команд |
|---|---|
|
|