Шаг 8.
Стратегия тестирования

    На этом шаге мы рассмотрим стратегию тестирования.

    Перечислим основные принципы тестирования [1]. Эти принципы интересны тем, что в основном они интуитивно ясны, но в то же время на них часто не обращают должного внимания.

  1. Описание предполагаемых значений выходных данных или результатов должно быть необходимой частью тестового набора. Нарушение этого очевидного принципа представляет одну из наиболее распространенных ошибок. Ошибочные, но правдоподобные результаты могут быть признаны правильными, если результаты теста не были заранее определены. Здесь мы сталкиваемся с явлением психологии: мы видим то, что мы хотим увидеть. Другими словами, несмотря на то, что тестирование по определению - деструктивный процесс, есть подсознательное желание видеть корректный результат. Один из способов борьбы с этим состоит в поощрении детального анализа выходных переменных заранее, еще при разработке теста.
  2. Следует избегать тестирования программы ее автором. Многие, кому приходилось самому делать дома ремонт, знают, что процесс обрывания старых обоев (деструктивный процесс) не легок, но он просто невыносим, если не кто-то другой, а Вы сами первоначально их наклеивали. Вот так же и большинство программистов не может эффективно тестировать свои программы, потому что им трудно демонстрировать собственные ошибки.
  3. Необходимо досконально изучать результаты применения каждого теста. Представляется достоверным, что значительная часть всех обнаруженных в конечном итоге ошибок могла быть выявлена в результате самых первых тестовых прогонов, но они были пропущены вследствие недостаточно тщательного анализа результатов первого тестового прогона.
  4. Тесты для неправильных и непредусмотренных входных данных следует разрабатывать так же тщательно, как для правильных и предусмотренных. Вполне вероятно, что тесты, представляющие неверные и неправильные входные данные, обладают большей обнаруживающей способностью, чем тесты, соответствующие корректным входным данным.
  5. Необходимо проверять не только, делает ли программа то, для чего она предназначена, но и ни делает ли она то, что не должна делать. Обязательно проверяйте программу на нежелательные побочные эффекты.
  6. Не следует выбрасывать тесты, даже если программа уже не нужна. Необходимость в использованных тестах наиболее часто возникает в интерактивных системах отладки. Обычно тестирующий сидит за терминалом, на лету придумывает тесты и запускает программу на выполнение. При такой практике работы после применения тесты пропадают. После внесения изменений или исправления ошибок необходимо повторить тестирование, тогда приходится заново изобретать тесты. Как правило, этого стараются избегать, поскольку повторное создание тестов требует значительной работы.
  7. Нельзя планировать тестирование в предположении, что ошибки не будут обнаружены.
  8. Вероятность наличия необнаруженных ошибок в части программы пропорциональна числу ошибок, уже обнаруженных в этой части. На первый взгляд, этот принцип лишен смысла, но тем не менее подтверждается многими программами. Например, допустим, что некоторая программа состоит из модулей А и В. К определенному сроку в модуле А обнаружено пять ошибок, а в модуле В - только одна, причем модуль А не подвергался более тщательному тестированию. Тогда из рассматриваемого принципа следует, что вероятность необнаруженных ошибок в модуле А больше, чем в модуле В. Справедливость этого принципа подтверждается еще и тем, что для ошибок свойственно располагаться в программе в виде неких скоплений, хотя данное явление пока никем еще не объяснено.

        Таким образом, если в какой-нибудь части программы обнаружено больше ошибок, чем в других, то на ее тестирование должны быть направлены дополнительные усилия.

  9. Тестирование - процесс творческий. Вполне вероятно, что для тестирования большой программы требуется больший творческий потенциал, чем для ее проектирования.

    Чтобы подчеркнуть некоторые мысли, высказанные на этом шаге, приведем еще раз три наиболее важных принципа тестирования.




    "На закуску" рекомендуем выполнить следующий простой тест. Задача состоит в том, чтобы проверить программу, которая по трем заданным числам печатает сообщение о том, является ли треугольник со сторонами, длины которых равны данным значениям, неравносторонним, равнобедренным или равносторонним [2].

    Напишите на листе бумаги набор тестов, которые, как Вам кажется, будут адекватно проверять эту программу. Построив свои тесты, проанализируйте их.

    Приступайте к работе... Решение и комментарии вы можете посмотреть здесь.

   


(1) Майерс Г. Надежность программного обеспечения. - М.: Мир, 1980.
(2) Майерс Г. Искусство тестирования программ. - М.: Финансы и статистика, 1982.

    На следующем шаге мы рассмотрим тактику тестирования.




Предыдущий шаг Cодержание Следующий шаг