- •Предисловие
- •Введение
- •1. ПРОЕКТИРОВАНИЕ СИСТЕМ УПРАВЛЕНИЯ. ПОНЯТИЯ И СТРУКТУРА ПРОЕКТА
- •2. ПРОЕКТНАЯ ДОКУМЕНТАЦИЯ
- •2.1. Комплекс стандартов и руководящих документов на автоматизированные системы
- •2.2. Требования к содержанию документов по общесистемным решениям
- •3.1. Системный подход
- •4.1. Организация процесса проектирования автоматизированных систем
- •4.3. Определение требований к системе управления
- •4.5. Структурное проектирование
- •5.1. Модель проектирования комплекса технических средств
- •5.2. Требования к проектированию комплекса технических средств
- •6.1. Типовые логические структуры проектирования программного обеспечения
- •6.3. Модель жизненного цикла разработки программного обеспечения
- •6.4. Мифологическая модель разработки структуры баз данных
- •6.5. Классификация архитектур проектирования программного обеспечения
- •6.6. Требования к разработке хранилищ данных
- •6.7. Технология программирования OLAP для поддержки принятия решений в системах управления
- •6.8. Стратегия тестирования программного обеспечения
- •7. ПРОЕКТИРОВАНИЕ АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ ТЕХНОЛОГИЧЕСКИМИ ПРОЦЕССАМИ
- •7.1. Основные понятия автоматизированных систем управления технологическими процессами
- •7.3. Проектирование автоматизированных систем управления технологическими процессами
- •7.4. Определение надежности автоматизированных систем управления технологическими процессами
- •7.5. Аппаратные средства автоматизированных систем управления технологическими процессами
- •7.7. Пример проектирования автоматизированной системы управления технологическим процессом
- •8.1. Методология управления производством
- •8.2. Проектирование автоматизированных систем управления производством
- •8.3. Сравнение отечественных и западных систем управления производством
- •8.4. Выбор АСУП стандарта MRPII/ERP
- •9. АВТОМАТИЗАЦИЯ ПРОЦЕССОВ ПРОЕКТИРОВАНИЯ СИСТЕМ УПРАВЛЕНИЯ
- •9.1. Использование CASE-технологий
- •9.2. Проектирование с использование SCADA-технологий
- •9.3. Применение методологии CALS при проектировании систем
- •10.1. Анализ данных тестовых испытаний
- •10.2. Процедуры тестовых испытаний
- •10.3. Организация хранения тестовых данных испытаний
- •10.4. Подготовка документации по вводу систем управления в эксплуатацию
- •Заключение
6.1. Типовые логические структуры проектирования программного обеспечения
Логит программы (логическое проектирование)
Логическое программирование должно точно отражать решение некоторой прикладной задачи и быть хорошо сформулировано. Неце лесообразно пытаться одновременно решать несколько задач. В про цессе решения задач следует избегать чрезмерного ветвления реше ний. Логика программы базируется на структурах обрабатываемых данных, которые описываются при помощи стандартных типовых логических конструкций (последовательной, параллельной, ветвле ния, циклической и вложенной). Типовые логические конструкции полностью соответствуют типовым структурам данных и лежат в основе определения общих правил проектирования логики про граммы:
-определяется управляющий файл;
-любая запись читается сразу по завершении обработки предыдущей записи;
-логические конструкции должны как можно полнее соот ветствовать структуре обрабатываемых данных;
-в конструкциях цикла необходимо проверять выполнение условия, которое можно было бы легко модифицировать при изме нении структуры обрабатываемого файла.
Одним из самых распространенных методов спецификации логики программы является метод использования блок-схем.
Блок-схема (рис. 6.2) наглядно представляет логику программы
сиспользованием четырех типовых подструктур данных. В программе выделяются модули - подпрограммы, реализующие отдельные функции.
Логический модуль представляет собой “черный ящик”, у кото рого имеется только один вход и один выход. Принцип модульности дает возможность определить достаточно компактные логические функции и впоследствии описать их при помощи кодирования (языков программирования).
Логический модуль, как правило, обрабатывает отдельную подструктуру данных в файле или выполняет некоторую общую функцию. Программа образуется совокупностью модулей, которые
могут быть физически реализованы в виде самостоятельно компили руемых компонентов. Последние, в свою очередь, могут состоять из внутренних модулей.
1) |
2) |
Рис. 6.2. Типовые подструктуры описания данных:
1)последовательная подструктура (последовательное выполнение операторов обработки данных);
2)подструктура Ветвления (аналог оператора IF - ELSE - THEN);
3)подструктура Выбора (аналог оператора CASE);
4)подструктура Цикла (аналог оператора DO WHILE)
Логический модуль является основой (фундаментом) структур ного программирования.
Структура программы определяется на основании структуры файлов (необходимо сопоставить структуры входных и выходных файлов) и детализации операционных диаграмм. Тщательный анализ соответствия входных и выходных данных позволяет вывить воз можные проблемы (невозможность получения требуемой после довательности входных данных, невозможность или сложность реа лизации обработки данных и др.) до того, как будут затрачены значительные усилия на составление программы.
При определении структуры программы проверяют:
-точность и достаточность детализации имеющихся специфи
каций;
-наличие источников всех выходных данных;
-принципиальную возможность решения прикладной задачи;
-корректность выполненного ранее обобщения или детали зации структуры файла;
-уровень сложности будущей программы.
Такой подход позволяет,создать программу, структура которой допускает применение принципа модульности.
Структура программы включает в себя:
-управляющий модуль;
-модуль обработки входных данных;
-модуль обработки выходных данных;
-модули вычислений;
Проектирование программного обеспечения базируется на мето дах анализа структуры файлов и проектирования логики программы. Прежде чем приступать к разработке логики программы необходимо разобраться в типовых структурах данных и подходах к анализу структуры файлов.
Проектирование программного обеспечения включает в себя логическое и физическое проектирование.
Логическое проектирование структуры программы предназ начено для решения прикладной задачи, а не для решения задачи, связанной с выбором конкретного языка программирования и кон кретной технической платформы. Решение прикладной задачи требу
ет выделения ряда простых модулей, которые и составят будущую программу.
Логическое проектирование структуры программы включает в себя следующие стадии:
-разработка структуры всех входных и выходных данных, которые не были включены в спецификации программы;
-выбор управляющего файла;
-уточнение структуры управляющего файла в соответствии с требованиями к обработке данных;
-выявление соответствия между данными и файлами;
-разработка укрупненной структуры программы;
-раскрытие содержания модулей, составление алгоритма программы;
-введение дополнительных модулей, обеспечивающих завер шение процесса обработки данных;
-оценка полученных результатов.
При разработке логической структуры программы необходимо пользоваться принципом предварительного считывания, предпола гающего считывание следующей порции данных по завершении текущей обработки. Чтение данных должно осуществляться с по мощью самостоятельной подпрограммы, в которую включаются все необходимые дополнительные функции (проверка упорядоченности данных, целостность данных и т.д.). Разработка подпрограммы чтения данных позволит значительно сократить общее время, затраченное на разработку системы и ее отладку. Модули, не выполняющие в разрабатываемой программе никаких действий, необходимо исключить из структуры программы.
По завершении разработки логической структуры программы необходимо провести ее критический анализ. Цель анализа - определить, насколько просто дальнейшее сопровождение разра батываемой программы и как полно выполнены требования, сформулированные в спецификациях.
Уточнение проекта проводится с учетом ограничений, которые оказывают влияние на проект программы, а именно:
-сметы затрат;
-технических средств;
-сроков завершения работ;
-объемно-временных характеристик выполнения программ. Последовательность операций при уточнении проекта:
-проверка приемлемости размера модулей;
-объединение или разъединение модулей;
-выявление общих функций;
-выделение самостоятельных модулей;
-корректировка проекта с учетом ограничений, наклады ваемых техническими средствами и программным обеспечением;
-критический анализ внесенных уточнений.
При дедуктивном подходе к разработке программ “сверху - вниз” возможны случаи, когда некоторые функции должны будут выпол няться в нескольких местах программы. Эти функции должны быть выделены в общий модуль. Могут вводиться ограничения на объем оперативной памяти или дискового пространства либо на применение прикладного пакета программ. В таких ситуациях в проект вносятся необходимые корректировки и производится критический анализ введенных уточнений.
Оптимизация программы связана с необходимостью улучшения каких-либо характеристик работы программы. Структурное програм мирование обычно удовлетворяет требованиям простоты разработки и поддержания высоких эксплуатационных характеристик програм мы, но объемно-временные характеристики выполнения программы могут не удовлетворять заказчиков. В этом случае необходимо провес ти работы по оптимизации. Однако моменту оптимизации программы должен предшествовать этап попытки добиться требуемых пара метров за счет увеличения объема оперативной памяти, исполь зования более новых компиляторов и более производительных ЭВМ.
Физическое проектирование программы
В процессе физического проектирования решаются следующие задачи:
-объединение взаимосвязанных логических модулей в один физический;
-разработка иерархической схемы физических модулей;
-разработка спецификации интерфейсов между физическими модулями;
- критический анализ результата физического проектирования. Физическое проектирование должно учитывать следующие
факторы:
-ограничения на максимальный размер модулей;
-производительность технических средств;
-возможность применения общих программ;
-простоту тестирования и отладки программ;
-возможность применения языков программирования низкого
уровня; - возможность одновременного использования труда несколь
ких программистов.
При разработке физических модулей целесообразно придер живаться правила (как и при логическом проектировании), согласно которому каждый модуль должен иметь одну точку входа и одну точку выхода. Однако это правило необязательное. Слепое следование ему может значительно усложнить физическую реализацию программы.
Кодирование программного продукта
Исходный текст программы является важной частью докумен тации на автоматизированную систему, поэтому необходимо прило жить максимальное усилие, чтобы он был понятен. Кодирование, или программирование, прикладной задачи базируется на принципах структурного программирования, включает программирование инте грированных распределенных приложений и языки программи рования.
Принцип структурного программирования
Принцип структурного программирования (кодирования) заклю чается в возможности “перевода” спецификаций программы на любой язык программирования. Структурное программирование (коди рование) включает:
-оформление текста программы;
-оформление логических модулей;
-введение имен данных;
-упрощение сопровождения программы;
-исключение безусловных операторов перехода;
-использование вложенных условных операторов;
-проведение критического анализа текста программы.
При оформлении текста программы особое внимание следует уделить использованию и размещению комментариев, в которых рас крываются назначения логических модулей. Необходимо указывать назначение идентификаторов, обрабатываемых файлов, перечень ссылочных документов. Рекомендуется использовать пропуски между строками программы, а каждый новый модуль начинать с новой страницы. Обычно комментарии составляют от 50 до 70 % от общего объема текста программы. Примечания, включаемые в текст про граммы, необходимо выделять и не смешивать с операторами языка программирования.
Логические модули оформляются таким образом, чтобы при озна комлении с ними не нужно было обращаться к другим разделам программы. В комментариях раскрывается назначение модуля, приводятся его описание, способы вызова и передачи параметров. При необходимости приводятся сведения взаимодействия модуля с другими приложениями. Каждую типовую логическую структуру необходимо реализовывать при помощи одних и тех же языков программирования.
Введение в программу мнемонических имен значительно облегчает процесс ее сопровождения. Имена объекта должны быть уникальны, обычно они определяются еще на этапе системного анализа. Мнемонические имена должны быть понятны пользователю и соответствовать наименованию объекта. Двусмысленность имен должна отсутствовать.
Программа должна быть максимально понятной и гибкой. Гиб кость обеспечивается тщательным проектированием системы и правильным кодированием с максимальным использованием воз можностей языка программирования.
Структурное кодирование (программирование) исключает использование безусловных операторов перехода типа “Go /о”. Текст программы при структурном проектировании составляется “сверху вниз” (оператор безусловного перехода усложняет отслеживание логики программы и не соответствует логике решения прикладной задачи).
Использование вложенных условных операторов типа “I f - then - else” позволяет эффективно представить логику структурированной
программы. Вложенные условные операторы применяются для организации обработки иерархических структур данных.
Критический анализ текста программы позволяет проконтроли ровать точность соответствия текста программы спецификациям, его понятность и соблюдение стандартов, действующих в организации. Необходимо убедиться в том, что спецификация правильно преоб разована в конструкции языка программирования и программа легко понимается. На все возникшие замечания подготавливаются ответы, а при необходимости изменяется текст программы.
6.2. Программирование интегрированных распределенных приложений
Если с самого начала при проектировании и разработке програм много обеспечения имеется в виду открытая система управления, то в процессе эксплуатации и модернизации СУ проблем практически не возникает. Однако практика показала, что ни в одной действи тельно серьезной распределенной информационной системе не удается обойтись без применения технологии интеграции. В основе этого лежит подход, предложенный международной группой OMG (Object Management Group).
К факторам, стимулирующим использование методов интеграции разнородных информационных ресурсов, относятся:
1)неоднородность,распределенность и автономность инфор мационныхресурсов системы. Неоднородность ресурсов может быть Синтаксической (при их представлении используются разные модели данных) и/или семантической (используются разные виды семан тических правил, детализируются и/или агрегируются разные аспекты предметной области). Возможна неоднородность информационных ресурсов, обусловленная использованием разных компьютерных платформ, операционных систем, систем управления базами данных, систем программирования и т.д.;
2)потребность в интеграционном комплексировании компонен тов автоматизированной системы. Естественным способам орга низации сложной системы является ее иерархически вложенное по строение;
3)реинжинерия системы. После создания начального варианта СУ неизбежно последует процесс ее непрерывных переулок и
доработок (реинжинерии), обусловленный развитием и изменением соответствующих процессов организации. Реконструкция системы не должна быть революционной. Все компоненты, не затрагиваемые процессом реинжиниринга, должны сохранять работоспособность;
4) решения проблем унаследованных систем. Любая компью терная система со временем становится неотъемлемой частью орга низации. Постоянно приходится решать задачу встраивания уста ревших информационных компонентов в систему, основанную на новых технологиях;
5) необходимость повторного использования ресурсов. Техно логия разработки ПО СУ должна способствовать использованию уже существующих компонентов, что в конечном итоге позволит перейти от ручного труда программистов к интенсивным методам (объектноориентированным) сборки, ориентированной на конкретную область применения автоматизированной системы;
6) необходимость продления жизненного цикла автоматизиро ванной системы. Чем дольше живет и приносит пользу СУ, тем это выгоднее для организации. Естественно, что для этого должна существовать возможность добавления в нее компонентов, спроек тированных и разработанных в другой технологии.
Основной задачей разработки программного обеспечения явля ется интеграция неоднородных БД, предоставление пользователям системы глобальной схемы БД и автоматическое преобразование операторов манипулирования БД глобального уровня в операторы, понятные соответствующим локальным СУБД.
Как правило, интегрировать приходится неоднородные БД, распределенные в вычислительной сети. А значит, дополнительно к собственным проблемам интеграции приходится решать все про блемы, присущие распределенным СУБД: управление глобальными транзакциями, сетевая оптимизация запросов и т.д. Для внешнего представления интегрированных БД обычно используется реляцион ная модель данных. В последнее время стали использовать объектноориентированные модели, однако практической основой является реляционная модель.
Языки программирования
Как известно, программа - это набор машинных команд, которые следует выполнить электронно-вычислительной машине для реали
зации того или иного алгоритма, описывающего решение прикладной задачи. Существует два типа программ-посредников, работающих с исходными текстами:
1) программа-компилятор - переводит исходный текст програм мы в машинный код и записывает его на жесткий магнитный диск в форме исполняемого (загрузочного) файла. После этого программа выполняется независимо от исходного текста;
2) программа-интерпретатор - всегда работает совместно с ис ходным текстом программы. Производится разбор инструкций исходного текста и ее немедленное исполнение.
Врежиме интерпретатора программа работает значительно медленнее, чем аналогичная программа в машинном коде. Это связанно с тем, что каждая инструкция разбирается отдельно во время выполнения, а не заранее, как при компиляции.
Внастоящее время существует следующая классификация языков программирования:
-языки ассемблера, где каждая команда чаще всего представ ляет собой одну машинную команду, записанную в символическом коде;
-универсальные языки программирования высокого уровня типа BASIC, FORTRAN, PASCAL и другие, где каждой команде соответствует несколько машинных команд либо целая подпрограмма
вмашинном коде;
-процедурные языки программирования типа TURBO BASIC, TURBO PASCAL, TURBO C++ и другие, включающие в свой состав текстовый редактор, командный язык и средства отладки;
-объектно-ориентированные языки программирования типа DELPHI, VISUAL BASIC, VISUAL C++ и другие, включающие целый спектр возможностей, позволяющих не только писать и отлаживать программы, но осуществлять управление программными проектами;
-командные и объектно-ориентированные языки управления базами данных типа PROGRESS, ORACLE, INGRESS, VISUAL FOX PRO и другие, позволяющие эффективно манипулировать данными
винформационных системах как на уровне отдельных записей, так и на уровне объектов.
Сточки зрения разработчиков программного обеспечения язык программирования должен предоставлять возможность разраба тывать программы в диалоговом режиме, то есть включать в себя: