Файл: Основы проектирования программ. Этапы создания программного обеспечения (Анализ требований).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 31.03.2023

Просмотров: 169

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

Диагностика и локализация ошибок с обдумыванием результатов исполнения программы объединяет следующие группы методов: индукции; дедукции; прослеживания логики в обратном порядке.

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

Диагностика и локализация ошибок методом индукции разбивается на следующие шаги.

  1. Определение данных, имеющих отношение к ошибке, которое заключается в перечислении всех результатов действий, свидетельствующих о правильном выполнении программы и всех ее неправильных действий (т.е. симптомов, которые приводят к выводу о наличии ошибки).
  2. Организация данных. Индукция подразумевает анализ от частного к общему, поэтому следующий шаг заключается в структурировании данных, имеющих отношение к ошибке, с целью выявления закономерностей.
  3. Изучение взаимосвязи между признаками ошибки и выдвижения гипотезы (одной или нескольких) о причине ошибки. Выдвижение гипотезы осуществляется с учетом закономерностей, выявленных в структуре симптомов ошибки. Если нельзя выдвинуть гипотезы, то необходимы дополнительные данные, которые, возможно, будут получены путем построения и выполнения дополнительных тестов. В том случае, когда возможно несколько гипотез, первой выбирается наиболее вероятная.
  4. Доказательство гипотезы. Пропуск этого шага и переход непосредственно к заключениям и попыткам найти ошибку является серьезным просчетом, сильно влияющим на результативность отладки. Необходимо доказать приемлемость гипотезы, прежде чем взять ее за основу. Гипотеза доказывается путем сравнения ее с первоначальными симптомами ошибки или данными. Она должна полностью объяснить существование этих симптомов. Если такое объяснение получить не удается, то, значит, гипотеза либо не обоснована, либо неполна и требуется выдвижение другой гипотезы или уточнения существующей.

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


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

Принципы тестирования

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

Из правильного определения тестирования и его цели вытекает ряд принципов:

  1. Процесс тестирования более эффективен, если проводится не автором программы. Так как тестирование, процесс деструктивный (разрушительный) и разработчику трудно на него переключиться после конструктивного процесса проектирования и написания программы. Это не означает, что программист не может тестировать свою программу, речь идет о повышении эффективности тестирования
  2. Описание предполагаемых значений результатов тестовых прогонов должно быть необходимой частью тестового набора данных. Что бы определить правильность полученных в результате очередного тестового прогона данных, необходимо знать ожидаемый результат, иначе правдоподобные результаты тестового прогона могут быть признаны правильными.
  3. Необходимо досконально изучать результаты применения каждого теста. Из практики видно, что значительная часть всех обнаруженных в конечном итоге ошибок могла быть выявлена в результате самых первых тестовых прогонов, но они бывают пропущены вследствие недостаточно тщательного анализа результатов первых тестовых прогонов.
  4. Тесты для неправильных и непредусмотренных входных данных должны разрабатываться также тщательно, как и для правильных, предусмотренных. Согласно этому принципу при обработке данных, выходящих за область допустимых значений, в программе должна быть предусмотрена диагностика в виде сообщений. Если что отсутствует, и программа завершается аварийно или ведет себя непредсказуемо, то такая программа не может считаться работоспособной и требует существенной доработки. Тестовые наборы данных из области недопустимых входных значений обладают большей обнаруживающей способностью, чем тесты, соответствующие корректным входным данным.
  5. Необходимо проверить не только, делает ли программа то, для чего она предназначена, но и не делает ли она то, что не должна делать.

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

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

Классификация методов тестирования

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

Все существующие методы тестирования можно разделить на два основных класса – статическое и динамическое тестирование.

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

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

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

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


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

Из всех рассмотренных методов тестирования наиболее формализованными являются статические и динамические детерминированные методы.

Организация процесса тестирования

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

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

Процесс тестирования завершают испытания ПО. Испытания позволяют проверить полноту решения функциональных задач, их качество и соответствие ПО технической документации.

Под испытанием программ понимают процесс установления соответствия программы ЭВМ заданным требованиям и программным документам. Испытание ПО является завершающим этапом его разработки.

Целью испытания является установление реальных характеристик программы. На основе сопоставления этих характеристик с требуемыми принимается решение о пригодности ПО к использованию по своему назначению. При неудовлетворительных результатах сопоставления принимается решение о целесообразности и путях дальнейшей доработки ПО

  1. Документирование программного обеспечения


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

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

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

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

  1. Внедрение и сопровождение

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