Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Отладка и тестирование программ: основные подходы и ограничения

Содержание:

ВВЕДЕНИЕ

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

Объект исследования - язык программирования Дельфи.

Предмет исследования – отладка и тестирование программ в Дельфи.

Цель курсовой работы – изучить процесс отладки и тестирования программного обеспечения, их основные подходы и ограничения.

Для достижения цели курсовой работы решены задачи:

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

Теоретической основой работы послужили учебники по языку Delphi Фаронова В.В., Осипова Д.Л. и другие.

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

Структура курсовой работы включает введение, две главы, заключение, список использованных источников и приложение.

Первая глава содержит теоретические основы разработки, отладки и тестирования программ.

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

1. Основы разработки, отладки и тестирования программ

1.1 Этапы создания программ

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

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

1) постановки задачи;

2) проектирования программы;

3) построения модели;

4) разработки алгоритма;

5) написания программы;

6) отладки программы;

7) тестирования программы;

8) документирования. [5, с. 33]

Кратко рассмотрим каждый из этих этапов.

Постановка задачи. Чтобы решить задачу, необходима точная ее формулировка. В первую очередь, необходимо определить исходные и выходные данные, т.е. ответить на вопросы:

а) что имеется на входе;

б) что необходимо получить.

Дальнейшей детализацией постановки задачи даются ответы на вопросы:

  • как определяется решение;
  • каких данных нет и все ли они необходимы;
  • каковы допущения и пр. [5, с. 34]

Таким образом, вкратце на этапе постановки задачи нужно:

− описать исходные данные и результаты;

− формализовать задачу;

− описать поведение программы в особых случаях (при наличии таковых).

В ходе такой работы выявляются свойства, которыми должна обладать программа в конечном виде, описываются ее функции, свойства интерфейса. [5, с. 34]

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

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

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

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

Алгоритм является точным предписанием, определяющим последовательность действий для получения нужного результата из исходных данных. [5, с, 35]

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

Наиболее удобным для программиста является блок-схемное описание алгоритма, изображаемое геометрическими фигурами (блоками), связанными линиями со стрелками. В блоках записывают последовательность действий. [17]

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

Линии соединений блоков и указывающие последовательность связей между ними, проводятся параллельно линиям рамки. Стрелку в конце линии можно не ставить, если линия направляется слева направо или сверху вниз. В блок могут входить несколько линий. Из блока (кроме логического) может выходить только одна линия. Из логического блока выходят две линии и может иметь один из двух блоков. [17]

Основные блоки схем алгоритмов даны в табл. 1 Приложения. Блок-схема должна состоять из всех разветвлений, циклов и обращений к подпрограммам, содержащихся в программе. [23]

Алгоритмический язык является это текстовой формой описания алгоритма, более близкой к языкам программирования, чем блок-схемы. Но это еще не язык программирования, поэтому строгий синтаксис в нем не поддерживается. Для структурирования текста алгоритма на АЯ используют строчные отступы с соблюдением следующего принципа: все конструкции одного уровня вложенности записывают на одном вертикальном уровне; вложенные конструкции смещают относительно внешней вправо. Соблюдением этих правил улучшается наглядность структуры алгоритма, но нет такой наглядности, как у блок-схем. [7, С. 258]

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

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

В методе последовательной детализации сначала анализируют исходную задачу, в ней выделяют подзадачи, строят иерархию таких подзадач. Затем следует составление алгоритмов (программ), начиная с основного алгоритма (программы), далее – вспомогательных алгоритмов (подпрограмм), последовательно углубляя уровни, до получения алгоритмов, состоящих из простых команд. [22]

Один из системных методов разработки алгоритмов - структурное программирование, которым называют методологию программирования, направленную на создание логически простых и понятных программ. Структурное программирование основано на предположении, что логичность и понятность программ облегчает разработку, доказательство правильности и последующее сопровождение программ, а также обеспечивает их надежность. [7, С. 258]

Характерные принципы структурного программирования представлены:

  • нисходящим программированием – способом разработки программ, при котором программирование ведется методом «сверху-вниз», от общего к деталям;
  • модульным программированием, при котором относительно независимые подзадачи программируются в виде отдельных программных модулей;
  • отказом от безусловных передач управления и ограниченным использованием глобальных переменных.

Кроме этого, практикуется использование еще двух основных принципов структурной методики алгоритмизации (структурного программирования):

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

— при построении сложных алгоритмов применяется метод последовательной детализации. [22]

Следованием называют линейную последовательность действий (рис. 1).

Блок N

Блок 2

Блок 1

Рисунок 1 – Следование [22]

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

Ветвление является алгоритмической альтернативой. Управление передается одному из блоков, что зависит от истинности или ложности условия, далее следует выход на общее продолжение (рис. 2).

Условие

да нет

Блок 2

Блок 1

Рисунок 2 – Ветвление [22]

Цикл повторяет некоторую группу действий по условию. Существует два типа цикла: с предусловием и с постусловием (рис. 3 и 4). [22]

Условие

нет

да

Блок

Условие

Блок

Рисунок 3 – Цикл с предусловием

Рисунок 4 – Цикл с постусловием

Сложный алгоритм составляют соединенные между собой базовые структуры, соединение может быть последовательным и вложенным. [22]

На этапе написания программы по разработанному алгоритму составляют программу на определенном языке программирования.

В узком смысле слово «программирование» является процессом разработки программ на определенном языке программирования. Разработка системного ПО и систем программирования называется системное программирование; разработка прикладных программ называется прикладное программирование. По этому принципу программисты делятся на системных и прикладных, по типу создаваемых ими программ. [7, с. 241]

Основные парадигмы программирования состоят из:

  • процедурного программирования (Паскаль, Бейсик, Фортран, Си, Ассемблеры);
  • логического программирования (Пролог);
  • функционального программирования (Лисп);
  • объектно-ориентированного программирования (Смолток, Си++, Делфи).

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

Процесс изучения и практического освоения программирования состоит из трех частей:

  • изучения методов построения вычислительных алгоритмов;
  • изучения языка программирования;
  • изучения и практического освоения определенной системы программирования.

Языки программирования состоят из двух групп:

  • машинно-ориентированных: Автокодов, Ассемблеров;
  • языков программирования высокого уровня (ЯПВУ).

Сегодня почти все программисты используют языки высокого уровня. Даже такие системные программные продукты, как трансляторы, операционные системы и пр., составлены на языках высокого уровня (обычно при этом пользуются языком Си). [7, С. 241]

Программы должны быть оформлены в соответствии с определенными требованиями. В настоящее время действует единая система программной документации (ЕСПД), устанавливающая правила разработки, оформления программ и программной документации. ЕСПД определяет и правила оформления блок-схем алгоритмов (ГОСТ 10.002-80 ЕСПД, ГОСТ 10.003-80 ЕСПД). [13, с. 17]

Отладка программы является процессом обнаружения и исправления ошибок. Программные ошибки представлены двумя классами: синтаксическими (синтаксис языка программирования) и алгоритмическими (логическими).

Выявление синтаксических ошибок происходит во время компилирования программы – они являются наиболее простыми с точки зрения исправления ошибки. Выявление алгоритмических ошибок программы гораздо сложнее: программа работает, но результат выдается неверный. Чтобы обнаружить такие ошибки пользуются тестированием программы. [5, с. 35]

Тестирование является процессом выполнения программ для выявления (обнаружения) ошибок. Существуют разные способы тестирования программ.

Тестирование программы как «черного ящика» является тестированием, при котором анализируются входные данные и результаты работы программы. Исчерпывается входное тестирование использованием всех возможных наборов входных данных.

Тестирование программы как «белого ящика» заключается в управлении логикой программы, позволяющей использование ее внутренней структуры. Оно исчерпывается тестированием всех маршрутов и управляющих структур программы.

Разумной и реальной стратегией тестирования является сочетание моделей «черного» и «белого ящиков». [9, с. 35]

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

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

Есть золотое правило программистов – оформлять свои программы в том виде, в каком бы они хотели видеть программы, написанные другими. Каждый конечный программный продукт необходимо документированно сопровождать в виде помощи (help), файлового текста (readme.txt). [5, с. 36]

1.2. Отладка программ

Рассмотрим подробнее процесс отладки программ. По общей методической схеме описания каждая конкретная система программирования (СП) состоит из следующих компонент: среды, режимов работы, системы команд, данных.

Среда системы программирования - это обстановка на экране (системная оболочка), в которой работает пользователь СП.

Определенной стандартизацией оболочек систем программирования обязаны появлению турбо-систем фирмы Borland. Такие среды имеют на экране две компоненты: окно редактора с текстом программы и меню команд, переключающее режимы работы системы. [7, с. 273]

Характерные режимы работы СП состоят из:

— режима редактирования текста программы;

— режима компиляции;

— режима исполнения;

— режима работы с файлами;

— режима помощи;

— режима отладки программы.

Режим редактирования обычно установлен автоматически при инициализации работы системы с использованием встроенного в систему текстового редактора. [7, с. 273]

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

Режим исполнения. В компилирующих системах в режиме исполнения выполняется полученная после трансляции программа в машинных командах. Интерпретатором непосредственно самим выполняется программа на ЯПВУ. Так, к примеру, работает Бейсик-система. Обычно программа исполняется по команде RUN.

Режим работы с файлами. В файлах на внешних носителях предусмотрено хранение системой текстов программ на исходном языке; программ, полученных в результате трансляции; исходных данных и конечных результатов. В файловом режиме выполнение традиционных операций: сохранения информации в файле, прочтения информации из файла в оперативную память, именования файла и пр. Этот режим включает и команду вывода содержимого окна редактора на печать, так как печать - это вывод информации в файл, связанный с принтером. [7, с. 274]

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

Режим отладки. Этот режим чаще всего реализован в развитых СП на профессиональных компьютерах. В режиме отладки имеется возможность производить трассировку, пошагового исполнения программ; прослеживания за изменением определенных величин; назначения остановки исполнения программ в определенных местах или при определенных условиях. Режимом отладки предоставляются программисту удобные средства для поиска алгоритмических ошибок в программах. [7, С. 274]

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

  1. Синтаксические ошибки, заключающиеся в неправильном употреблении синтаксических конструкций, к примеру употребление оператора цикла For без tо или Next.
  2. Семантические ошибки, заключающиеся в нарушении семантики какой-либо конструкции, к примеру передача функции параметров, не соответствующих ее аргументам.
  3. Логические ошибки, проявляющиеся в нарушении логики программ и приводящие к неверному результату. Это наиболее трудно обнаруживаемый тип ошибки, поскольку они, как правило, ошибки алгоритмов и их нужно тщательно анализировать и всесторонне тестировать. [18]

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

Каждая современная система программирования наделена специальным средством отладки программ — отладчиком (debugger), позволяющим в режиме интерпретации устанавливать контрольные точки, выполнять отдельные участки программы и просмотреть результаты работы операторов. [18]

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

Точки контрольного останова

Точка контрольного останова определяет оператор в программе, перед выполнением которого программа прерывает свою работу, и управление передается среде Delphi. Точка останова задается опцией View|Debug windows|Breakponts.

Окно точек останова состоит из списка всех установленных в проекте точек, перед выполнением которых приостанавливается работа программы и передается управление среде Delphi. [18]

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

FileName – определяет имя файла;

Line number – номер строки от начала файла (в момент появления окна оно содержит файл и строку с текстовым курсором);

Condition – можно указать условие останова в виде логического выражения (например, MyValue = Мах-Value-12);

Pass count – число проходов программы через контрольную точку без прерывания вычислений. [11, с. 600-601]

Окно наблюдения

Наблюдать за состоянием переменной или выражения можно в специальном окне, вызываемом опцией View|Debug windows|Watches.

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

Для добавления нового выражения нужно щелкнуть по окну правой кнопкой мыши и выбрать опцию New Watch. В строке Expression ввести выражение. Окном Repeat count определяется количество показываемых элементов массивов данных; окном Digits указывается количество значащих цифр для отображения вещественных данных; переключателем Enabled разрешается или запрещается вычисление выражения. Остальные элементы определяют вид представления значения.

Значения переменных можно также посмотреть во время останова программы, наведя курсор мыши на переменную в тексте кода. [11, С. 601-603]

Принудительное прерывание работы программы

Если программа запущена из среды Delphi, ее работа может быть прервана в любой момент с помощью клавиш Ctrl+F2, кнопки ESC, опцией Run|Program Pause или установкой точки контрольного останова в той части программы, которая выполняется в данный момент или будет выполнена.

Трассировка программы

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

Теперь программист может прослеживать работу программы по шагам посредством клавиш F7 и F8 или инструментальных кнопок. При нажатии клавиши F8 будут выполнены запрограммированные в текущей строке действия, и работа программы приостановится перед выполнением следующей строки текста программы. [11, с. 603]

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

Для установки/снятия точки контрольного останова нужно щелкнуть мышью по служебной зоне слева от нужной строки или установить в эту строку текстовый курсор и нажать клавишу F5. [11, с. 604]

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

После трассировки нужного фрагмента программы возможно продолжение нормальной ее работы нажатием клавиши F9. [19]

Действия в точках прерывания

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

В нижней части окна имеется панель Actions, которая и определяет действия для точки останова, указанной в верхней части окна:

· Break – останов перед выполнением помеченного оператора;

· Ignore subsequent exceptions – при установке переключателя игнорируются все возможные последующие исключения в текущем отладочном сеансе до очередной точки останова, в которой, возможно, это действие будет отменено;

· Handle subsequent exceptions – установка этого переключателя отменяет действие предыдущего переключателя и возобновляет обработку возможных исключений;

· Log message – возможно указание произвольного сообщения, связанного с точкой останова;

· Eval expression – возможно вычисление некоторого выражения и помещение его результата в это сообщение. [11, С. 604-606]

Группировка точек прерывания

В Delphi возможно объединить точки останова в группы. Для этого используется все то же окно: в строке Group указывается имя группы, к которой принадлежит точка, а в строках Enable group и Disable group соответственно разрешить или запретить действие всех точек останова, относящихся к соответствующей группе. [11, с. 606]

Вычисление выражений и изменение значений

С помощью окна Evaluate/Modify опции Run можно узнать значение любого выражения или установить в переменную другое значение. Это окно вызывается в режиме отладки после нажатия Ctrl+F7. [11, с. 606]

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

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

Ведение протокола работы программы

В ряде случаев бывает неудобно или невозможно пользование пошаговой отладкой программ. В таких ситуациях могут помочь контрольные точки, не прерывающие работу программы, а лишь помещающие некоторую информацию в специальный файл трассировки. Для реализации такой точки нужно раскрыть окно Run|Add Breakpoint|Source Breakpoint, убрать флажок в переключателе Break и написать сообщение в строке Log message. Можно также в строке Eval expression указать выражение, которое будет вычислено и вместе с сообщением помещено в протокол работы программы. Возможен просмотр этого протокола в любой момент (в том числе и после завершения прогона программы) с помощью опции View|Debug Windows|Event Log. [19]

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

1.3. Тестирование программ

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

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

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

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

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

Выводы по 1 главе

В главе кратко рассмотрены 8 этапов процесса проектирования и разработки программ. Для выявления и устранения программных ошибок производится отладка и тестирование программ. Данные процессы рассмотрены более подробно на примере среды Дельфи.

2. Процесс проектирования и разработки программы на практике, отладка и тестирование программы

2.1. Постановка задачи, ее алгоритмизация

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

Алгоритмизацию задачи проведем, используя схему структурного программирования «сверху-вниз». Нарисуем укрупненную блок-схему алгоритма (рис. 5). [17]

начало

Ввод массива А[3,3]

Аij>0

нет да

Определение количества K отрицательных чисел и миним. отрицат. числа MO

Определение суммы S и произведения P положительных чисел

Печать S и P

Печать К и МО

конец

Рисунок 5 – Укрупненная блок-схема [9]

По блок-схеме на рис. 5 определим блоки, используя принцип модульного программирования:

  1. Ввод массива А[3,3] – процедура VvodA;
  2. Определение минимального отрицательного (наибольшего по абсолютной величине) числа MO и числа отрицательных элементов массива kk;
  3. Определение суммы и произведения положительных элементов массива.

Представим теперь блок-схемы каждого блока, оформляемого в виде процедуры на рис. 6 - 8. [7]

j=1;

i=1;

начало

Ввод элемента аij

J<5

j=j+1;

да

i<5

i=i+1;

да

конец

Рисунок 6 – Блок-схема алгоритма ввода массива А [9]

начало

k=0; kk=0

i=1;

j=1;

Аi,j<0

да

kk=kk+1;

MО>Аij

k=1

нет да да

j=j+1;

MО=Аij

k=1; MO=Aij

да

j<=5

нет

i=i+1;

i<=5

да

нет

Вывод МО и kk

конец

Рисунок 7 – Блок-схема алгоритма нахождения минимального отрицательного элемента массива [9; 13]

начало

S=0; P=1

i=1;

j=1;

Аi,j>0

да

S=S+aij;

P=P*aij

нет

j=j+1;

да

j<=5

нет

i=i+1;

i<=5

да

нет

Вывод S и P

конец

Рисунок 8 – Блок-схема алгоритма нахождения суммы и произведения положительных элементов массива [7; 9]

Теперь приступим к программированию задачи на языке Delphi 7.

2.2. Составление программы

Программу составим на языке высокого уровня Delphi 7. Для простоты отладки программы возьмем массив 3х3, состоящий из 9 элементов. Программу назовем Primer.pas. В основной программе сначала вызывается процедура VvodA, вводящая элементы матрицы 3х3 по нажатию кнопки Ввод. Затем введенный массив печатается поэлементно. Если элемент массива отрицательный, определяется минимальное отрицательное число и количество отрицательных элементов массива.

Если элемент массива положительный – считается сумма и произведение положительных элементов массива.

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

unit Primer;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Memo1: TMemo;

Button1: TButton;

procedure VvodA(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

A: array[0..5,0..5] of integer;

i,j,k,k1,MO,m,l: Integer;

S,P: Integer;

str1: string; [1]

implementation

{$R *.dfm}

procedure TForm1.VvodA(Sender: TObject);

// ввод массива чисел

var

A: array[0..5,0..5] of integer;

i,j,k,k1,S,P: integer;

str1: string; [15; 16]

begin

k:=1;

for i:=1 to 3 do

for j:=1 to 3 do

begin

str1:=Memo1.Lines[k-1];

A[i,j]:=StrToInt(str1);

k:=k+1;

end; [4; 3; 2]

S:=0; P:=1;

k1:=0; l:=0;

for i:=1 to 3 do

for j:=1 to 3 do begin

if A[i,j]>=0 then begin

S:=S+A[i,j]; //подсчет суммы положительных элементов

P:=P*A[i,j]; //подсчет произведения положительных элементов

end

else begin //отрицательные элементы

if k1=1 then if MO>A[i,j] then MO:=A[i,j]

else

else begin k1:=1; MO:=A[i,j]; end;

str1:='MO='+IntToStr(MO);

ShowMessage(str1);

l:=l+1;

end;

end; [1; 2; 3]

str1:='Количество отрицательных элементов='+IntToStr(l);

ShowMessage(str1);

str1:='Минимальный отрицательный элемент='+IntToStr(MO);

ShowMessage(str1);

str1:='Сумма положительных элементов='+IntToStr(S);

ShowMessage(str1);

str1:='Произведение положитeльных элементов='+IntToStr(P);

ShowMessage(str1);

end; [10; 11; 12; 14]

END.

2.3. Отладка и тестирование программы

При отладке программы были установлены точки останова и окно наблюдения за переменными str1 и A[I,j], что облегчило отладку и позволило обнаружить ошибки в программе. Также для отладки программы была вставлена печать в разные части программы для того, чтобы обнаружить, какие блоки программы были выполнены.

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

1, 2, -3, 4, 5, -6, 7, 8, -9.

В конце программы печатается следующая информация:

  • Количество отрицательных элементов, подсчет количества производился в переменной l (рис. 9); [18, 19]
  • Минимальный отрицательный элемент, сохраненный в переменной МО (рис. 10);
  • Сумма положительных элементов S (рис. 11);
  • Произведение положительных элементов Р (рис. 12).

Рисунок 9 – Сообщение о количестве отрицательных элементов

Рисунок 10 – Результат выполнения программы Primer.pas с сообщением о минимальном отрицательном элементе

Рисунок 11 – Результат выполнения программы Primer.pas с сообщением о сумме положительных элементов

Проверим вручную правильность: 1+2+4+5+7+8 = 27. Результат совпадает.

Рисунок 12 – Результат выполнения программы Primer.pas с сообщением о произведении положительных элементов

1*2*4*5*7*8 = 2240. Результат также совпадает, следовательно, алгоритм и программа составлены правильно.

Второй набор чисел при тестировании программы:

-11, 22, -33, 44, 55, -66, 77, 88, -99. [21]

Результат выполнения программы для этого набора приведен на рис. 13-15. [10; 15; 16]

Рисунок 13 – Результат выполнения программы Primer.pas с сообщением о минимальном отрицательном элементе

Рисунок 14 – Результат выполнения программы Primer.pas с сообщением о сумме положительных элементов

22+44+55+77+88 = 286. Результат также совпадает. [18]

Рисунок 12 – Результат выполнения программы Primer.pas с сообщением о произведении положительных элементов [16; 19]

22+44+55+77+88 = 360 754 240. Результат также совпадает, что свидетельствует о правильной работе программы.

Вывод по 2 главе

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

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

ЗАКЛЮЧЕНИЕ

Проектирование и разработка программ состоит из следующих последовательных этапов:

1) постановки задачи;

2) проектирования программы;

3) построения модели;

4) разработки алгоритма;

5) написания программы;

6) отладки программы;

7) тестирования программы;

8) документирования.

Для выявления и устранения программных ошибок производится отладка и тестирование программ.

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

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Архангельский А.Я ﺍ. Delphi ﺍ 7. Справочное ﺍ пособие ﺍ. — М ﺍ.: Бином ﺍ-Прессﺍ, 2004 ﺍ. — 1024 ﺍ с.
  2. Библия для программиста в среде Delphi. Фленов М. 2012.
  3. Бобровский ﺍ С.И ﺍ. Delphi ﺍ 7. Учебный ﺍ курс ﺍ. - СПб. ﺍ: Питер ﺍ, 2004 ﺍ. — 736 ﺍ с.
  4. Иллюстрированный ﺍ самоучитель ﺍ по Delphi ﺍ 7. 2012.
  5. Кадырова Г.Р. Основы алгоритмизации и программирования: учебное пособие /Г.Р. Кадырова. – Ульяновск : УлГТУ, 2014. – 95 с.
  6. Кэнту ﺍ М. Delphi ﺍ 7 для профессионалов ﺍ. - Спб. ﺍ: Питер ﺍ, 2004 ﺍ. - 1101 ﺍ с.
  7. Методика ﺍ преподавания ﺍ информатики ﺍ: Учебное пособие ﺍ для ﺍ студ ﺍ. пед ﺍ. вузовﺍ/ М.Пﺍ. Лапчикﺍ, И.Гﺍ. Семакинﺍ, Е.Кﺍ. Хеннерﺍ; Под общей ред. М.П. Лапчика. — М. ﺍ: Издательский ﺍ центр ﺍ «Академия», 2008 ﺍ. — 624 с.
  8. Осипов Д.Л. Delphi. Программирование для Windows, OS X, iOS и Android. – СПб. ﺍ: БХВ- ﺍПетербург, 2014 ﺍ. – 464 с.
  9. Программирование и основы алгоритмизации: Для инженерных специальностей технических университетов и вузов. /А.Г. Аузяк, Ю.А. Богомолов, А.И. Маликов, Б.А. Старостин. - Казань: Изд-во КНИТУ- КАИ, 2013. - 153 с.
  10. Сухарев ﺍ М. ﺍВ. Основы ﺍ Delphi ﺍ профессиональный ﺍ подход ﺍ. - СПб. ﺍ: Наукаﺍ и техника ﺍ, 2004 ﺍ. — 600 ﺍ с.
  11. Фаронов ﺍ В. ﺍВ. Delphi ﺍ. Программирование ﺍ на языке ﺍ высокого ﺍ уровня ﺍ: учебник для вузов. В.В. Фаронов. – СПб. ﺍ: Питер ﺍ, 2004 ﺍ. – 640 с.
  12. Фаронов ﺍ В. ﺍВ. Turbo ﺍ Pascal ﺍ. Наиболее ﺍ полное ﺍ руководство ﺍ. – СП ﺍб ﺍ.: БХВﺍ-Петербург ﺍ, 2004 ﺍ. – 1056 с.
  13. Федоренко ﺍ Ю ﺍ. Алгоритмы ﺍ и программы ﺍ на Turbo ﺍ Pascal ﺍ. Учебный ﺍ курсﺍ. – СПб ﺍ.: Питер ﺍ, 2011. – 240 с.
  14. 100 компонентов общего назначения библиотеки Delphi. Архангельский А.Я. Bel&Chen Co, 2012.
  15. Delphi. Урок № ﺍ9. Создание ﺍ собственных ﺍ процедур ﺍ и функций ﺍ Delphi ﺍ. Учебник по Delphi 7. 2012.
  16. Использование процедурﺍ и функцийﺍ в Delphiﺍ. 28.06.2011. URL: https://habr.com/post/122929/ (Дата обращения: 28.06.2018).
  17. Лекции Интуит. Блок-схемы. Графическая реализация алгоритмов. 2018. URL: http://www.intuit.ru/studies/courses/19752/1301/lecture/25625 (Дата обращения: 28.06.2018).
  18. Отладка и тестирование программ. 2018. URL: http:ﺍ//www.taurion.ru/outlook/4/32 (Дата обращения: 29.06.2018).
  19. Отладкаﺍ программﺍ в средеﺍ Delphiﺍ. 01.06.2014. URL: https://studopedia.su/7_19701_otladka-programm-v-srede-Delphi.html (Дата обращения: 29.06.2018).
  20. Параметры функций, процедур. 2018. URL: http://ﺍfegorsk.ru/index.php/studentam/delphi/129-parametry-funktsij-protsedur (Дата обращения: 30.06.2018).
  21. Тестирование ﺍ программ ﺍ - процесс ﺍ обнаружения ﺍ ошибок ﺍ в программномﺍ продуктеﺍ. 06.07.2016. URL: http://fb.ru/article/255524/testirovanie-programm---protsess-obnarujeniya-oshibok-v-programmnom-produkte (Дата обращения: 01.07.2018).
  22. Технология структурного программирования. 2018. URL: http://3ys.ru/yazyki-i-sistemy-programmirovaniya/tekhnologiya-strukturnogo-programmirovaniya.html (Дата обращения: 30.06.2018).
  23. Учебник по информатике. URL: http://dssp.petrsu.ru/p/tutorial/zonna/3_ychebnik_9.htm (Дата обращения: 30.06.2018).

Приложение ﺍ

Таблица ﺍ 1 ﺍ - Условные ﺍ обозначения ﺍ элементов блок-схем ﺍ алгоритмов ﺍ

Наименование ﺍ ﺍ

0бозначение

Функции

Процесс ﺍ

Выполнение ﺍ операции ﺍ или ﺍ группы ﺍ операции ﺍ, в ﺍ результате ﺍ которых ﺍ изменяется ﺍ значение ﺍ, форма ﺍ представления ﺍ или ﺍ расположение ﺍ данных ﺍ.

Ввод ﺍ-вывод ﺍ

Преобразование ﺍ данных ﺍ в ﺍ форму ﺍ, пригодную ﺍ для ﺍ обработки ﺍ (ввод ﺍ) или ﺍ отображения ﺍ результатов ﺍ обработки ﺍ (вывод ﺍ).
 

Решение ﺍ

Выбор ﺍ направления ﺍ выполнения ﺍ алгоритма ﺍ в ﺍ зависимости ﺍ от ﺍ некоторых ﺍ переменных ﺍ условии ﺍ.

Предопределенныйﺍ процесс ﺍ

Использование ﺍ ранее ﺍ созданных ﺍ и ﺍ отдельно ﺍ написанных ﺍ программ ﺍ (подпрограмм ﺍ).

Документ ﺍ

Вывод ﺍ данных ﺍ на ﺍ бумажный ﺍ носитель ﺍ.

Магнитный ﺍ диск ﺍ

Ввод ﺍ-вывод ﺍ данных ﺍ, носителем ﺍ которых ﺍ служит ﺍ магнитный ﺍ диск ﺍ.

Пуск ﺍ-останов ﺍ
 

Начало ﺍ, конец ﺍ, прерывание ﺍ процесса ﺍ обработки ﺍ данных ﺍ.

Соединитель ﺍ
 

Указание ﺍ связи ﺍ между ﺍ прерванными ﺍ линиямиﺍ, соединяющими ﺍ блоки ﺍ.
 

Межстраничный ﺍ соединитель ﺍ

Указание ﺍ связи ﺍ между ﺍ прерванными ﺍ линиямиﺍ, соединяющими ﺍ блоки ﺍ, расположенные ﺍ на ﺍ разных ﺍ листах ﺍ.

Комментарий ﺍ

http://dssp.petrsu.ru/p/tutorial/zonna/images/bloksh10.JPG

Связь ﺍ между ﺍ элементом ﺍ схемы ﺍ и ﺍ пояснением.