5. Отладка и тестирование программ
Отладка ПС - это деятельность, направленная на обнаружение и исправление ошибок в ПС с использованием процессов выполнения его программ. Тестирование ПС - это процесс выполнения его программ на некотором наборе данных, для которого заранее известен результат применения или известны правила поведения этих программ. Указанный набор данных называется тестовым или просто тестом. Таким образом, отладку можно представить в виде многократного повторения трех процессов: тестирования, в результате которого может быть констатировано наличие в ПС ошибки, поиска места ошибки в программах и документации ПС и редактирования программ и документации с целью устранения обнаруженной ошибки.
Другими словами: Отладка = Тестирование + Поиск ошибок + Редактирование.
Долгое время было принято считать, что целью тестирования является доказательство отсутствия ошибок в программе. Однако этот тезис не выдерживает критики, т.к. полный перебор всех возможных вариантов выполнения программы находится за пределами вычислительных возможностей даже для очень небольших программ. Поэтому никакое тестирование не может гарантировать отсутствия ошибок. Афористически это сформулировано в известной "аксиоме программирования": "В каждой программе есть ошибки. Если в программе нет ошибок, то они есть в алгоритме. Если же ошибок нет ни там, ни там, то такая программа никому не нужна".
Принципы тестирования:
1) необходимой частью каждого теста должно являться описание ожидаемых результатов работы программы, чтобы можно было быстро выяснить наличие или отсутствие ошибки в ней;
2) следует по возможности избегать тестирования программы ее автором, т.к. кроме уже указанной объективной сложности тестирования для программистов здесь присутствует и тот фактор, что обнаружение недостатков в своей деятельности противоречит человеческой психологии (однако отладка программы эффективнее всего выполняется именно автором программы);
3) по тем же соображениям организация - разработчик программного обеспечения не должна “единолично” его тестировать (должны существовать организации, специализирующиеся на тестировании программных средств) ;
4) необходимо тщательно подбирать тесты не только для правильных ( предусмотренных ) входных данных, но и для неправильных (непредусмотренных);
5) при анализе результатов каждого теста необходимо проверять, не делает ли программа того, что она не должна делать.
Фундаментальный принцип тестирования: «хорош тот тест, для которого высока вероятность обнаружить ошибку, а не тот, который демонстрирует правильную работу программы».
Следовательно, нужно подготовить такой набор тестов и применить к ним ПС, чтобы обнаружить в нем по возможности большее число ошибок. Однако чем дольше продолжается процесс тестирования (и отладки в целом), тем большей становится стоимость ПС. Отсюда возникает задача: определить момент окончания отладки ПС (или отдельной его компоненты). Признаком возможности окончания отладки является полнота охвата пропущенными через ПС тестами (т.е. тестами, к которым применено ПС) множества различных ситуаций, возникающих при выполнении программ ПС, и относительно редкое проявление ошибок в ПС на последнем отрезке процесса тестирования. Последнее определяется в соответствии с требуемой степенью надежности ПС.
Долгое время основным способом тестирования было тестирование методом «черного ящика» (тестирование с управлением по входу-выходу). При использовании этого подхода программе подавались некоторые данные на вход и проверялись результаты, в надежде найти несоответствия со спецификацией программы (спецификация ПС - это описание поведения ПС). При этом программа рассматривалась как черный ящик, т. е. как именно она работает, считалось несущественным. Критерием полноты тестирования в этом случае являлся бы перебор всех возможных значений входных данных, что невыполнимо.
В связи с этим появились методы тестирования, которые изучают не только внешнее поведение программы, но и ее внутреннее устройство (исходные тексты). Такие методики обобщенно называют тестированием «белого ящика»(тестирование, управляемое логикой программы). При использовании этого подхода тестировщик (как правило программист) разрабатывает тесты, основываясь на знании исходного кода, к которому он имеет полный доступ. Подход заключается в том, что тесты проектируются на основании изучения текстов программ с целью протестировать все пути выполнения программ. Если принять во внимание наличие в программах циклов с переменным числом повторений, то различных путей выполнения программ может оказаться также чрезвычайно много, так что их тестирование также будет практически неосуществимо.
Для каждого из упомянутых подходов существуют свои методы разработки тестовых комплектов. Для подхода «черного ящика» это методы эквивалентных разбиений, граничных условий и функциональных диаграмм, а для подхода «белого ящика» - методы, удовлетворяющие различным критериям покрытия элементов структуры программы (покрытия операторов, условий, решений и комбинированный).
Стратегия тестирования
Спектр подходов к проектированию тестов.
Оптимальная стратегия проектирования тестов расположена внутри интервала между этими крайними подходами, но ближе к левому краю. Она включает проектирование значительной части тестов по спецификациям, исходя из принципов:
· на каждую используемую функцию или возможность - хотя бы один тест,
· на каждую область и на каждую границу изменения какой-либо входной величины - хотя бы один тест,
· на каждый особый случай или на каждую исключительную ситуацию, указанную в спецификациях, - хотя бы один тест.
Но она требует также проектирования некоторых тестов и по текстам программ, исходя из принципа (как минимум): каждая команда каждой программы ПС должна проработать хотя бы на одном тесте.
Назад к разделу "4. Методы разработки программ"
Вперед к разделу "6. Языки программирования и их назначение"