Фирма

«Инрэко ЛАН»

Термин "обеспечение качества" (Quality Assurance или проще QA) часто приравнивают к "тестированию". На самом деле тестирование - это лишь один из способов обеспечения качества. Чаще всего даже инструмент оценки качества. В большинстве случаев тестирование предотвращает попадание ошибок в продукте к конечному заказчику. При правильном же применении тестирование должно предотвращать само появление этих ошибок в продукте за счет анализа причин (от требований до человеческого фактора) ошибок и последующего их устранения. Данная статья о том, каким же образом качество продукта, и в частности тестирование, влияют на конечный результат. А конечный результат - удовлетворенность заказчика.

Пользователю не надо знать об ошибках

Итак, как я уже сказал выше, тестирование снижает количество ошибок, которые попадают к заказчику. На самом-то деле ошибки в ПО неизбежны. И этого не надо бояться. Ведь, как известно, ничего нельзя сделать с первого раза правильно, особенно, если это что-то - сложная система. Возьмем, например, автомобиль. До того, как сойдет с конвейера первый массовый экземпляр, модель разрабатывают и доводят до ума не один месяц и не один десяток человек. И на этом этапе автомобиль имеет массу дефектов, которые подчищаются с тем, чтобы к Вам в руки он попал без изъянов. И, тем не менее, даже в новых автомобилях отыскиваются дефекты. Правда, число дефектов после выпуска продукта несравнимо мало по сравнению с тем, которое было до того, как модель поставили на конвейер. Естественно и доведение программного продукта "до ума", прежде чем показать его заказчику.
Какую систему Вы бы выбрали: ту, которая содержит 652 потенциальных дефекта, или ту, которая содержит 1307 потенциальных дефектов? Ответ очевиден - ту, которая содержит меньше дефектов.
За счет чего может быть снижено количество дефектов? Одним из наиболее эффективных методов является тестирование.
С другой стороны, зачастую ПО - системы уникальные и не имеющие даже второго экземпляра, и это вносит дополнительные трудности, связанные с тем, что нельзя выпустить "пробную партию". Однако это не повод поставлять систему со всеми ее дефектами (а они там есть всегда, независимо от условий). Эту проблему можно решить, например, бета-тестированием, основанным на тестировании продукта конечным пользователем. Возвращаясь к автопрому, можно привести в пример тот факт, что даже после выхода модели на рынок выявляются новые дефекты, которые не могли быть обнаружены на стадии испытаний в силу объективных причин. Но если Вы не сотрудник компании-производителя, то Вы вряд ли узнаете о проблемах, которые уже были исправлены. Точно также и с программными системами. Большинство ошибок должны быть исправлены до того, как пользователь начнет работу с системой. Поскольку вполне очевидно, что после того, как Вы получите в руки программу, в которой один дефект тянется за другим, желания использовать такую программу у Вас явно поубавится. Поэтому пользователь должен получать продукт без дефектов. Идеальный случай, но к нему надо стремиться, ведь количество дефектов в любом случае конечно. А сократить количество ошибок можно, в том числе, тестируя продукт. Как и при каких условиях - другой вопрос, но тестировать надо.

Тестирование помогает избежать ошибок в будущем

В настоящее время особенно широко распространены итеративные или спиральные модели разработки ПО. Они предполагают постепенное наращивание и улучшение системы. Такие модели наиболее точно отражают реальность. Всегда полезно остановиться и проанализировать предыдущий шаг, прежде чем делать следующий. Точно так же и при разработке ПО, программист должен учесть опыт предыдущих наработок. Строго говоря, после того, как он изучил некую технологию программирования и научился ее применять, он использует одни и те же конструкции кода, только в разном сочетании и с разным содержанием. И если не учесть вовремя, что та или иная последовательность или конструкция кода неэффективна или рискованна, то наступая на одни и те же грабли можно набить много шишек. С другой стороны заметить свои просчеты не так-то просто. Именно поэтому независимое тестирование считается одним из лучших способов повышения качества. Стороннему человеку проще заметить ошибки или недочеты: такова уж натура человека - замечать больше негативное. Однако при разумном подходе недочеты в предыдущих версиях превращаются в достоинства последующих. Причем пройти через ошибки суждено практически всем, поскольку, как известно, учатся в основном на своих ошибках.

Система в срок или качественная система

Что важнее: уложиться в срок или удовлетворить заказчика? Часто эти две цели несовместимы, а в большинстве случаев вторая является зависимой от первой. Если Вы не выполняете заказ в срок - заказчик неудовлетворен. Окружающий мир настолько быстро изменяется, что система нужна здесь и сейчас, а в будущем она может быть уже просто бесполезной. Однако достижение первой цели не является достаточным условием достижения второй. Кроме сроков заказчик требует полноты реализации функциональности, нефункциональных характеристик (надежность, производительность, удобство использования и т.п.), и даже того, что не было зафиксировано в спецификациях и требованиях - а именно собственных субъективных ожиданий от продукта. И если последней составляющей с трудом можно управлять, то что касается зафиксированных требований, а также общепринятых стандартов и правил, то ими можно и нужно управлять. Управление можно представить двумя составляющими: контроль и управляющее воздействие. Тестирование является инструментом контроля качества, о чем мы говорили в начале статьи, а, следовательно, и контроля выполнения требований и соблюдения стандартов.
Но как все это может повлиять на удовлетворенность заказчика? Очень просто. Во-первых, тестирование снижает риск неправильной реализации системы, т.е. той, которую ожидал заказчик. А во-вторых, тестирование избавляет продукт от дефектов, которые непременно будут раздражать пользователя и заказчика. Однако, как известно, тестированию либо не уделяется должное внимание, либо оно начинается слишком поздно, когда исправление всех найденных дефектов не позволяет уложиться в срок. Выхода два: либо не исправлять все дефекты и мириться с последующим раздражением заказчика (а оно непременно будет, поверьте), либо убеждать заказчика в сдвиге сроков сдачи законченного продукта, но гарантировать при этом качество (возможно даже выполнение за свой счет работ, выходящих за пределы установленных сроков). Так что важнее: сроки или качество? Решать конкретному руководителю в конкретном проекте в зависимости от многих параметров. Не достигнув одной из этих целей, Вы рискуете потерять заказчика навсегда. Однако, не достигнув качества, нельзя рассчитывать на будущих клиентов. Миру нужно являть лучшее, а худшее оставлять "в мастерской". Именно это и позволяет делать тестирование.

Андрей Конушин, ведущий инженер-тестировщик

Метки: качество | тестирование

Добавить комментарий