Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
73
Добавлен:
25.03.2021
Размер:
147.39 Кб
Скачать

§1. Составление технического задания.

На этом этапе описание постановки задачи на естественном языке переводится на формальный язык (математики, логики и т.д.), объективность синтаксиса которого делает описание безусловно понятным и однозначно трактуемым. Такое представление обеспечивает однозначное понимание и приемлемость постановки задачи и ее решения как пользователем (заказчиком), так

иразработчиком программы.

Втехническом задании на формальном языке излагаются:

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

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

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

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

требования к среде функционирования (в том числе операционной среде ЭВМ) и аппаратному обеспечению (процессору, ПЗУ, ОЗУ и т.д.);

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

порядок разработки программы, а именно этапы и сроки разработки с назначением конкретных исполнителей;

порядок контроля и приемки работ.

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

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

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

Для каждого фрагмента составляется свое техническое задание.

п.1. Понятие алгоритма и свойства алгоритма.

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

Реализация алгоритмической модели на уровне программирования (кодирования) называется

алгоритмическим процессом.

Алгоритмическая модель и алгоритмический процесс характеризуются такими свойствами, как:

1.Дискретность.

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

2.Понятность и однозначность (детерминированность).

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

3.Результативность (конечность).

1

Алгоритм всегда должен выполняться за конечное число шагов (конечный период времени) и заканчиваться при этом выдачей результата. Если при каких-либо входных данных алгоритм не заканчивается (например зацикливается) или заканчивается без формирования выходных данных, то он считается нерезультативным. Отметим, что алгоритм результативен даже при получении неверного результата.

4.Адекватность и правильность.

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

5.Массовость.

Алгоритм должен быть применим к предполагаемому множеству входных данных.

6.Сложность и ресурсоемкость.

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

7.Затраты (стоимость).

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

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

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

п.2. Сложность алгоритма.

Сложность алгоритма – это порядок зависимости времени и памяти, необходимых для выполнения алгоритма, от его размерности. Соответственно есть временная и пространственная сложности, которые обозначаются соответственно T(n) и O(n), где n – размерность задачи.

Как видно из определения, сложность сама по себе не позволяет определить ни время, ни объем памяти, которые потребуются при работе алгоритма, а позволяет только лишь оценить увеличение этих показателей по мере роста размерности. Например, если временная сложность составляет T(n2), то можно заключить, что при повышении размерности (скажем, размера массива) в 5 раз время выполнения алгоритма возрастет в 52, то есть 25 раз, но при этом нельзя сделать вывод о том, какое время алгоритм будет работать.

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

Например, если во время работы алгоритма выполняется 4*n2+5*n+6 элементарных действий, где n – размерность задачи, то сложность алгоритма равна T(n2). Следует обратить внимание, что коэффициент перед n2 никоим образом в сложности не учитывается, то есть алгоритмы одной и той же сложности могут значительно отличаться по времени выполнения.

Если количество элементарных операций в алгоритме постоянно и не зависит от размерности задачи, то сложность составляет T(1).

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

сэтим фактом различают:

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

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

среднюю сложность в среднем.

На практике чаще всего встречаются такие сложности, как:

Сложность T(log(n)).

2

Такая сложность возникает тогда, когда на каждом шаге алгоритма выполняется постоянное количество операций и задача размерности «n» сводится к аналогичной задаче размерности «n/k», где k – целое положительное постоянное число.

Сложность T(n).

Эта сложность характерна для типичных итерационных процессов, в которых на каждом шаге алгоритма задача размерности «n» сводится к задаче размерности «n-1» и на каждом шаге выполняется постоянное количество «C» операций, не зависящее от n.

Сложность T(n*log(n)).

Такая сложность получается, когда на каждом шаге алгоритма выполняется количество операций «C*n», прямо пропорциональное размерности «n» задачи, и задача размерности «n» сводится к аналогичной задаче размерности «n/k», где k – целое положительное постоянное число.

Сложность T(n2).

Эта сложность формируется при наличии двух вложенных циклов, количество итераций в которых прямо пропорционально размерности «n» задачи, то есть на каждом шаге задача размерности «n» сводится к аналогичной задаче размерности «n-1» и выполняется количество операций «C*n», прямо пропорциональное размерности «n» задачи.

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

(n-1) + (n-2) + ... + 1 = n*(n-1)/2 = (n2-n)/2,

то есть временная сложность составляет T(n2). Если ввести признак отсутствия перестановок на проходе (то есть формирования отсортированного массива с опережением) и прекращать выполнение алгоритма при появлении такого признака, то временную сложность можно свести к T(n).

Теперь продемонстрируем, какого еще более впечатляющего выигрыша по сложности можно добиться за счет выбора оптимального алгоритма решения поставленной задачи. Допустим, что надо вычислить остаток от деления «mn» на «k», где m, n и k – три целых положительных числа, то есть p = mn mod k. Тривиальный алгоритм выглядит таким образом:

Рис. 52. Тривиальный алгоритм вычисления p = mk mod n.

Сложность этого алгоритма составляет T(n).

Вместе с тем можно предложить другой алгоритм решения поставленной задачи:

3

Рис. 53. Оптимальный алгоритм вычисления p = mk mod n.

Сложность этого алгоритма составляет T(log(n)). Таким образом, за счет выбора алгоритма удается добиться экспоненциального (!) выигрыша в сложности.

§3. Кодирование.

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

§4. Тестирование и отладка.

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

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

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

4

Процесс тестирования и отладки программ имеет итерационный характер и считается одним из наиболее трудоемких этапов процесса разработки программ. По различным оценкам он может составлять от 30 до 50% общего времени разработки продукта в зависимости от его сложности.

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

§5. Документирование.

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

§6. Доработка и сопровождение программы в процессе эксплуатации.

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

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

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

§7. Пример поэтапной разработки программного продукта.

Примером успешного применения описанной выше процедуры является разработка программного обеспечения КОПРАС версии 6.4, которая проводилась в качестве НИР и включала

всебя следующие этапы:

1.Подбор информации по существующим аналогам.

2.Составление технического задания на разработку САПР САУ «КОПРАС for Windows v.6.4».

3.Согласование и утверждение технического задания на доработку САПР САУ «КОПРАС for Windows v.6.4».

4.Поиск литературы.

5.Изучение и анализ литературы.

6.Разработка алгоритмов идентификации блоков и интерфейса обслуживания тестовых схем.

7.Составление программ пакета.

8.Ввод программ пакета.

9.Отладка программ пакета и тестовая проверка.

10.Доработка алгоритмов функционирования блоков для САПР САУ «КОПРАС for Windows v.6.4».

11.Комплексная отладка пакета.

12.Составление и оформление текстовой документации по НИР.

13.Разработка и оформление технико-экономического обоснования НИР.

14.Анализ НИР на соответствие требованиям охраны труда и техники безопасности.

15.Утверждение отчета по НИР.

5

Соседние файлы в папке АОПИ. Лекции