Понятия эффективности и технологичности программного обеспечения.



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

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

1.машинно-зависимые (ориентированы на конкретный машинный язык; выполняют оптимизацию кодов на уровне машинных команд)

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


Модули и их свойства (сцепление модулей).

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

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

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

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

Сцепление модулей

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

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

2)сцепление по образцу – модули обмениваются данными, объединенными в структуры. Здесь характеристики хуже, чем в первом случае, так как уменьшается прозрачность между модулями.

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

Function min_max (a, b: integer; f: boolean ): integer;

begin

if (a>b) and (f) then min_max:=a

                          else min_max:=b end;

4) сцепление по общей области данных предполагает, что модули работают с общей областью данных. Этот тип является недопустимым, так как программы сложны для понимания. Ошибка одного модуля, приводящая к изменению общих данных, может проявиться при выполнении другого модуля. При ссылке к данным в общей области модули используют конкретные имена, что уменьшает гибкость разрабатываемого ПО. Например, функция max использует глобальный массив a, но сцеплена с основной программой по общей области. Подпрограммы “с памятью”, действие которых зависит от истории вызова используемого сцепления по общей области, что делает их работу в общем случае непредсказуемой. Этот вариант использует статические переменные C и C++.

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


Дата добавления: 2018-05-13; просмотров: 660; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!