Процесс посредством которого проверяется правильность программы

Глава 1. Основные понятия программирования

§1.1. Этапы разработки программного обеспечения

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

Для выполнения задачи создания и эксплуатации программного обеспечения ее разбивают на определенные этапы:

  1. Постановка задачи.
  2. Составление алгоритма.
  3. Составление и ввод программы.
  4. Отладка и тестирование программы.
  5. Сопровождение программного продукта.

Постановка задачи заканчивается созданием технического задания, а затем и внешней спецификации программы, которая включает в себя:

  1. Описание исходных данных и результатов (виды, представление, точность, ограничения и т.п.).
  2. Описание задачи, реализуемой программой.
  3. Способ обращения к программе.
  4. Описание возможных особых и аварийных ситуаций и ошибок пользователя.

56 Программирование и тестирование

Изучению одного из языков программирования высокого уровня и посвящается данный курс.

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

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

Отладка – процесс исправления ошибок в программе. Так, при отладке исправляются синтаксические ошибки, алгоритмические, ошибки, обнаруженные при тестировании и другие.

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

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

Возможно и другое деление на этапы [1] с приблизительным делением по времени реализации, как указано на рис. 1.1:

  1. Анализ требований.
  2. Определение спецификаций.
  3. Проектирование.
  4. Кодирование.
  5. Автономное тестирование.
  6. Комплексное тестирование.

Пишем первый unit тест


Рис. 1.1. Временные затраты на реализацию этапов цикла разработки программного обеспечения (за исключением этапа эксплуатации и сопровождения) [1]

  1. Возникновение и исследование идеи
  2. Управление
  3. Анализ требований
  4. Проектирование
  5. Программирование
  6. Тестирование и отладка
  7. Ввод в действие
  8. Эксплуатация и сопровождение
  9. Завершение эксплуатации
  • Основные процессы: приобретение, поставка, разработка, эксплуатация, сопровождение.
  • Вспомогательные процессы: документирование, управление конфигурацией, обеспечение качества, верификация, аттестация, совместная оценка, аудит, разрешение проблем.
  • Организационные процессы: управление, создание инфраструктуры, усовершенствование, обучение.

§1.2. Основные сведения об алгоритмах

Понятие алгоритма

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

  • Анализ алгоритмов. Предмет этой области состоит в том, чтобы для заданного алгоритма определить рабочие характеристики. Например, часто требуется, чтобы алгоритм был быстрым.
  • Теория алгоритмов. К этой области относятся вопросы существования или отсутствия эффективных алгоритмов вычисления определенных величин.
  • Построение алгоритмов. В этой области рассматриваются стандартные приемы и методы, используемые при создании алгоритмов.

Свойства алгоритма

  1. Конечность (результативность,финитность). Свойство так определять процесс преобразования исходных данных, чтобы он через конечное число шагов для любых допустимых исходных данных приводил к искомому результату. Процедуру, обладающую всеми характеристиками алгоритма, за исключением конечности, можно назвать вычислительным методом.
  2. Определенность (детерминированность). Предполагает такое составление алгоритма, которое не допускает различных толкований или искажения результата. При словесном описании алгоритмов оно дается на обычном разговорном языке, поэтому не исключена возможность неточного понимания предписания, например, человеком. Чтобы преодолеть эту трудность, для описания алгоритмов разработаны формально определенные языки программирования, в которых каждое утверждение имеет абсолютно точный смысл.
  3. Ввод (массовость, наличие входных данных). Определяет возможность использования любых исходных данных из некоторого определенного множества для однотипных задач. Так, правило умножения столбиком является алгоритмом, т.к. оно используется для любых чисел (как целых, так и вещественных или дробных), но таблица умножения — не алгоритм. Это свойство подразумевает в программе наличие блока ввода, но в некоторых случаях число входных данных может быть равно нулю [4].
  4. Вывод (наличие выходных данных). Алгоритм имеет одно или несколько выходных данных, имеющих определенную связь с входными данными. Здесь подразумевается наличие в программе блока вывода, иначе выполнение программы становится бессмысленным.
  5. Эффективность. Алгоритм считается эффективным, если его операторы достаточно просты для того, чтобы их можно было точно выполнить в течение конечного промежутка времени.
Читайте также:
Структура программы на pascal

Иногда приводят и дополнительные свойства алгоритмов, например:

Направленность. Означает наличие способа однозначного перехода от одного действия к другому.

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

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

Формы записи алгоритмов

  1. словесная (текстуальная) запись алгоритма;
  2. описание на алгоритмическом языке;
  3. структурная схема (графическая схема).

Пример. Вычисление . Вычисление производится по итерационной формуле

При последовательных приближениях необходимо задавать точность, с которой подсчитывается выходная величина. Обозначим ее как ε. За начальное приближение примем само значение а.

Шаг 1. Определим начальные значения а и ε.

Шаг 2. Выберем начальное приближение хп равным а.

Шаг 3. Вычислим следующее приближение хп+1 по формуле

Шаг 4. Если , то хп+1 – искомый результат, и алгоритм окончен.

Шаг 5. Положим хп = хп+1 и перейдем к шагу 3.
Количество шагов для этой задачи может быть и другим, например, если в шаге 4 записать «…, то перейти к шагу 6». И далее

Шаг 6. Вывести значение хп+1.

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

  1. операторный способ;
  2. с использованием диаграммы Нэсси-Шнейдермана;
  3. с использованием Р-схемы;
  4. с помощью псевдокода.

Блок-схемы алгоритмов

В настоящее время в вычислительной технике для записи алгоритмов используется «ГОСТ 19.701-90. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения». Он входит в группу стандартов единой системы программной документации (ЕСПД) [6]. Этот стандарт введен взамен «ГОСТ 19.002-80. Схемы алгоритмов и программ. Правила выполнения. ГОСТ 19.003-80.

Схемы алгоритмов и программ. Обозначения условные графические» [7,8]. Но стандарт от 1990 года не совсем полный, в частности, там отсутствуют размеры и отношения сторон блоков, изменены название и трактовка некоторых из них. Поэтому совместно с ГОСТ 19.701-90 рекомендуется использовать и ГОСТ 19.002-80, ГОСТ 19.003-80.

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

2.2. Схема программы.

2.2.1. Схемы программ отображают последовательность операций в программе.

2.2.2. Схема программы состоит из:

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

2) линейных символов, указывающих поток управления;

3) специальных символов, используемых для облегчения написания и чтения схемы.

Продолжение табл. 1.1.

Продолжение табл. 1.1.

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

Окончание табл. 1.1.

1 2 3
Терминатор. Символ отображает выход во внешнюю среду и вход из внешней среды (начало или конец схемы программы, внешнее использование и источник или пункт назначения данных). Пуск – останов. Начало, конец, прерывание процесса обработки данных или выполнения программы.
Соединитель. Символ отображает выход в часть схемы и вход из другой части этой схемы и используется для обрыва линии и продолжения ее в другом месте. Соответствующие символы-соединители должны содержать одно и то же уникальное обозначение. Соединитель. Указание связи между прерванными линиями потока, связывающими символами.
Комментарий. Символ используют для добавления описательных комментариев или пояснительных надписей в целях объяснения или примечаний. Комментарий. Связь между элементом схемы и пояснением.
Читайте также:
Понятие компьютерный вирус включает в себя такие виды программ как троянский конь и сетевой червь

Расстояния между параллельными линиями потока должно быть не менее 3 мм, между остальными символами схемы — не менее 5 мм.

Размер a должен выбираться из ряда 10, 15, 20 мм. Допускается увеличивать размер a на число, кратное 5. Размер b равен 1,5a.

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

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

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

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

Рис. 1.3. Возможные варианты отображения блока решения

Здесь Yi — условие i-го исхода, 011E1, 016A3, 005B5, 015E4 – адреса исходов.

Рис. 1.4. Пример использования символов границы цикла.

На рис. 1.4 приводится фрагмент алгоритма с введенным в ГОСТ 19.701-90 символом «Граница цикла».

Рис. 1.5. Пример блок-схемы алгоритма вычисления кубического корня с блоком «решение»

Рис. 1.6. Пример блок-схемы алгоритма вычисления кубического корня с блоками границы цикла

На рис. 1.5 и 1.6 изображены примеры блок-схем одного и того же алгоритма, но с использованием разных символов.

Источник: dereksiz.org

Нисходящее тестирование

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

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

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

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

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

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

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

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

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

Читайте также:
Не работает программа навител

Дата добавления: 2015-07-08 ; просмотров: 105 | Нарушение авторских прав

| следующая страница ==>
Структурное программирование | Правила программирования

mybiblioteka.su — 2015-2023 год. (0.014 сек.)

Источник: mybiblioteka.su

Большая Энциклопедия Нефти и Газа

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

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

Ожидаемым результатом является субъективная убежденность участников эксперимента в том, что их логическая гипотеза соответствует результату эксперимента. Такой эксперимент может быть проведен в форме беседы, коллективного обсуждения на занятиях или в письменном виде. Успешный эксперимент заканчивается субъективным убеждением участников эксперимента в том, что их гипотеза соответствует результату. Заключение может быть неправильным в том случае, когда либо принимается ложное суждение, либо отклоняется верная гипотеза. Заключение может быть правильным, но основанным на ошибочных рассуждениях. Известно, что человеку свойственно ошибаться. [34]

Приведенная последовательность рассуждений представляет собой доказательство правильности программы . Оно показывает, что программа при своем завершении всякий раз будет выдавать правильный результат. Чтобы программа завершилась, нужно каждый раз увеличивать у на 1 до тех пор, пока новое повторение цикла окажется невозможным. [35]

Печать исходного текста полезна при проверке правильности программы . [36]

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

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

Существуют два принципиально отличных способа убедиться в правильности программы : теоретическое доказательство правильности и экспериментальная проверка, получившая название тестирования. Теоретические методы доказательства правильности достаточно сложны и пока недоступны рядовому программисту. Кроме того, методы теоретического доказательства разработаны для сравнительно простых программных модулей. Практическое применение теоретические доказательства могут иметь при разработке типовых программных средств, при разработке методики программирования. Надо отметить, что доказательство правильности существенно упрощается при применении для построения программных текстов типовых управляющих конструкций. При разработке конкретных программ, особенно при их массовом производстве, наиболее эффективным методом проверки правильности программ оказывается их тестирование. [39]

Из других-средств, облегчающих составление и проверку правильности программ , пока отметим только необходимость предварительной записи алгоритма в другой, более наглядной форме, чем программа, даже снабженная примечаниями, — например, в виде блок-схемы или пошаговой записи. Малоопытные программисты часто пренебрегают этим этапом и, как правило, бывают наказаны. В лучшем случае отладка программы сильно затягивается, в худшем — ее вообще не удается довести до конца. При наличии наглядно записанного алгоритма упрощается и составление примечаний — они могут ссылаться на те или иные действия алгоритма и. [40]

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

Отношение идентификации в этом случае представляется критерием правильности программы — предикатом, истинность которого означает, что программа правильна. Стратегия тестирования S определяет критерий успеха тестирования — предикат, истинность которого означает, что тестирование успешно. [42]

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

Формальные системы используются при попытках доказательства эквивалентности и правильности программ . Работа по доказательству эквивалентности программ мотивируется перспективой глобальной оптимизации. Если бы существовал алгоритм, определяющий эквивалентность двух различных программ, можно было бы использовать более быструю программу взамен медленной. [44]

Тестирование — это процесс, посредством которого проверяется правильность программы . Эта деятельность носит позитивный характер, ее цель — показать, что программа правильна и действительно работает в соответствии с проектными спецификациями. [45]

Источник: www.ngpedia.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru