Добавлен: 31.03.2023
Просмотров: 622
Скачиваний: 1
СОДЕРЖАНИЕ
Понятие тестирования и отладки
Основные методологии проведения тестов и их ограничения
2.1. Стратегия проектирования тестов
2.3.1. Восходящее тестирование
2.3.2. Нисходящее тестирование
Преимущества нисходящего подхода
Ограничения нисходящего подхода
2.3.3. Модифицированный нисходящий метод
2.3.6. Модифицированный метод сандвича
Сравнение методов тестирования, отладка программных средств
3.1. Критерии сравнения методов тестирования
3.3. Методы сборки модулей в комплекс
3.4. Тестирование коммерческих пакетов прикладных пакетов программ
3.5. Принципы и виды отладки программного средства
3.6. Автономная отладка программного средства
ВВЕДЕНИЕ
Данная работа направлена на изучение в области основ алгоритмизации и программирования, а именно тестированию и отладке программ.
Актуальность курсовой работы обусловлена тем, что в современном мире с растущими потребностями рынка программного обеспечения (далее ПО) растёт и его качество. Прежде чем программа попадёт к конечному пользователю она подвергается тщательному тестированию и отладке и этот процесс крайне важен, и на него выделяются значительные временные и финансовые ресурсы (около 45% бюджета проекта). Именно отладка и тестирование позволяют определить качество программного продукта и поэтому это крайне важный этап разработки.
Цели работы:
- определить суть тестирования и отладки программного продукта
- проанализировать их цели и задачи
- выявить актуальные подходы и ограничения.
Задачи курсовой работы:
- изучить литературу по рассматриваемой теме
- проанализировать основные понятия, касающиеся тестирования и отладки ПО
- освоить и проанализировать актуальную информацию по способам и методологиям отладки и тестирования современного ПО
Характеристика источников, использованных для написания курсовой работы.
В качестве базы было выбрано учебное пособие «Технология разработки прикладного программного обеспечения» авторами которого являются: Соловьев С.В., Цой Р.И., Гринкруг Л.С. Издательство: Академия Естествознания. В данном пособии содержится общая характеристика тестирования и отладки программного обеспечения, также принципы формирования тестов и сборки модулей программы в единую, корректно работающую систему. Достаточно подробно рассмотрены основные этапы и методологии тестирования, особенности построения тестовых наборов. Содержание глав иллюстрируется таблицами, рисунками, примерами.
Основной материал пособия был значительно переработан и расширен современными публикациями, иностранными пособиями и книгами, а так-же дополнен собственным опытом.
ГЛАВА 1.
Понятие тестирования и отладки
1.1. Отладка и тестирование
Прежде всего необходимо сказать что тестирование и отладка это не одно и то же, это разные понятия с разными целями.
Тестирование программного средства (ПС) – это выполнение программ с определенным набором данных, результат применения или шаблон поведения программ для которых известен заранее. Этот набор данных называется тестовым или же просто тестом. Тестирование программного обеспечения входит в более обобщенное и крупное понятие – «отладка программ». Сама отладка представляет из себя процесс, с помощью которого получается программа, работающая с требующимися характеристиками и с заданной областью изменения входных данных.
Отладка в себя включает:
- действия нацеленные на поиск ошибок (тестирование);
- локализацию ошибок и их диагностику (определение местоположение ошибок и их характер);
- внесение изменений в программу с задачей устранения найденных ошибок.
Из этих трёх перечисленных видов работ самым дорогостоящим и трудозатратным процессом является тестирование. Затраты на него приближаются к 45% общих трат на проект.
Нельзя полностью гарантировать отсутствие ошибок в программе. Можно лишь показать присутствующие. Даже при корректном выполнении программы для обширного количества тестов, нельзя сказать что ошибок в ней нет. Если считать что тесты могут выявить большинство ошибок в ПС, то можно сказать о некотором уровне надежности в корректности исполнения программы, получаемом при помощи этих тестов. Отсюда сформулируем высказывание: если у вас цель – доказать отсутствие ошибок в программе, вы найдете их значительно меньше, нежели если вашей целью будет – показать наличие этих ошибок.
Результаты психологических исследований показывают, что если перед человеком ставится невыполнимая задача, то он работает хуже. Например, если предложить кому-то решить кроссворд в воскресном номере «Нью-Йорк Таймс» за 15 минут, то через 10 минут не будет достигнут значительный успех; ведь понятно, что это невыполнимая задача. Если же на решение отводится четыре часа, то через 10 минут результат окажется лучше [6]. Иными словами, определение тестирования как процесса обнаружения ошибок переводит его в разряд решаемых задач и таким образом преодолевается психологическая трудность.
Создать полностью надежную программу как результат только лишь тестирования нельзя. Надежность определяется правильностью всех этапов проектирования. Поэтому можно сказать что лучшее решение проблем с надежностью – это с самого начала не допускать ошибок в программе. Но вероятность спроектировать и создать идеальную программу мала. Роль тестирования заключается в том, чтобы найти местонахождение ошибок, которые остались в хорошо спроектированной программе. Поэтому только с помощью тестирования не получится достичь надежности в плохо спроектированного программного средства.
Процесс тестирования является необычным (поэтому считается трудным), потому что в своей сути он деструктивный. Ведь задача тестовика (проверяющего) – заставить программу сбиться.
1.2. Особенности тестирования
У тестирования есть свои особенности, ведь программы (объекты тестирования) обладают рядом качеств, из-за которых процесс их тестирования отличается от общепринятого, который применяется при разработке технической аппаратуры. Этими особенностями являются:
- неимение единого стандарта тестирования в виду крупной разновидности программного обеспечения (ПО) и его сложности, области применения и т.п.;
- невозможность досконально провести тестирование и высокая сложность программных средств;
- отсутствия стандарта (программы), с которым должна совпадать тестируемая программа.
Тестирование программного обеспечения — процесс исследования, испытания программного продукта, имеющий своей целью проверку соответствия между реальным поведением программы и её ожидаемым поведением на конечном наборе тестов, выбранных определенным образом [5]
Обобщая опыт тестировщиков можно выделить несколько правил проведения тестирования.
а) Одна из необходимых частей тестового набора данных это описание предполагаемых значений результата тестовых прогонов. Необходимо знать ожидаемый результат при тестировании, ведь тестирование как процесс многократного выполнения программы проводится на многочисленных входных данных. Прежде всего это необходимо для того, что бы определить корректность данных, которые получили путём тестового прогона. Из этого следует, что набор тестов в себе должен иметь два элемента: описание вводных данных, и описание точного и однозначного результата, который будет соответствовать набору входных данных. На практике придерживаться этого принципа сложно, а в отдельных случаях и вовсе ничего не выйдет. Проблема этого принципа находится в том, что во время тестирования модуля (программы) для каждого набора входных данных нужно определить вручную ожидаемый результат или выявить интервал изменения выходных данных. Этот процесс является трудозатратным даже для нетривиальных программ, по причине необходимости ручных расчетов, исходя из логики алгоритмов программы. Исходя из рассмотренного правила, на практике который реализовать не очень просто, логически вытекает следующее правило.
б) Следует корректно рассмотреть результаты каждого теста. По той причине что, большая часть найденных ошибок была пропущена в первых тестовых прогонах, и была обнаружена значительно позже, как следствие не слишком добросовестного анализа результатов тестов.
в) Тестирование проходит более эффективно, когда проводится на автором программы. Ведь по своей сущности тестирование – разрушительный (деструктивный) процесс. Именно по этой причине многие считают его трудным. Для самого автора программы это наиболее трудный и малоэффективный процесс, ведь после проектирования, конструирования и написания программы, ему тяжело переключиться на разрушительный образ мышления и, только создав программу, сразу же начать выявлять в ней ошибки. По этой причине для проведения процессов тестирования создаются специальные группы тестирования. Но это не значит, что автор не может протестировать своё детище. В данном случае речь идёт о повышении эффективности тестирования.
г) Необходимо старательно проверять те участки программ, в которых обнаруживается больше ошибок. Есть утверждение, согласно которому шанс наличия не найденных ошибок в какой-то части программы пропорционален числу ошибок, уже найденных в этой части. Есть вероятность, что в те части программы, в которых при тестировании найдено наибольшее число ошибок, с позиции системного анализа не корректны, либо разрабатывались более низкоквалифицированными программистами.
д) Для непредусмотренных и некорректных входных данных тесты следует разрабатывать настолько же тщательно, как и для правильных. Следуя данному правилу обработки данных, которые находятся за областью допустимых значений, в объекте тестирования (программе) необходима диагностика в виде сообщений. Если данные аварийные сообщения отсутствуют и программа завершает свою работу аварийно, по причине того что не может следовать по предложенному алгоритму и ведёт себя непредсказуемо, то данная программа не считается корректной, работоспособной и нуждается в серьёзной доработке. Зачастую тестовые наборы данных в области выходящих за предел допустимых значений отличаются большей обнаруживающей способностью, чем те тестовые наборы данных, которые соответствуют правильным наборам данных.
е) Тест должен содержать два компонента:
- описание входных данных
- описание точного и корректного результата соответствующего набору входных данных
Необходимость этого подчеркивал логик Копи в работе[2]: «Проблема может быть охарактеризована как факт или группа фактов, которые не имеют приемлемого объяснения, которые кажутся необычными или которые не удается подогнать под наши представления или предположения. Очевидно, что если что-нибудь подвергается сомнению, то об этом должна иметься какая-то предварительная информация. Если нет предположений, то не может быть и неожиданных результатов»
ж) Существует необходимость проверять не только, выполняет ли программа ту функцию, для которой предназначена, но так-же и не делает ли она того, для чего не предназначалась. Этот принцип логически следует из предыдущего. Нужно проверять каждую программу на неприятные вторичные эффекты.
1.3. Основные определения
Отладка (debugging) не представляет собой разновидность тестирования. Пусть понятия «тестирование» и «отладка» нередко применяются в качестве синонимов, несмотря на это под ними подразумеваются различные процессы.
Тестирование (testing) – исполнения программы или ее части для того,
что бы обнаружить ошибки.
Испытание (validation) – поиск ошибок, путём выполнения программы в заданной реальной среде.
Контроль (verification) – поиск ошибок, путём выполнения программы в моделируемой, тестовой среде.
Аттестация (certification) – Достоверное доказательство корректности программы. Во время процесса аттестации происходит сравнение с предопределённым ранее стандартом.
Доказательство (proof) – попытка поиска ошибок в программном обеспечении независимо от внешней для программы среды. Подавляющая чать способов доказательства подразумевает подтверждение верности математических теорем о корректности программы и формулировку утверждений о ходе работы программы. Доказательства не предполагают непосредственного выполнения программы и могут считаться формой тестирования.
Тестирование – это деятельность, направленная на обнаружение ошибок.
Отладка направлена на установление точной природы известной ошибки, а затем на исправление этой ошибки. Эти два вида деятельности связаны, т.к. результаты тестирования являются исходными данными для отладки.
Тестирование модуля, или автономное тестирование (module testing, unit testing) – контроль отдельного программного модуля, обычно в изолированной среде (изолированно от всех остальных модулей).
Тестирование модуля иногда включает математическое доказательство.
Тестирование сопряжений (integration testing) – контроль сопряжений между частями системы (модулями, компонентами, подсистемами).
Тестирование внешних функций (external function testing) – контроль внешнего поведения, определенного внешними спецификациями.
Комплексное тестирование (system testing) – контроль и/или испытание системы по отношению к исходным целям.