Нисходящая и восходящая разработка ПО
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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

• восходящий;

• нисходящий; 

• расширяющегося ядра.

                                    Восходящая разработка ПО

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

Подход имеет следующие недостатки:

• увеличение вероятности несогласованности компонентов вследствие неполноты спецификаций;

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

                            Нисходящий подход к разработке ПО

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

Для определения последовательности проектирования и реализации компонентов в нисходящем подходе применяют методы :

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

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

Комбинированный.

Комбинированный метод учитывает следующие факторы, влияющие на последовательность разработки:

достижимость модуля – наличие всех модулей в цепочке вызова данного модуля;

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

готовность вспомогательных модулей – вспомогательные модули должны создаваться раньше обрабатывающих

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

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

 

Преимущества нисходящего подхода:

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

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

•   возможность нисходящего тестирования и комплексной отладки.

 

68 Модульное программирование. Модули и их свойства. Сцепление модулей. Связность модулей.

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

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

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

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

                                     Модули и их свойства

Термин «модуль» используется в двух смыслах. Первоначально – это подпрограммы (они компилировались отдельно). В настоящее время - это набор программных ресурсов (констант, переменных, описаний типов, классов и подпрограмм) компилируемый автономно.

   Чем выше степень независимости модулей, тем:

•   легче разобраться в модуле, тестировать, отлаживать и модифицировать его;

•   меньше «волновой» эффект - новые ошибки при исправлении старых

•   проще организовать разработку ПО группой программистов.

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

   Степень независимости модулей (как подпрограмм, так и библиотек) оценивают двумя критериями: сцеплением и связностью.

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

Различают пять типов сцепления модулей:

•   по данным - модули обмениваются только скалярными данными ;

  по образцу - модули обмениваются структурами данных;

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

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

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

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

Так, если использовано сцепление по данным и сцепление по управлению, то определяющим считают сцепление по управлению

   Связность – степень взаимосвязи элементов, реализуемых одним модулем.

   Размещение сильно связанных элементов в одном модуле уменьшает межмодульные связи и взаимное влияние модулей.

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

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

Различают следующие виды связности (в порядке убывания уровня):

функциональную - все объекты модуля предназначены для выполнения одной функции ;

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

• информационно - связанными считают функции, обрабатывающие одни и те же данные ;

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

• временную - функций подразумевает, что эти функции выполняются параллельно или в течение некоторого периода времени;

логическую - объединении данных или функций в одну логическую группу;

• случайную - если связь между элементами мала или отсутствует.

 

 

           69 Структурное программирование. Стиль оформления программы. Правила именования объектов программы. Правила оформления модулей.

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

   Слово «структурное» в данном названии подчеркивает тот факт, что при программировании использованы только перечисленные конструкции (структуры). Отсюда и понятие «программирование без go to».

   Способы описания алгоритмов.

                               Стиль оформления программы

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

   Хороший стиль оформления программы включает:

•   правила именования объектов программы (переменных, функций, типов, и т.п.);

•   правила оформления модулей;

стиль оформления текстов модулей.

                                  Правила именования объектов программы

Имя объекта должно соответствовать его содержанию. Например: Maxltem - максимальный элемент.

   Если позволяет язык программирования, можно использовать символ «_» для визуального разделения имен, состоящих из нескольких слов Max_ltem, Next_Item.

   Необходимо избегать близких по написанию имен, например: Index и InDec.

                                                  Правила оформления модулей

 Каждый модуль должен предваряться комментарием, который, содержит:
 - название модуля;
 - краткое описание его назначения;
 - краткое описание входных и выходных параметров;
 - краткое описание алгоритма (метода) и ограничений;
 - ФИО автора программы, идентифицирующую информацию (номер версии и/или дату последней корректировки). Например:

{*****************************************************}

{* Функция: Length_Path(n:word; L: array of real):real *}

{* Цель: определение суммарной длины отрезков  *}

{* Исходные данные:  *}

{* L - массив длин отрезков (в метрах) *}

{* Результат: длина (в метрах) *}

{* Вызываемые модули: нет   *}

{* Описание алгоритма: *}

{*    отрезки суммируются методом накопления, n > О     *}

{* Дата: 25.12.2001 Версия 1.01.          '          *}

{* Автор: Иванов И.И. *}

{* Исправления: нет  *}

{*********************************}

                    Стиль оформления текстов модулей.

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

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

   Комментарии должны содержать цели выполнения тех или иных действий и некоторую дополнительную (неочевидную) информацию.

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

 

 






Дата: 2019-07-25, просмотров: 234.