На сегодняшний день автоматизировано большинство этапов разработки программного обеспечения, в том числе и этап тестирования. Однако в отечественной практике тестированию программных средств отведена незаслуженно маленькая роль. Причинами могут быть отсутствие денег на приобретение дорогостоящих CASE–средств, поддерживающих все этапы разработки ПО, в том числе тестирование, или нежелание держать такую штатную единицу, как специалист по тестированию. Обычно приобретают средства автоматизации проектирования (создание ER–моделей, информационных моделей и пр.) и программирования (автоматическое создание БД на основе ER–модели, создание интерфейса на основе ER–модели, визуальное программирование). С тестированием дела обстоят сложнее.
Тестирование занимает важное место в жизненном цикле программного обеспечения, это трудоемкий и дорогостоящий процесс. В организационной структуре современной фирмы – разработчика ПО должен быть отдел по тестированию программного обеспечения или специалист по тестированию программного обеспечения, так как одним из принципов тестирования является избежание тестирования автором, а тестирование программного средства напрямую связано с его качеством.
Отечественные производители коммерческого программного обеспечения только сейчас серьезно задумались о качестве своей продукции и, как следствие, о тестировании.
В качестве объективных причин, почему это происходит именно сейчас и почему этого не было раньше, можно выделить следующие.
1 Сформировалась нормативно–правовая база для осуществления деятельности по разработке программного обеспечения, база в области авторского права и смежных прав, а также защиты прав потребителей.
2 Законодательно закрепленные принципы работают и активно используются в правоприминительной практике. Особенно это относится к защите авторских прав.
3 Исполнительная власть начала пресекать попытки распространения нелицензионного программного обеспечения. Есть прецеденты процессов, по которым возмещаются потери от нарушения авторских прав.
4 Возросли требования заказчика к качеству программного обеспечения. Данный момент связан с правовой базой (законы о защите прав потребителей), жесткой конкуренцией на рынке.
5 Накоплен большой опыт создания программных средств, российские компании выходят на другие рынки (в том числе на мировой рынок), что влечет необходимость выполнения новых норм по качеству программных средств.
По этим причинам процессы обеспечения и контроля качества, одним из которых является тестирование, приобретают в настоящий момент большое значение и актуальность. Целью тестирования является обнаружение максимального количества ошибок, а не всех ошибок в программе. Обнаружение всех ошибок невозможно. Полное и абсолютное тестирование выглядит скорее мечтой, чем реальностью. Вот простой пример: еще в 1979 г. Майерс (Myers) описал некоторый простой алгоритм. В нем был всего один цикл и несколько операторов условного перехода. В большинстве языков программирования для кодирования такого алгоритма потребуется не более 20 строк кода. Но такая программа имеет более 100 триллионов путей выполнения! Самому быстрому тестировщику для полного тестирования потребовался бы как минимум миллион лет. Аналогичная программа из 100 строк имеет 1018 триллионов путей выполнения, если на проверку выполнения одного пути тратить 1 секунду, то на полное ее завершение не хватит времени существования всей нашей вселенной, время жизни которой меньше 4 • 1017 секунд!
Таким образом, целью тестирования является не тотальное обнаружение всех ошибок (это принципиально невозможно), а выявление наибольшего количества наиболее критичных ошибок. Если исправление их задерживается, то пользователи программного продукта должны быть предупреждены о наличии такого рода ошибок и рекомендуемых путях обхода.
Если процесс тестирования становится бесконечным, а полное тестирование невозможно, то чем же определяется принятие решения о выпуске в свет исследуемой версии программного продукта? Основными критериями завершенности тестирования является отсутствие критичных ошибок, каждая из которых может сделать абсолютно невозможной реализацию декларированной в системе прикладной функциональности (решение принимается по результатам функционального тестирования). Кроме того, при принятии решения учитывается общее количество зарегистрированных, но неисправленных ошибок. Компания–разработчик обычно заранее выбирает по каждому программному продукту общее количество ошибок (лимит), с которым уже нельзя выпускать программный продукт.
Количественная оценка завершенности процесса тестирования и готовности программного продукта для эксплуатации может быть получена при помощи моделей надежности программного обеспечения. Самый простой способ представления информации для принятия решения – графический: по одной оси откладывается время от начала процесса тестирования, по другой – количество обнаруженных ошибок в программном средстве. По графику (знаку производной) определяется необходимость продолжения тестирования. Существует множество методов, которые помогают принять решение в выпуске программного обеспечения, однако самое, веское слово остается за специалистом, осуществляющим тестирование программного обеспечения, так как на основе количества и характера найденных проблем он может судить о том, удовлетворит данный продукт потребности и ожидания пользователя или нет.
Тестирование программного обеспечения имеет тесную связь с качеством программного обеспечения.