Тема 3. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Для адекватного использования компьютера (обработки информации ) необходимо знать назначение и свойства нужных при работе с ним программ. Совокупность программ и сопровождающей их документации (используемой при эксплуатации этих программ ), называется программным обеспечением (ПО). Программное обеспечение является неотъемлемой частью любой вычислительной системы и делится (по назначению ) на три категории: системное программное обеспечение (необходимое для управления компьютером, для создания и поддержки выполнения других программ пользователя, для предоставления пользователю набора всевозможных услуг ), системы программирования или инструментальные системы (обеспечивающие создание новых программ для компьютеров ) и прикладное программное обеспечение (непосредственно обеспечивающее выполнение необходимых пользователю работ ).
Структура программного обеспечения
Системное программное обеспечение включает комплекс программ, управляющих работой аппаратной части компьютеров и компьютерных сетей (как правило, эти программы не решают конкретных задач пользователя, но создают условия для их решения ). Системное ПО направлено:
· на обеспечение устойчивой работы компьютера и вычислительной сети;
· на создание условий для нормальной работы прикладных программ;
· на выполнение вспомогательных операций;
· на диагностику аппаратной части компьютера и вычислительной сети;
Все множество системных программ можно разделить на две большие группы: базовое ПО и сервисные системы . Базовое программное обеспечение - это минимальный набор программных средств, обеспечивающих работу компьютера.
Базовый подкласс ПО включает:
· операционные системы(ОС) - комплекс программ, управляющих процессом выполнения прикладных программ, планированием и управлением вычислительными ресурсами ПК (ОС берет на себя выполнение таких операций, как контроль работоспособности оборудования ПК; выполнение процедуры начальной загрузки; управление работой всех устройств ПК; управление файловой системой; взаимодействие пользователя с ПК; загрузка и выполнение прикладных программ; распределение ресурсов ПК - оперативной памяти, процессорного времени и периферийных устройств между прикладными программами ).
· операционные оболочки - специальные программы, предназначенные для облегчения общения пользователя с командами операционной системы, имеющие текстовый и графический варианты интерфейса конечного пользователя (программы-оболочки обеспечивают удобный и наглядный способ общения с компьютером, позволяют наглядно отображать содержимое каталогов на дисках, удобно копировать, переименовывать, пересылать и удалять файлы и др. ).
· сетевые операционные системы - комплекс программ, обеспечивающих обработку, передачу и хранение данных в сети.
До недавнего времени на большинстве ПК была установлена операционная система MS DOS , которая была создана в 1981 г. фирмой Microsoft (заметим, что она не была оригинальной разработкой самой Microsoft - компания Билла Гейтса лишь доработала «операционку» под названием QDOS, созданную другой компанией ). До появления Windows дисковая операционная система MS DOS была самой популярной и массовой в применении. В ее среде создано целое поколение программного продукта. На основе MS DOS в процессе развития компьютерных технологий появился Windows (с 1996 г. MS DOS включена в состав операционной среды Windows 95 ). Основные компоненты ОС, развитые в среде MS DOS, являются классикой, и органично включены в Windows на новом этапе развития программного обеспечения в целом и его сердцевины - операционных систем.
MS DOS 16-разрядная однозадачная операционная система, обладающая «интерфейсом командной строки», компактна, предъявляет скромные требования к аппаратуре и выполняет необходимый минимум функций для пользователей и программ. Основные недостатки DOS:
· главным ее уязвимым местом является работа с ограниченной оперативной памятью (в эпоху создания MS-DOS оперативная память большинства компьютеров не превышала 256 килобайт. DOS могла работать с 640 килобайтами ОП, и Билл Гейтс утверждал, что никому и никогда не понадобится больший объем, но время шло и появились программы, которым требовался для работы больший объем оперативной памяти и приходилось использовать специальные программы - менеджеры памяти, но и они не решали проблему );
· вторым недостатком DOS была невозможность работы в полноценном графическом режиме (хотя тогдашние компьютеры уже могли бы обеспечить его поддержку );
· третьим недостатком MS-DOS была однозадачность.
Операционные системы семейства DOS, несмотря на свою простоту и экономичность, морально устарели, и на смену им пришли операционные системы нового поколения. К числу таких ОС относятся операционные системы семейства Windows , операционные системы семейства Unix и др.
Сервисные системы - предназначены для обслуживания компьютера (расширяют возможности базового ПО ). По функциональному признаку среди сервисного ПО можно выделить:
· программы обслуживания дисков (обеспечивающие проверку качества поверхности диска, контроль сохранности файлов, сжатие дисков, создание страховых копий, резервирование данных на внешних носителях и др. );
· антивирусные программы (обеспечивающие защиту компьютера, обнаружение и восстановление зараженных файлов );
· программы архивирования данных (обеспечивают процесс сжатия информации в файлах с целью уменьшения объема памяти для ее хранения );
· программы обслуживания сети.
· программы диагностики работоспособности компьютера;
Программы, служащие для выполнения вспомогательных операций обработки данных или обслуживания компьютеров (диагностики, тестирования, оптимизации использования дискового пространства, восстановления разрушенной на магнитном диске информации и т.д. ), называют утилитами.
Системы программирования или инструментальные системы - это программные продукты, поддержки технологии программирования. В рамках этого направления существуют средства для создания приложений, включающие:
· локальные средства, обеспечивающие выполнение отдельных работ по созданию программ;
· интегрированные среды разработчиков программ, обеспечивающие выполнение комплекса взаимосвязанных работ по созданию программ.
Локальные средства разработки программ включают языки и системы программирования, а также инструментальную среду пользователя. Существуют машинные языки программирования (воспринимаемые аппаратной частью компьютера машинные коды ), машинно-ориентированные языки (языки программирования, которые отражают структуру конкретного типа компьютера – ассемблеры ), алгоритмические (универсальные ) языки, не зависящие от архитектуры компьютера, например, Фортран (Fortran ), Кобол (Cobol ), Алгол (Algol ), Паскаль (Pascal ), Бейсик (Basic ), Си (C ), Си++ (C++ ) и др.; процедурно-ориентированные языки (где имеется возможность описания программы как совокупности процедур – подпрограммы ), проблемно-ориентированные языки (предназначенные для решения задач определенного класса ), интегрированные системы программирования. Заметим, что классификация языков программирования не закреплена ГОСТами (в учебных целях обычно проводится их классификация по различным признакам ). Программа, подготовленная на языке программирования, проходит этап трансляции, отладки и тестирования.
Основное назначение инструментария интегрированных программных сред – повышение производительности труда программистов, автоматизация создания программ, обеспечивающих интерфейс пользователя графического типа и др.
Кроме того, существуют средства для создания сложных информационных систем (CASE – технология ). Проектирование информационных систем представляет собой трудоемкую и длительную работу, требующую высокой квалификации участвующих в ней специалистов. В недалеком прошлом проектирование нередко выполнялось на интуитивном уровне неформализованными методами, включающими в себя элементы искусства, практический опыт, экспертные оценки и дорогостоящие экспериментальные проверки качества функционирования. В начале 70-х гг. в США был отмечен кризис программирования (software crisis ). Это выражалось в том, что большие проекты стали выполняться с отставанием от графика или с превышением сметы расходов, разработанный продукт не обладал требуемыми функциональными возможностями, производительность его была низка, качество получаемого программного обеспечения не устраивало потребителей. Потребность контролировать процесс разработки ПО, прогнозировать и гарантировать стоимость разработки, сроки и качество результатов привела к необходимости перехода от кустарных к индустриальным способам создания ПО и появлению совокупности инженерных методов и средств создания ПО, объединенных общим названием «программная инженерия» (software engineering ). В основе программной инженерии лежит следующая идея: проектирование ПО является формальным процессом, который можно изучать и совершенствовать. К концу 80-х гг. было проведено много исследований в области программирования (разработка и внедрение языков высокого уровня, методов структурного и модульного программирования, языков проектирования и средств их поддержки, формальных и неформальных языков описания системных требований и спецификаций и т. д. ). Термин CASE (Computer Aided Software Engineering ) имеет весьма широкое толкование. Первоначально значение термина CASE ограничивалось вопросами автоматизации разработки только лишь программного обеспечения, а в настоящее время оно приобрело новый смысл и охватывает процесс разработки сложных информационных систем в целом. CASE-технология представляет собой совокупность методов проектирования информационных систем, а также набор инструментальных средств, позволяющих в наглядной форме моделировать предметную область, анализировать эту модель на всех стадиях разработки и сопровождения, разрабатывать приложения в соответствии с информационными потребностями пользователей. Большинство существующих CASE-средств основано на методах структурного или объектно-ориентированного анализа и проектирования, использующих спецификации в виде диаграмм или текстов для описания внешних требований, связей между моделями системы, динамики поведения системы и архитектуры программных средств.
Прикладные программы - предназначены для решения прикладных задач пользователя (обеспечивает выполнение необходимых пользователю задач на компьютере ). Условно (по их назначению ) можно выделить следующие подклассы:
· программы обработки текстов;
· графические редакторы;
· программы обработки фото- и видеоизображений;
· программы подготовки презентаций;
· электронные таблицы;
· системы управления базами данных;
· программы экономического и статистического анализа;
· системы автоматизированного проектирования (САПР);
· информационно-поисковые системы;
· сетевое программное обеспечение (программы для работы с электронной почтой, доступ к видеоконференциям, браузеры Интернет и т.д. );
· игровые программы.
Прикладное программное обеспечение состоит из пакетов прикладных программ (ППП) и прикладных программ пользователя.
В настоящее время значительное место в прикладном ПО занимают пакеты прикладных программ, которые по сфере применения делятся на проблемно-ориентированные пакеты (направлены на решение узкого круга задач ), пакеты общего назначения (предназначены для решения типовых задач обработки данных ) и интегрированные пакеты (областью их применения является в основном экономическая сфера; они, как правило, содержат: табличный процессор, текстовый редактор, систему управления базами данных, графический редактор, коммуникационные средства ). Прикладные программы создаются в составе конкретной вычислительной среды (их разработка осуществляются обычно индивидуально в соответствии с соглашением ППП или ОС, в рамках которых они применяются ).
В этом методе разбиение сложной системы на несколько подсистем получило название «разделяй и властвуй » (divide et impera), иерархическая или функциональная декомпозиция и др. При этом базовыми принципами являются:
a) «разделяй и властвуй»;
b) Проектирование «сверху вниз» - от общей постановки задачи к отдельным подзадачам и т.д.;
c) принцип иерархического упорядочения, который предполагает объединение составных частей системы в иерархические древовидные структуры с добавлением новых деталей на каждом уровне.
Процесс проектирования сложного программного обеспечения начинают с уточнения его структуры, т. е. определения структурных компонентов и связей между ними. Результат уточнения структуры может быть представлен в виде структурной и/или функциональной схем и описания (спецификаций) компонентов.
Структурная схема разрабатываемого программного обеспечения
Структурной называют схему, отражающую состав и взаимодействие по управлению частей разрабатываемого программного обеспечения. Обычно такие схемы разрабатывают для каждой программы большого пакета, а список программ определяют, анализируя функции, указанные в техническом задании.
Самый простой вид программного обеспечения - программа, которая в качестве структурных компонентов может включать только подпрограммы и библиотеки ресурсов. Разработку структурной схемы программы обычно выполняют методом пошаговой детализации.
Структурными компонентами программной системы или комплекса могут служить программы, подсистемы, базы данных, библиотеки ресурсов и т. п.
Так схема программного комплекса демонстрирует передачу управления от программы-диспетчера соответствующей программе, как показано на рис. 4.1. Программы комплекса, как правило, слабо связаны. Поэтому для организации их совместной работы используется диспетчер.
Рис. 4.1. Пример структурной схемы программного комплекса.
Структурная схема программной системы , как правило, показывает наличие подсистем или других структурных компонентов. В отличие от комплекса отдельные части (подсистемы) программной системы интенсивно обмениваются данными между собой и, возможно, с основной программой. Структурная же схема программной системы этого, как правило, не показывает, как это видно из рис. 4.2.
Обычно она представляет собой многоуровневую иерархическую схему взаимодействия подпрограмм по управлению. На начальном этапе схема отображает два уровня иерархии, т. е. показывает общую структуру программы. Однако тот же метод позволяет получить структурные схемы с большим количеством уровней.
Метод пошаговой детализации
реализует нисходящий подход и базируется на основных конструкциях структурного программирования. Он предполагает пошаговую разработку алгоритма, как показано на рисунке 4.3. Каждый шаг при этом включает разложение функции на подфункции. Так на первом этапе описывают решение поставленной задачи, выделяя общие подзадачи. На следующем аналогично описывают подзадачи, формулируя при этом элементы следующего уровня. Таким образом, на каждом шаге происходит уточнение функций проектируемого программного обеспечения. Процесс продолжают, пока не доходят до подзадач, алгоритмы, решения которых очевидны.
При этом необходимо, в первую очередь, детализировать управляющие процессы, оставляя уточнение операций с данными напоследок. Это связано с тем, что приоритетная детализация управляющих процессов существенно упрощает структуру компонентов всех уровней иерархии и позволяет не отделять процесс принятия решения от его выполнения. Определив условие выбора некоторой альтернативы, сразу же вызывают модуль, ее реализующий.
Функциональная схема или схема данных (ГОСТ 19. 701-90) - схема взаимодействия компонентов программного обеспечения с описанием информационных потоков, состава данных в потоках и указанием используемых файлов и устройств. Для изображения этих схем используют специальные обозначения, установленные стандартом.
Функциональные схемы более информативны, чем структурные. На рис. 4.4 для сравнения приведены функциональные схемы программных комплексов и систем.
б)
Рис. 4.4. Примеры функциональных схем: а - комплекс программ, б - программная система.
Все компоненты структурных и функциональных схем должны быть описаны. При структурном подходе особенно тщательно необходимо прорабатывать спецификации межпрограммных интерфейсов, так как от них зависят самые дорогостоящие ошибки.
Структурное проектирование использует три основных вида моделей (диаграмм):
1) SADT (Structured Analysis and Design Technique - метод структурного анализа и проектирования) - модели и соответствующие функциональные диаграммы;
2) DFD (Data Flow Diagrams) - диаграммы потоков данных;
3) ERD (Entity-Relationship Diagrams) - диаграммы «сущность-связь».
Функциональная модель SADT отображает функциональную структуру объекта, т.е. производимые им действия и связи между этими действиями.
Главным компонентом модели является диаграмма . На ней все функции и интерфейсы представлены в виде блоков и дуг соответственно. Место соединения дуги с блоком определяет тип интерфейса. Управляющая информация входит в блок сверху . Входная информация, которая подвергается обработке, показана с левой стороны блока, а результат (выход) - с правой . Механизм (человек или автоматизированная система), который осуществляет операцию, представляется дугой, входящей в блок снизу (рис. 4.5).
Построение SADT-модели начинается с представления всей системы в виде простейшего компонента - одного блока и дуг, изображающих интерфейс с функциями вне системы. Затем этот блок детализируется на другой диаграмме с помощью нескольких блоков, соединенных интерфейсным дугами. Новые блоки определяют основные подфункции исходной функции, которые, в свою очередь, могут быть детализировании и т.д. (см. рис. 4.6).
Рис. 4.6
Диаграммы потоков данных (DFD) являются основным средством моделирования функциональных требований к проектируемой системе. С их помощью эти требования представляются в вид иерархий функциональных компонентов (процессов), связанных потоками данных. Главная цель такого представления - продемонстрировать, как каждый процесс преобразует свои входные данные в выходные, а также выявить отношения между этими процессами.
Основными компонентами диаграмм потоков данных являются:
a) внешние сущности;
b) системы и подсистемы;
c) процессы;
d) накопители данных;
e) поток данных.
Внешняя сущность представляет собой материальный объект или физическое лицо, являющийся источником или приемником информации. Она изображается объемным прямоугольником с надписью, как показано на рисунке 4.7.
Подсистема (см. рис. 4.8) или процесс (рис. 4.9) представляются прямоугольником с закругленными краями. Он содержит три поля:
a) Номера;
c) Физической реализации.
Подсистема и процесс отличаются именем. В первой записывается название подсистемы, а во втором – глагол, определяющий, что делает процесс.
Рис. 4.8. ГНИ – Государственная налоговая инспекция
Накопитель данных - это абстрактное устройство для хранения информации. Он изображается, как показано на рис. 4.10. Его обозначение начинается с буквы D.
Поток данных на диаграмме изображается линией, оканчивающейся стрелкой, которая показывает направление потока. Каждый поток данных имеет имя, отражающее его содержание.
Пример диаграммы потоков данных приведен на рис. 4.11.
Более сложная диаграмма потоков данных приведена на рис. 4.12.
ER-диаграммы будут рассмотрены позднее.
В курсовом проекте, кроме функциональной диаграммы, необходимо представить схемы алгоритмов наиболее сложных функций (например, сортировки и поиска).
Совокупность программ, предназначенная для решения задач на ПК, называется программным обеспечением. Состав программного обеспечения ПК называют программной конфигурацией. Программное обеспечение, можно условно разделить на три категории (рис.1):
Рисунок 1. Классификация ПО
системное ПО (программы общего пользования), выполняющие различные вспомогательные функции, например создание копий используемой информации, выдачу справочной информации о компьютере, проверку работоспособности устройств компьютера и т.д.
прикладное ПО, обеспечивающее выполнение необходимых работ на ПК: редактирование текстовых документов, создание рисунков или картинок, обработка информационных массивов и т.д.
инструментальное ПО (системы программирования), обеспечивающее разработку новых программ для компьютера на языке программирования.
Системное программное обеспечение - это комплекс программ, которые обеспечивают эффективное управление компонентами компьютерной системы, такими как процессор, оперативная память, устройства ввода-вывода, сетевое оборудование, выступая как «межслойный интерфейс», с одной стороны которого аппаратура, а с другой - приложения пользователя. В отличие от прикладного программного обеспечения, системное не решает конкретные прикладные задачи, а лишь обеспечивает работу других программ, управляет аппаратными ресурсами вычислительной системы и т. д.
Это программы общего пользования не связаны с конкретным применением ПК и выполняют традиционные функции: планирование и управление задачами, управления вводом-выводом и т.д. Другими словами, системные программы выполняют различные вспомогательные функции, например, создание копий используемой информации, выдачу справочной информации о компьютере, проверку работоспособности устройств компьютера и т.п. К системному ПО относятся:
операционные системы (эта программа загружается в ОЗУ при включении компьютера)
программы – оболочки (обеспечивают более удобный и наглядный способ общения с компьютером, чем с помощью командной строки DOS, например, Norton Commander)
операционные оболочки – интерфейсные системы, которые используются для создания графических интерфейсов, мультипрограммирования и.т.
Драйверы (программы, предназначенные для управления портами периферийных устройств, обычно загружаются в оперативную память при запуске компьютера)
утилиты (вспомогательные или служебные программы, которые представляют пользователю ряд дополнительных услуг)
К утилитам относятся:
диспетчеры файлов или файловые менеджеры
средства динамического сжатия данных (позволяют увеличить количество информации на диске за счет ее динамического сжатия)
средства просмотра и воспроизведения
средства диагностики; средства контроля позволяют проверить конфигурацию компьютера и проверить работоспособность устройств компьютера, прежде всего жестких дисков
средства коммуникаций (коммуникационные программы) предназначены для организации обмена информацией между компьютерами
средства обеспечения компьютерной безопасности (резервное копирование, антивирусное ПО).
Утилиты- программы, предназначенные для решения узкого круга вспомогательных задач.
Иногда утилиты относят к классу сервисного программного обеспечения
Утилиты используются для:
Мониторинга показателей датчиков и производительности оборудования - мониторинг температур процессора, видеоадаптера; чтение S.M.A.R.T. жёстких дисков;
Управления параметрами оборудования - ограничение максимальной скорости вращения CD-привода; изменение скорости вращения вентиляторов.
Контроля показателей - проверка ссылочной целостности; правильности записи данных.
Расширения возможностей - форматирование и/или переразметка диска с сохранением данных, удаление без возможности восстановления.
Типы утилит:
Дисковые утилиты
Утилиты работы с реестром
Утилиты мониторинга оборудования
Тесты оборудования
Дефрагментаторы
Проверка диска - поиск неправильно записанных либо повреждённых различным путём файлов и участков диска и их последующее удаление для эффективного использования дискового пространства.
Очистка диска - удаление временных файлов, ненужных файлов, чистка «корзины».
Разметка диска - деление диска на логические диски, которые могут иметь различные файловые системы и восприниматься операционной системой как несколько различных дисков.
Резервное копирование - создание резервных копий целых дисков и отдельных файлов, а также восстановление из этих копий.
Сжатие дисков - сжатие информации на дисках для увеличения вместимости жёстких дисков.
Рисунок 2. Место СПО в многоуровневой структуре компьютера
Необходимо отметить, что часть утилит входит в состав операционной системы, а другая часть функционирует автономно. Большая часть общего (системного) ПО входит в состав ОС (рис.2). Часть общего ПО входит в состав самого компьютера (часть программ ОС и контролирующих тестов записана в ПЗУ или ППЗУ, установленных на системной плате). Часть общего ПО относится к автономными программам и поставляется отдельно.
Прикладное ПО. Прикладные программы могут использоваться автономно или в составе программных комплексов или пакетов. Прикладное ПО – программы, непосредственно обеспечивающие выполнение необходимых работ на ПК: редактирование текстовых документов, создание рисунков или картинок, создание электронных таблиц и т.д.Пакеты прикладных программ – это система программ, которые по сфере применения делятся на проблемно – ориентированные, пакеты общего назначения и интегрированные пакеты. Современные интегрированные пакеты содержат до пяти функциональных компонентов: тестовый и табличный процессор, СУБД, графический редактор, телекоммуникационные средства. К прикладному ПО, например, относятся:
Комплект офисных приложений MS OFFICE
Бухгалтерские системы
Финансовые аналитические системы
Интегрированные пакеты делопроизводства
CAD – системы (системы автоматизированного проектирования)
Редакторы HTML или Web – редакторы
Браузеры – средства просмотра Web - страниц
Графические редакторы
Экспертные системы.
Инструментальное ПО. Инструментальное ПО или системы программирования - это системы для автоматизации разработки новых программ на языке программирования. В самом общем случае для создания программы на выбранном языке программирования (языке системного программирования) нужно иметь следующие компоненты:1. Текстовый редактор для создания файла с исходным текстом программы. 2. Компилятор или интерпретатор. Исходный текст с помощью программы-компилятора переводится в промежуточный объектный код. Исходный текст большой программы состоит из нескольких модулей (файлов с исходными текстами). Каждый модуль компилируется в отдельный файл с объектным кодом, которые затем надо объединить в одно целое.3. Редактор связей или сборщик, который выполняет связывание объектных модулей и формирует на выходе работоспособное приложение – исполнимый код. Исполнимый код – это законченная программа, которую можно запустить на любом компьютере, где установлена операционная система, для которой эта программа создавалась. Как правило, итоговый файл имеет расширение.ЕХЕ или.СОМ.4. В последнее время получили распространение визуальный методы программирования (с помощью языков описания сценариев), ориентированные на создание Windows-приложений. Этот процесс автоматизирован в средах быстрого проектирования. При этом используются готовые визуальные компоненты, которые настраиваются с помощью специальных редакторов. Наиболее популярные редакторы (системы программирования программ с использованием визуальных средств) визуального проектирования:
Borland Delphi - предназначен для решения практически любых задачи прикладного программирования
Borland C++ Builder – это отличное средство для разработки DOS и Windows приложений
Microsoft Visual Basic – это популярный инструмент для создания Windows-программ
Microsoft Visual C++ - это средство позволяет разрабатывать любые приложения, выполняющиеся в среде ОС типа Microsoft Windows
Контрольные вопросы:
Дайте определение операционной системе.
Какое программное обеспечение относят к системному?
Назовите служебное программное обеспечение.
Какое программное обеспечение относят к прикладному?
Каково назначение программного обеспечения?
Каковы основные классы программ? Приведите примеры программ в каждом классе по назначению.
Проектирование программного обеспечения начинают с определения его структуры.
5. 1. Разработка структурной и функциональной схем.
Процесс проектирования сложного программного обеспечения начинают с уточнения его структуры, т. е. определения структурных компонентов и связей между ними. Результат уточнения структуры может быть представлен в виде структурной и/или функциональной схем и описания (спецификаций) компонентов.
Структурная схема разрабатываемого программного обеспечения
Структурной называют схему, отражающую состав и взаимодействие по управлению частей разрабатываемого программного обеспечения.
Структурные схемы пакетов программ не информативны, поскольку организация программ в пакеты не предусматривает передачи управлениямежду ними. Поэтому структурные схемы разрабатывают для каждой программыпакета, а список программ пакета определяют, анализируя функции, указанные в техническом задании.
Самый простой вид программного обеспечения - программа, которая в качестве структурных компонентов может включать только подпрограммы и библиотеки ресурсов.
Разработку структурной схемы программы обычно выполняют методом пошаговой детализации.
Структурными компонентами программной системы или программного комплекса могут служить программы, подсистемы, базы данных, библиотеки ресурсов и т. п.
Структурная схема программного комплекса демонстрирует передачу управления от программы-диспетчера соответствующей программе (рис. 1.1).
Рис. 5.1. Пример структурной схемы программного комплекса.
Структурная схема программной системы , как правило, показывает наличие подсистем или других структурных компонентов. В отличие от программного комплекса отдельные части (подсистемы) программной системы интенсивно обмениваются данными между собой и, возможно, с основной программой. Структурная же схема программной системы этогообычно не показывает (рис. 1.2).
Рис. 5.2. Пример структурной схемы программной системы.
Более полное представление о проектируемом программном обеспечении с точки зрения взаимодействия его компонентов между собой и с внешней средой дает функциональная схема.
Функциональная схема
Функциональная схема или схема данных (ГОСТ 19. 701-90) - схема взаимодействия компонентов программного обеспечения с описанием информационных потоков, состава данных в потоках и указанием используемых файлов и устройств. Для изображения функциональных схем используют специальные обозначения, установленные стандартом.
Функциональные схемы более информативны, чем структурные. На рис. 1.3 для сравнения приведены функциональные схемы программных комплексов и систем.
Рис. 5.3. Примеры функциональных схем: а - комплекс программ, б - программная система.
Все компоненты структурных и функциональных схем должны быть описаны. При структурном подходе особенно тщательно необходимо прорабатывать спецификации межпрограммных интерфейсов, так как от качества их описания зависит количество самых дорогостоящих ошибок. К самым дорогим относятся ошибки, обнаруживаемые при комплексном тестировании, так как для их устранения могут потребоваться серьезные изменения уже отлаженных текстов.
5.2. Использование метода пошаговой детализации для проектирования структуры программного обеспечения.
Структурный подход к программированию в том виде, в котором он был сформулирован в 70-х годах XX в., предлагал осуществлять декомпозицию программ методом пошаговой детализации. Результатом декомпозиции является структурная схема программы, которая представляет собой многоуровневую иерархическую схему взаимодействия подпрограмм по управлению. Минимально такая схема отображает два уровня иерархии, т. е. показывает общую структуру программы. Однако тот же метод позволяет получить структурные схемы с большим количеством уровней.
Метод пошаговой детализации реализует нисходящий подход и базируется на основных конструкциях структурного программирования. Он предполагает пошаговую разработку алгоритма. Каждый шаг при этом включает разложение функции на подфункции. Так на первом этапе описывают решение поставленной задачи, выделяя общие подзадачи, на следующем аналогично описывают решение подзадач, формулируя при этом подзадачи следующего уровня. Таким образом, на каждом шаге происходит уточнение функций проектируемого программного обеспечения. Процесс продолжают, пока не доходят до подзадач, алгоритмы, решения которых очевидны.
Декомпозируя программу методом пошаговой детализации, следует придерживаться основного правила структурной декомпозиции, следующего из принципа вертикального управления: в первую очередь детализировать управляющие процессы декомпозируемого компонента, оставляя уточнение операций с данными напоследок. Это связано с тем, что приоритетная детализация управляющих процессов существенно упрощает структуру компонентов всех уровней иерархии и позволяет не отделять процесс принятия решения от его выполнения: так, определив условие выбора некоторой альтернативы, сразу же вызывают модуль, ее реализующий.
Детализация операций со структурами в последнюю очередь позволит отложить уточнение их спецификаций и обеспечит возможность относительно безболезненной модификации этих структур за счет сокращения количества модулей, зависящих от этих данных.
Кроме этого, целесообразно придерживаться следующих рекомендаций:
Не отделять операции инициализации и завершения от соответствующей обработки, так как модули инициализации и завершения имеют плохую связность (временную) и сильное сцепление (по управлению);
Не проектировать слишком специализированных или слишком универсальных модулей, так как проектирование излишне специальных модулей увеличивает их количество, а проектирование излишне универсальных модулей повышает их сложность;
Избегать дублирования действий в различных модулях, так как при их изменении исправления придется вносить во все фрагменты программы, где они выполняются - в этом случае целесообразно просто реализовать эти Действия в отдельном модуле;
Группировать сообщения об ошибках в один модуль по типу библиотеки ресурсов, тогда будет легче согласовать формулировки, избежать дублирования сообщений, а также перевести сообщения на другой язык.
При этом, описывая решение каждой задачи, желательно использовать не более 1-2-х структурных управляющих конструкций, таких, как цикл-пока или ветвление, что позволяет четче представить себе структуру организуемого вычислительного процесса.
Разбиение на модули при данном виде проектирования выполняется эвристически, исходя из рекомендуемых размеров модулей (20-60 строк) и сложности структуры (две-три вложенных управляющих конструкции). В принципе в качестве модуля (подпрограммы) можно реализовать решение подзадач, сформулированных на любом шаге процесса детализации, однако определяющую роль при разбиении программы на модули играют принципы обеспечения технологичности модулей.
Для анализа технологичности полученной иерархии модулей целесообразно использовать структурные карты Константайна или Джексона.
5. 3. Структурные карты Константайна.
На структурной карте отношения между модулями представляют в виде графа, вершинам которого соответствуют модули и общие области данных, а дугам - межмодульные вызовы и обращения к общим областям данных.
Различают четыре типа вершин (рис. 1.4.):
Модуль - подпрограмма,
Подсистема - программа,
Библиотека - совокупность подпрограмм, размещенных в отдельном модуле,
Область данных - специальным образом оформленная совокупность данных, к которой возможно обращение извне.
а). б). в). г).
Рис. 5.4. Обозначение вершин по стандартам IBM, ISO и ANSI:
а – модуль; б – подсистема; в – библиотека; г – область данных.
При этом отдельные части программной системы (программы, подпрограммы) могут вызываться последовательно, параллельно или как сопрограммы (рис. 1.5.).
Рис. 5.5. Обозначение типа вызова:
а – последовательный вызов; б – параллельный вызов; в – вызов сопрограммы.
Чаще всего используют последовательный вызов, при котором модули, передав управление, ожидают завершения выполнения вызванной программы или подпрограммы, чтобы продолжить прерванную обработку.
Под параллельным вызовом понимают распараллеливание вычислений на нескольких вычислителях, когда при активизации другого процесса данный процесс продолжает работу. На однопроцессорных компьютерах в мультипрограммных средах в этом случае начинается попеременное выполнение соответствующих программ. Параллельные процессы бывают синхронные и асинхронные. Для синхронных процессов определяют точки синхронизации - моменты времени, когда производится обмен информацией между процессами. Асинхронные процессы обмениваются информацией только в момент активизации параллельного процесса.
Под вызовом сопрограммы понимают возможность поочередного выполнения двух одновременно запущенных программ, например, если одна программа подготовила пакет данных для вывода, то вторая может ее вывести, а затем перейти в состояние ожидания следующего пакета. Причем в мультипрограммных системах основная программа, передав данные, продолжает работать, а не переходит в состояние ожидания.
Структурные карты Константайна позволяют наглядно представить результат декомпозиции программы на модули и оценить ее качество, т. е. соответствие рекомендациям структурного программирования (сцепление и связность).
5.4. Проектирование структур данных.
Под проектированием структур данных понимают разработку их представлений в памяти. Основными параметрами, которые необходимо учитывать при проектировании структур данных, являются:
Вид хранимой информации каждого элемента данных;
Связи элементов данных и вложенных структур;
Время хранения данных структуры («время жизни»);
Совокупность операций над элементами данных, вложенными структурами и структурами в целом
Вид хранимой информации определяет тип соответствующего поля памяти. В качестве элементов данных в зависимости от используемого языка программирования могут рассматриваться:
Целые и вещественные числа различных форматов;
Символы;
Булевские значения: true и false;
а также некоторые структурные типы данных, например:
Специально объявленные классы.
При этом для числовых полей очень важно правильно определить диапазон возможных значений, а для строковых данных - максимально возможную длину строки.
Связи элементов и вложенных структур, а также их устойчивость и совокупность операций над элементами и вложенными структурами определяют структуры памяти, используемые для представления данных. Время жизни учитывают при размещении данных в статической или динамической памяти, а также во внешней памяти.
Рассмотрим существующие варианты внутреннего представления данных, их элементов и связей между ними более подробно.
Представление данных в оперативной памяти
Различают две базовые структуры организации данных в оперативной памяти: векторную и списковую.
Векторная структура представляет собой последовательность байт памяти, которые используются для размещения полей данных (рис. 1.6.).
Рис. 5.6. Векторная структура памяти.
Последовательное размещение организованных структур данных позволяет осуществлять прямой доступ к элементам: по индексу (совокупности индексов) - в массивах или строках или по имени поля - в записях или объектах.
Однако выполнение операций добавления и удаления элементов при использовании векторных структур для размещения элементов массивов может потребовать осуществления многократных сдвигов элементов.
Структуры данных в векторном представлении можно размещать как в статической, так и в динамической памяти. Расположение векторных представлений в динамической памяти иногда позволяет существенно увеличить эффективность использования оперативной памяти. Желательно размещать в динамической памяти временные структуры, хранящие промежуточные результаты, и структуры, размер которых сильно зависит от вводимых исходных данных.
Списковые структуры строят из специальных элементов, включающих помимо информационной части еще и один или несколько указателей - адресов элементов или вложенных структур, связанных с данным элементом. Размещая подобные элементы в динамической памяти можно организовывать различные внутренние структуры (рис. 1.7.).
Рис. 5.7. Примеры списковых структур памяти:
а - линейный односвязный список; б - древовидный список; в - n-связный список.
Однако при использовании списковых структур следует помнить, что:
Для хранения указателей необходима дополнительная память;
Поиск информации в линейных списках осуществляется последовательно , а потому требует больше времени;
Построение списков и выполнение операций над элементами данных, хранящимися в списках, требует более высокой квалификации программистов, более трудоемко, а соответствующие подпрограммы содержат больше ошибок и, следовательно, требуют более тщательного тестирования.
Обычно векторное представление используют для хранения статических множеств, таблиц (одномерных и многомерных), например, матриц, строк, записей, а также графов, представленных матрицей смежности, матрицей инцидентности или аналитически. Списковое представление удобно для хранения динамических (изменяемых) структур и структур со сложными связями.
В наиболее ответственных случаях при выборе внутреннего представления целесообразно определять вычислительную сложность выполнения наиболее часто встречающихся операций со структурой данных или ее элементами для различных вариантов. А также оценивать их емкостную сложность.
Представление данных во внешней памяти
Современные операционные системы поддерживают два способа организации данных во внешней памяти: последовательный и с прямым доступом.
При последовательном доступе к данным возможно выполнение только последовательного чтения элементов данных или последовательная их запись. Такой вариант предполагается при работе с логическими устройствами типа клавиатуры или дисплея, при обработке текстовых файлов или файлов, формат записей которых меняется в процессе работы.
Прямой доступ возможен только для дисковых файлов, обмен информацией с которыми осуществляется записями фиксированной длины (двоичные файлы С или типизированные файлы Pascal). Адрес записи такого файла можно определить по ее номеру ,что и позволяет напрямую обращаться к нужной записи.
При выборе типа памяти для размещения структур данных следует иметь в виду, что:
В оперативной памяти размещают данные, к которым необходим быстрый доступ, как для чтения, так и для их изменения;
Во внешней - данные, которые должны сохраняться после завершения программы.
Возможно, что во время работы данные целесообразно хранить в оперативной памяти для ускорения доступа к ним, а при ее завершении - переписывать во внешнюю память для длительного хранения. Именно этот способ используют большинство текстовых редакторов: во время работы с текстом он весь или его часть размещается в оперативной памяти, откуда по мере надобности переписывается во внешнюю память. В подобных случаях разрабатывают два представления данных: в оперативной и во внешней памяти.
Правильный выбор структур во многом определяет эффективность разрабатываемого программного обеспечения и его технологические качества, поэтому данному вопросу должно уделяться достаточное внимание независимо от используемого подхода.
5.5. Проектирование программного обеспечения, основанное на декомпозиции данных.
Практически одновременно были предложены методики проектирования программного обеспечения Джексона и Варнье-Орра, основанные на декомпозиции данных. Обе методики предназначены для создания «простых» программ, работающих со сложными, но иерархически организованными структурами данных. При необходимости разработки программных систем в обоих случаях предлагается вначале разбить систему на отдельные программы, а затем использовать данные методики.
Методика Джексона
При создании своей методики М. Джексон исходил из того, что структуры исходных данных и результатов определяют структуру программы.
Методика основана на поиске соответствий структур исходных данных и результатов. Однако при ее применении возможны ситуации, когда на каких-то уровнях соответствия отсутствуют. Например, записи исходного файла сортированы не в там порядке, в котором соответствующие строки должны появляться в отчете. Такие ситуации были названы «столкновениями», Выделяют несколько типов столкновений, которые разрешают по-разному. При различной последовательности записей их просто сортируют до обработки.
Разработка структур программы в соответствии с методикой выполняется следующим образом:
Строят изображение структур входных и выходных данных;
Выполняют идентификацию связей обработки (соответствия) между этими данными;
формируют структуру программы на основании структур данных и обнаруженных соответствий;
добавляют блоки обработки элементов, для которых не обнаружены соответствия;
Анализируют и обрабатывают несоответствия, т. е. разрешают «столкновения»;
Добавляют необходимые операции (ввод, вывод, открытие/закрытие файлов и т. п.); записывают программу в структурной нотации (псевдокоде).
Методика Варнье-Орра.
Методика Варнье-Орра базируется на том положении, что и методика Джексона, но основными при построении диаграммы считаются структуры выходных данных и, если структуры входных данных не соответствуют структурам выходных, то их допускается менять. Таким образом, ликвидируется основная причина столкновений.
Однако на практике не всегда существует возможность перестановки структур входных данных: эти структуры уже могут быть строго заданы, например, если используются данные, полученные при выполнении программ, поэтому данную методику применяют реже.
Как следует из вышеизложенного, методики Джексона и Варнье-Орра могут использоваться только в том случае, если данные разрабатываемых программ могут быть представлены в виде иерархии или совокупности иерархий.
5.6. Case-технологии, основанные на структурных методологиях анализа и проектирования.
К нашему времени накоплен опыт успешного использования большинства известных методологий структурного анализа и проектирования в соответствующих CASE-средствах. Наибольшее распространение получили методологии: SADT (3, 3%), структурного системного анализа Гейна-Сарсона (20, 2%), структурного анализа и проектирования Йордана-Де (36, 5%), развития систем Джексона (7, 7%), развития структурных DSSD (Data Structured System Development) Варнье-Орра (5, 8%), анализ проектирования систем реального времени Уорда-Меллора и Хатли, информационного моделирования Мартина (22, 1%).
Как видно из приведенных статистических данных, наибольшее применение нашли структурные методологии, использующие диаграммы потоков данных. Это вызвано двумя причинами:
Диаграммы потоков данных более детально по сравнению с функциональными диаграммами отображают специфику многочисленных в настоящее время информационных систем: не требуют строгой типизации обрабатываемой информации, предусматривают возможность хранения данных, конкретизируют взаимодействие с внешним миром, предусматривают получение комплексной модели программного обеспечения и т. п.;
Разработан метод построения проектных спецификаций (структурных карт Джексона или Костантайна) по диаграммам потоков данных, что позволяет автоматически создавать такие спецификации.
После ввода данных необходимо дать пользователю возможность распечатки бланка справки и копии клиента. данная операция должна быть выполнена в обязательном порядке. Печать может быть осуществлена на два типа принтеров: ударного действия (матричные) и струйные. Печать справки на лазерных принтерах невозможна из-за повышенных требований к качеству бумаги. При печати справки на матричном принтере можно осуществить печать двух экземпляров (справка+копия) за один проход с применением копировальной бумаги. На струйном принтере необходимо печатать каждый экземпляр отдельно. Таки м образом нужно предусмотреть изменяемый пользователем счетчик числа копий или специальную функцию настройки на тип принтера.
Рис.2 Схема взаимодействия и сязей данных |
Разработка функциональной схемы программы.
Функциональный состав программы должен максимально обеспечивать необходимый набор возможностей для выполнения кассиром ОП его должностных обязанностей, связанных с вводом данных, регистрацией сделок и оформлением отчетных документов. Для этого составим примерный перечень функций, которые должны быть реализованы в нашей системе.
Примерный перечень функций системы.
1) Регистрация обменной операции
· Ввод данных по покупке валюты
· Ввод данных по продаже валюты
· Ввод данных по конверсии валюты
· Печать справки клиента
2) Просмотр документов
· Просмотр списка документов дня
· Просмотр списка архивных документов
3) Ведение справочников
· Ввод данных по кодам ценностей
· Ввод данных по видам документов
· Ввод данных по кодам валют
· Ввод курсов валют по датам
4) Генерация отчетных документов
· Печать реестра наличной иностранной валюты, купленной за наличные рубли;
· Печать реестра наличной иностранной валюты, проданной за наличные рубли;
· Печать реестра по обмену (конверсии) наличной иностранной валюты;
5) Прочие функции
· Ввод данных в поле ввода из справочника
· Перевод числа из цифровой формы в строчную (сумма прописью)
· Изменение вида курсора
· Сохранение данных в архивных файлах
Приведенный перечень охватывает все процедуры, описанные в разделе технологического процесса ОП и дополнен некоторыми функциями, которые будут необходимы в процессе ввода данных и их корректировки.
Разработка структурной схемы программы.
Структурная схема программного комплекса определяет в основных чертах и внешний вид проектируемой системы и принципы взаимодействия с пользователем. Схема проектируемой системы будет представлять собой иерархическую древовидную структуру, описывающую процедуры ввода, обработки и вывода данных. Построение программ информационно-справочного класса по такому принципу позволяет довольно легко производить модификацию системы в целом и облегчает восприятие и понимание принципа работы программы. Для построения структурной схемы необходимо определить иерархию и связь перечисленных выше процедур обработки данных. Естественно установить иерархию процедур в том виде, в каком они были описаны в предыдущей главе, поскольку таковая схема соответствует схеме «важности» и «употребимости» процедур. Структурная схема программы, с учетом всего вышеизложенного, представлена на рис 2.
Разработка экранного интерфейса программы
Существующие подходы к проектированию экранного интерфейса
Экранный интерфейс программы во многом определяет удобство работы пользователя и является одним из важных факторов, влияющих на эффективность его труда. Программа, выполняющая все возложенные на нее функции, обладающая высоким быстродействием может быть полностью непригодной для работы из-за неприемлемого интерфейса с пользователем. Еще буквально несколько лет назад существовал текстовый редактор, прекрасно иллюстрирующий такой подход к проектированию программного обеспечения. Вряд ли кому-то придется по душе редактор текста, в котором для вставки символа в строку нужно набрать однобуквенный код команды вставки, номер обрабатываемой строки (к счастью не двоичный), номер символа, после которого будет вставлен новый символ и собственно этот символ. Конечно такой подход абсолютно неприемлем.
Наиболее практичными и удобными с точки зрения пользователя можно считать системы, имеющие экранный интерфейс, построенный на основе системы всплывающих меню. Наиболее распространенными в настоящее время являются две идеологии (имеются в виду DOS-приложения), включающие в себя и определенную форму экранных окон и цветовую гамму и вид всплывающих списков. Это инструментальные Среды фирмы Borland, и операционная оболочка Norton, фирмы Symantec. Обе идеологии предусматривают определенное разбиение экранного пространства на области или зоны, предназначенные для конкретных информационных объектов и действий. Зоны могут быть в некоторой степени переконфигурированы по желанию пользователя: изменены размеры и положение на экране. Команды обработки данных вызываются из системы меню, присутствующего на экране постоянно (Borland), или вызываемого по функциональной клавише (Symantec).
И в том и в другом случае все команды системы распределены по функциональному признаку на группы и в главном меню присутствуют
собственно наименования групп команд. Выбрав группу, пользователь получает доступ к списку команд группы, в который могут быть включены также команды, объединенные в группы второго уровня и т.д.
Таким образом, создается система многоуровневого всплывающего меню. Применение такой идеологии обеспечивает удобство ориентировки в системе, имеющей достаточно сложное, многоуровневое меню с множеством выборов. Естественно, что увеличение вложенности и размеров списков выбора, должно иметь разумные границы, которые к счастью имеются в виде ограниченности экранного пространства монитора. В большинстве систем заложена также возможность настройки цветовой палитры по желанию пользователя. В операционной оболочке Norton предлагается выбор гаммы из нескольких стандартных вариантов, в системах фирмы Borland можно создать свою собственную цветовую гамму, вплоть до мельчайших деталей. Примерный вид некоторых экранных объектов приведен на рис.4,5.
Выбор идеологии экранного интерфейса