Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1438

.pdf
Скачиваний:
2
Добавлен:
30.04.2022
Размер:
1.16 Mб
Скачать

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

Таблица 12

Этапы подхода Мартина

Используемые диаграммы

 

 

 

1.

Стратегия планирования

Диаграммы декомпозиции

 

 

 

2.

Анализ бизнес-процессов

Диаграммы «сущность – связь»

 

 

Матрицы информационного пла-

 

 

нирования

 

 

Нормализованные модели данных

3.

Логическое проектирова-

Диаграммы зависимости данных

ние системы

Диаграммы декомпозиции

 

 

 

 

Матрицы «сущность–связь»

4.

Физическое проектиро-

Диаграммы структуры данных

вание и реализация

Диаграммы декомпозиции

 

 

 

 

Диаграммы деятельности

 

 

Схемы экранов/отчетов

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

123

3.На этапе логического проектирования IE становится аналогична SE для разработки ПО. Базой для проектирования являются процессы, разработанные на этапе анализа. Используя методики нисходящей функциональной декомпозиции, проектируются спецификации обработки в процессах и их логические структуры данных. При этом используются диаграммы структуры данных (диалект ERD), определяющие типы сущностей, их атрибуты и связи, диаграммы декомпозиции и диаграммы деятельности (вид миниспецификации), детализирующие логику процессов. Для согласования требований пользователя создаются прототипы пользовательских интерфейсов

спомощью схем экранов/отчетов.

4.На этапе физического проектирования и реализации производится преобразование логической модели ПС в физическую и ее реализация.

Ниже в табл. 13 [6] приведены частоты использования методологий при разработке ПС.

Таблица 13

Название

Частота ис-

Порядок по-

Тип систем

методологии

пользования

строения

 

 

 

 

ИС (информаци-

 

 

Процедурно-

онные системы),

Йодан

36.5%

СРВ (системы

ориентированный

 

 

реального време-

 

 

 

 

 

 

ни)

Гейн-

20.2%

Процедурно-

ИС, СРВ

Сарсон

ориентированный

 

 

Джексон

7.7%

Ориентация на

ИС

данные

 

 

 

Варнье-Орр

5.8%

Ориентация на

ИС

данные

 

 

 

Мартин

22.1%

Ориентация на

ИС

данные

 

 

 

SADT

3.3%

Процессы, дан-

ИС

ные

 

 

 

124

Контрольные вопросы

1.Что понимается под CASE?

2.Каковы преимущества CASE?

3.Каковы средства структурного системного анализа?

4.Какие техники используются в CASE?

5.Что представляют из себя DFD?

6.Что такое спецификация процесса?

7.Что записывается в словаре данных?

8.Для чего используются STD?

9.Что отражается в ERD?

10.Для чего составляются диаграммы атрибутов?

11.В чем заключается SADT?

12.Какие элементы используются в структурных картах?

6.ЭТАП КОДИРОВАНИЯ

6.1. Стиль программирования, эффективность программ

Под стилем программирования понимается набор приемов и методов, применяемых для получения правильных, эффективных, удобных и легко читаемых программ [1, 3, 8, 18].

При разработке программ должен использоваться так называемый «KISS» принцип (Keep It Simple, Stupid).

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

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

Для уменьшения сложности используются структурное проектирование и кодирование [8] – проектирование сверху

125

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

Существует теорема о структурировании [7, 8], доказательство которой туманно: «любую правильную программу можно написать с использованием только трех структур:

последовательность двух и более операторов; выбор одного из двух вариантов; повторение, пока выполняется условие.

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

Рис. 22. Дерево целей

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

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

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

126

6.2. Комментарии

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

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

назначение программы; указание по вызову программы и ее использования;

cписок и назначение основных переменных и массивов; указания по обмену с внешними устройствами и файла-

ми;

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

ссылки на литературные источники, в которых содержится их описание;

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

cведения об авторах, дата написания или последней версии программы.

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

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

127

5 позициям. Последний уровень не должен выходить за рамки экрана.

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

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

Идентификаторы формируются по следующим прави-

лам:

осмысленность (имя напоминает соответствующую переменную в исходной программе);

включение максимальной информации о данном объек-

те;

исключение в аббревиатуре гласных из слова; использование префиксов или постфиксов.

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

«c» - тип char; «h» - тип shortint; «i» - тип integer;

«x», «y» - обозначение координат;

«b» - тип Boolean; «w» - тип word; «l» - тип longint;

«dw» - тип double word; «fn» - function;

«s» - тип string;

«sz» - тип string, заканчивающийся символом конца строки «\0»;

«p» - тип указателя.

128

Следует избегать выбора подобных по написанию имен: AXIO (только буквы) и АХ10(буквы и цифры).

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

В одной строке обычно располагается 1 оператор. Принято упорядочивать списки: последовательность

элементов должна иметь определенную логику.

Правильно оформленная программа должна быть со-

ставлена с учетом следующих нормативов:

 

размер модуля

10-15 непустых строк,

размер имен

 

5-10 символов,

 

комментарии

 

15-25 % от размеров модуля,

отступы

 

24-48 %,

 

пустые строки

15-30 %,

 

длина строки

 

15-25 символов,

 

пробелы в строке

4-10,

 

поименованные константы 15-25 %.

 

Пример комментирования функции:

 

{ Вычисление тестовой функции F=x*x*x/(1+x+x*x).

}

{ Параметры:

x - аргумент функции.

}

{ Возвращаемые значения: F - вычисленная функция.

}

{ Используемые процедуры и функции: нет.

}

{ Пример расчета функции в точке 0.1: Fx01:=F(0.1);

}

{ Автор: Подрезов А.С., 12.05.98г.

}

Function F(x: Real) : Real;

 

Begin

 

 

 

F:= sqr(x)*x/(1+x+sqr(x));

 

end;

 

 

 

129

6.3. Модульное программирование

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

Принципы модульного программирования:

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

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

Для обеспечения межмодульной независимости требу-

ются:

независимость модуля от источника входных данных; независимость модуля от места назначения выходных

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

локализация объектов внутри исполняемого модуля; определение для каждого модуля алгоритма решения

задачи, набора и области допустимых входных и выходных значений.

6.4. Структурное кодирование

Структурное кодирование - это метод написания хоро-

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

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

130

мого верхнего уровня (главная программа). Это позволяет проводить тестирование параллельно с кодированием модулей.

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

6.5. Защитное программирование

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

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

2). Немедленное обнаружение ошибок. Средства обна-

ружения ошибки по возможности размещаются ближе к источнику ошибки.

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

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

131

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

Рассмотрим пример [11] использования в Turbo Pascal функции val для проверки вводимой информации. Ниже представлен фрагмент программы для ввода с клавиатуры числа из

интервала [0,2].

 

... var str: string;

{ строка вводимых символов }

n: real;

{ введенное число}

сode: integer;

{ код преобразования строки в число}

..........

 

{ Повторение ввода до тех пор, пока не введено число из интервала [0; 2]}

repeat

writeln('Введите число из интервала [0,2]');

readln(str);

{чтение символов с клавиатуры }

val(str,n,code);

{преобразование строки в число}

until (code=0) and (n<=2) and (n>=0); ..........

6.6. Эффективность программ

Обычно программа разрабатывается сначала наилучшим образом, затем, если она будет многократно использоваться, то ставится вопрос об эффективности программы [3].

Участок программы, поглощающий до 90 % времени выполнения, называется критической областью [18]. Обычно объем этой области не превышает 5-10 % всего программного кода. Основная задача повышения эффективности программ - поиск критической области и ее оптимизация.

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

Выделяют оптимизацию [7, 18] времени выполнения и ресурсов (памяти и т.п.).

132