1.3.Стоимость ошибки
Зачем нужно тестировать ПО? Для компании, создающей программные продукты, ошибка в программе – это экономические потери:
расходы компании на тестирование и отладку программы. Расходы такого типа поддаются приблизительной оценке;
убытки, которые несет компания от того, что ошибка не была найдена вовремя. В большинстве случаев оценить потери от ошибок такого невозможно.
В первом случае, если программа содержала ошибку, и эта ошибка была обнаружена в процессе тестирования, стоимость ошибки вычисляется как суммарные затраты следующих составляющих:
оплата времени работы специалиста по тестированию;
оплата времени работы программиста, который реализовал модуль, содержащий ошибку, а затем исправил ее;
стоимость реализации «неправильного» модуля;
стоимость тестирования «неправильного» модуля;
стоимость исправления ошибки и проблем, появившихся из-за ее наличия.
Очевидно, слагаемые поддаются приблизительной оценке.
Если ошибка была обнаружена пользователем, то к стоимости, вычисляемой по формуле предыдущего случая, могут прибавиться другие убытки, например:
время службы поддержки;
компенсации пользователю понесенных затрат;
иски против компании;
утраченная потенциальная оплата услуг компании ушедшими пользователями и пользователями, которые могли бы стать клиентами компании, но не стали ими из-за ухудшения репутации.
Такие убытки, как правило, не поддаются объективной оценке.
Но от «неправильных» программ страдают не только производители, но и пользователи, а иногда даже люди, которые не имеют совершенно никакого отношения к программе.
Часто в качестве примера ПО с наиболее губительными последствиями эксплуатации приводятся катастрофа Ariane 5 и инциденты с Therac-25. Ariane 5 – ракета-носитель, запуск которой был произведен 4 июня 1996 года. Полет продлился неполные 40 сек., после чего произошел взрыв [2].
Из-за ошибок в программной части медицинского комплекса Therac25 минимум шесть человек получили передозировки радиации, некоторые пациенты получили дозы в десятки тысяч рад. Как минимум двое умерли непосредственно от передозировок [20].
В истории РФ также были примеры катастрофических последствий ошибок в программном обеспечении. Например, 5 декабря 2010 года три спутника, критически важные для завершения составления группировки российской навигационной системы ГЛОНАСС – упали в Тихий океан недалеко от Гавайских островов вскоре после их запуска ракетой «Протон-М». Финансовые потери оцениваются в 4 миллиарда рублей. В результате расследования виной аварии была признана ошибка в программировании, которая привела к тому, что в ракету залили неправильное количество топлива. [11]
Такие глобальные катастрофы являются редкими, чаще потери от ошибок носят исключительно финансовый характер. Однако, если учесть тот факт, что 45,1% ошибок находят пользователи, то сумма потерь становится колоссальной.
1.4.Рынок инструментов тестирования
Рынок инструментов тестирования, в основном, состоит из систем автоматического тестирования.
На рынке присутствуют программные продукты трех видов:
коммерческий продукт (WinRunner, Rational Robot, SilkTest, TestComplete и др.);
бесплатные и условно-бесплатные инструменты (freeware, shareware);
собственные утилиты компаний (написанные в ходе работы над проектами).
Рассмотрим недостатки и преимущества продуктов этих видов. Для сравнения существующих систем были выделены следующие критерии:
функциональность;
стоимость;
гибкость настройки продукта под нужды компании;
возможность самостоятельно дорабатывать продукт;
Коммерческие продукты
Преимущества:
в автоматизированных тестах можно использовать функциональность (модули, процедуры, куски кода), которая идет в поставке продукта. В случае, если для тестирования приложения необходимо задействовать подобные методы, этот код не придется писать самому;
как правило, такие инструменты поставляются со своей собственной средой разработки, которая предоставляет хорошие возможности для написания и отладки автотестов.
Недостатки:
высокая стоимость таких продуктов;
-
нет доступа к исходному коду:
Если в инструменте обнаруживается ошибка, то его исправление силами поставщика может занять существенное время.
Нет возможности оперативно настраивать продукт под нужды компании.
зачастую коммерческие продукты навязывают свои подходы к тестированию приложений - в соответствии с той моделью, по которой построен данный инструмент. Такой подход не всегда приемлем для отдельно взятых приложений в силу их специфики, устоявшихся практик, человеческих и машинных ресурсов.
Собственные инструменты:
Преимущества:
иногда такие инструменты являются побочным результатом создания приложения, особенно в случае TDD (достались бесплатно);
о них известно «от и до», их достаточно легко использовать;
доступен исходный код.
Недостатки:
функциональность таких утилит может быть недостаточной для организации автоматизированных тестов;
доработка до полноценной системы тестирования и её поддержка может быть дорогостоящей.
Бесплатные и условно-бесплатные инструменты:
Преимущества:
разумная стоимость владения. Продукт доступен либо бесплатно, либо за небольшую, как правило, плату;
просьбы об исправлении багов и расширении функциональности, как правило, находят понимание и оперативный отклик - порой все так же бесплатно либо за скромную плату. В последнем случае выделенные деньги напрямую расходуются на решение тех задач, с которыми столкнулся пользователь инструмента, а не на разработку расширений, которые ему не нужны;
зачастую у подобных утилит доступен исходный код.
Недостатки:
функциональность таких продуктов может оказаться недостаточной для решения поставленных задач;
существует риск остаться без поддержки со стороны разработчика продукта.
Безусловно, список преимуществ и недостатков представленных подходов далеко не полный и допускает исключения. Например, коммерческие продукты могут иметь разумную цену и быть достаточно гибкими, а собственные инструменты могут оказаться достаточно надежными. У коммерческого продукта может быть неприемлемо продолжительный период освоения, а условно-бесплатный продукт может навязывать свой язык программирования. Бывает и так, что бесплатный продукт оказывается настолько эффективным и удобным в использовании, что разводишь руками и думаешь, за что разработчики коммерческих продуктов хотят получить свои деньги [1].
Сравнение наиболее распространенных на рынке продуктов представлено в табл. 1.2.
Таблица 1.4.1.1. Сравнение продуктов автоматизированного тестирования
Разработчик
|
Продукт
|
Функциональное тестирование
|
Нагрузочное тестирование
|
Качество кода
|
Управление тестами
|
IBM
|
Rational Robot
|
+
|
+
|
+
|
+
|
Borland
|
SilkTest
|
+
|
+
|
-
|
+
|
AutomatedQA
|
TestComplete
|
+
|
+
|
-
|
+
|
HP
|
WinRunner
|
+
|
+
|
+
|
+
|
Open-source
|
Abbot, Selenium, Watir
|
Grinder, Jmeter, OpenSTA
|
GCT, NCover, Cobertura
|
FitNesse, TestLink
|
Как видно из сравнительной таблицы, инструменты для тестирования покрывают такие области как функциональное и нагрузочное тестирование, отслеживают качество кода, предлагают способы управления наборами тестов.
Однако, далеко не всегда получается провести абсолютно полное тестирование. В дальнейшем рассмотрим виды нефункционального тестирования, которые (в большинстве своем) не поддаются автоматизированному тестированию.
|