ALMELN.ru

Хранилище текстов, отзывов и закладок о тестировании, обеспечении качества и литературе

View the Project on GitHub

Принципы тестирования программного обеспечения

В учебных программах по дисциплине “Обеспечение качества и тестирование программ” есть вопрос “Принципы тестирования”. В программе обучения базового уровня International Software Testing Qualifications Board “Сертифицированный тестировщик” указано на необходимость “Объяснить семь принципов в тестировании”.

“Искусство тестирования программ”, Глендфорд Майерс

1982 год. 25 страница:

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

Принцип 1 - Описание предполагаемых значений выходных данных или результатов должно быть необходимой частью тестового набора.

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

Принцип 2 - Следует избегать тестирования программы ее автором.

После выполнения конструктивной части при проектировании и написании программы программисту трудно быстро (в течение одного дня) перестроиться на деструктивный образ мышления… Большинство программистов не могут эффективно тестировать свои программы, потому что им трудно демонстрировать собственные ошибки…

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

Принцип 3 - Программирующая организация не должна сама тестировать разработанные ею программы.

Как и ранее, из изложенного не следует, что программирующая организация не может найти свои ошибки; тестирование в определенной степени может пройти успешно. Мы утверждаем здесь лишь то, что экономически более целесообразно выполнение тестирования каким-либо объективным, независимым подразделением.

Принцип 4 - Необходимо досконально изучать результаты применения каждого теста.

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

Принцип 5 - Тесты для неправильных и непредусмотренных входных данных следует разрабатывать так же тщательно, как для правильных и предусмотренных.

При тестировании программ имеется естественная тенденция концетрировать внимание на правильных и предусмотренных входных условиях, а неправильным и непредусмотренным входным данным не придавать значения. Например, при тестировании задачи о треугольниках, приведенной во второй главе, лишь немногие смогут привести в качестве теста длины сторон 1, 2 и 5, чтобы убедиться в том, что треугольник не будет ошибочно интерпретирован как неравносторонний. Множество ошибок можно также обнаружить, если использовать программу новым, не предусмотренным ранее способом. Вполне вероятно, что тесты, представляющие неверные и неправильные входные данные, обладают большей обнаруживающей способностью, чем тесты, соответствующие корректным входным данным.

Принцип 6 - Необходимо проверять не только, делает ли программа то, для чего она предназначена, но и не делает ли она то, что не должна делать.

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

Принцип 7 - Не следует выбрасывать тесты, даже если программа уже не нужна.

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

Принцип 8 - Нельзя планировать тестирование в предположении, что ошибки не будут обнаружены.

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

Принцип 10 - Тестирование - процесс творческий.

Принцип 11 - Тестирование - это процесс выполнения программ с целью обнаружения ошибок.

Принцип 12 - Хорошим считается тест, который имеет высокую вероятность обнаружения еще не выявленной ошибки.

Принцип 13 - Удачным считается тест, который обнаруживает еще не выявленную ошибку.

“Быстрое тестирование”, Роберт Калбертсон, Крис Браун, Гэри Кобб

Издательский дом “Вильямс”, 2002 год. 75, 110/379 страница:

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

Один из основных принципов тестирования заключается в том, что всегда необхо­димо знать, в каком состоянии находится тестируемая система. Если обнаружен де­фект, но тестировщик не знает, какие действия привели к сбою, в таком случае воз­никают трудности при воспроизведении этого сбоя. Необходимость проводить тес­тирование из известного состояния означает, что каждый тестовый случай должен привести аппаратные и программные средства в известное состояние. Это отнюдь не означает, что тестировщик обязан обесточить систему, перезагрузить ее и запускать программу с самого начала — как и в любых других ситуациях при тестировании, все имеет свои пределы.

«Сертифицированный тестировщик Программа обучения Базового уровня»

Версия 2011 (от 13 апреля 2011 года), International Software Testing Qualifications Board, Андрей Конушин (председатель), Александр Александров, Алексей Александров, Татьяна Смехнова, Елена Абрамова. 16-17/101 страница:

Эти принципы тестирования были предложены в последние 40 лет и являются общим руководством для тестирования в целом.

Принцип 1 – Тестирование демонстрирует наличие дефектов. Тестирование может показать, что дефекты присутствуют, но не может доказать, что их нет. Тестирование снижает вероятность наличия дефектов, находящихся в программном обеспечении, но, даже если дефекты не были обнаружены, это не доказывает его корректности.

Принцип 2 – Исчерпывающее тестирование недостижимо. Полное тестирование с использованием всех комбинаций вводов и предусловий физически невыполнимо, за исключением тривиальных случаев. Вместо исчерпывающего тестирования должны использоваться анализ рисков и расстановка приоритетов, чтобы более точно сфокусировать усилия по тестированию.

Принцип 3 – Раннее тестирование. Чтобы найти дефекты как можно раньше, активности по тестированию должны быть начаты как можно раньше в жизненном цикле разработки программного обеспечения или системы, и должны быть сфокусированы на определенных целях.

Принцип 4 – Скопление дефектов. Усилия тестирования должны быть сосредоточены пропорционально ожидаемой, а позже реальной плотности дефектов по модулям. Как правило, большая часть дефектов, обнаруженных при тестировании или повлекших за собой основное количество сбоев системы, содержится в небольшом количестве модулей.

Принцип 5 – Парадокс пестицида. Если одни и те же тесты будут прогоняться много раз, в конечном счете этот набор тестовых сценариев больше не будет находить новых дефектов. Чтобы преодолеть этот “парадокс пестицида”, тестовые сценарии должны регулярно рецензироваться и корректироваться, новые тесты должны быть разносторонними, чтобы охватить все компоненты программного обеспечения, или системы, и найти как можно больше дефектов.

Принцип 6 – Тестирование зависит от контекста. Тестирование выполняется по-разному в зависимости от контекста. Например, программное обеспечение, в котором критически важна безопасность, тестируется иначе, чем сайт электронной коммерции.

Принцип 7 – Заблуждение об отсутствии ошибок. Обнаружение и исправление дефектов не помогут, если созданная система не подходит пользователю и не удовлетворяет его ожиданиям и потребностям.

Эта заметка-конспект является ответом на один из экзаменационных вопросов по учебной дисциплине “Обеспечение качества и тестирование программ” и вопроса программы обучения базового уровня International Software Testing Qualifications Board “Сертифицированный тестировщик”. Полный перечень вопросов привел в заметке Учебные программы, экзаменационные вопросы и литература по обеспечению качества и тестированию программ.

30.07.2017. Перейти на Главную страницу