Введение в технологию разработки программных средств. Основные понятия и определения. Технология программирования — совокупность методов и средств, применяемых в процессе разработки программного обеспечения. Программа (program, routine) — упорядоченная последовательность команд (инструкций) компьютера для решения задачи. Программное обеспечение (software) — совокупность программ обработки данных и необходимых для их эксплуатации документов. Задача (problem, task) — проблема, подлежащая решению. Приложение (application) — программная реализация на компьютере решения задачи. Постановка задачи (problem definition) — это точная формулировка решения задачи на компьютере с описанием входной и выходной информации. Алгоритм — система точно сформулированных правил, определяющая процесс преобразования допустимых исходных данных (выходной информации) в желаемый результат (выходную информацию) за конечное число шагов. Программирование (programming) — теоретическая и практическая деятельность, связанная с созданием программ. Основные характеристики программ: 1) алгоритмическая сложность; 2) состав функций обработки информации; 3) объем файлов, используемых программой; 4) требования к операционной системе (ОС) и техническим средствам обработки, в том числе объем дисковой памяти, размер оперативной памяти для запуска программы, тип процессора, версия ОС, наличие вычислительной сети и т. д. Показатели качества программы: 1) мобильность (многоплатформенность) — независимость от технического комплекса системы обработки данных, ОС, сетевых возможностей, специфики предметной области задачи и т. д.; 2) надежность — устойчивость, точность выполнения предписанных функций обработки, возможность диагностики возникающих ошибок в работе программы; 3) эффективность как с точки зрения требований пользователя, так и расхода вычислительных ресурсов; 4) учет человеческого фактора — дружественный интерфейс, контекстнозависимая подсказка, хорошая документация; 5) модифицируемость — способность к внесению изменений, например, расширение функций обработки, переход на другую техническую базу обработки и т. п. 6) коммуникативность — максимально возможная интеграция с другими программами, обеспечение обмена данными между программами. Технология разработки программного обеспечения – это совокупность процессов и методов создания программного продукта в заданные сроки и с заданными характеристиками качества. Программный продукт (ПП) – совокупность компьютерных программ, процедур и связанных с ними документации и данных. Программный модуль – отдельно компилируемая часть программного кода (программы). Программный проект (project) – это временное предприятие, предназначенное для создания уникальных продуктов, услуг или результатов. Методология – система принципов и способов организации процесса разработки программных средств. Различают три подхода к разработке ПО: • метод структурного проектирования сверху вниз; • метод потоков данных; • объектно-ориентированное проектирование. Система – это совокупность взаимодействующих компонентов, работающих совместно для достижения определённых целей. Современный программный продукт представляет собой систему, которая создаётся коллективом разработчиков. Для описания системы, проектирования отдельных компонентов, обсуждения проблем с заказчиком и внутри коллектива применяются различные условные обозначения – нотации. Нотация – система условных обозначений и правила их применения. В технологиях разработки программного обеспечения (ТРПО) применяются различные виды нотаций: блок-схемы, UML, псевдокод, неформальные обозначения. Классификация программного обеспечения Можно выделить три класса ПО: 1) системное; 2) пакеты прикладных программ (прикладное ПО); 3) инструментарий технологии программирования (инструментальные средства для разработки ПО). Системное ПО (System Software) — совокупность программ и программных комплексов для обеспечения работы компьютера и вычислительных сетей. Системное ПО направлено: • на создание операционной среды функционирования других программ; • обеспечение надежной н эффективной работы самого компьютера и вычислительной сети; • проведение диагностики и профилактики аппаратуры компьютера и вычислительных сетей; • выполнение вспомогательных технологических процессов (копирование, архивация, восстановление файлов программ и БД и т.п.). Прикладное ПО служит программным инструментарием решения функциональных задач и является самым многочисленным классом ПО. В данный класс входят программные продукты, выполняющие обработку информации различных предметных областей. Таким образом, прикладное ПО — комплекс взаимосвязанных программ для решения задач определенного класса предметной области. Системное программное обеспечение В составе системного ПО можно выделить две составляющие: 1) базовое ПО; 2) сервисное ПО. Базовое ПО — минимальный набор программных средств, обеспечивающих работу компьютера. Сервисное ПО — программы и программные комплексы, которые расширяют возможности базового ПО и организуют более удобную среду работы пользователя. В базовое ПО входят: 1) операционная система; 2) операционные оболочки (текстовые, графические); 3) сетевая операционная система. Операционная система — совокупность программных средств, обеспечивающих управление аппаратной частью компьютера и прикладными программами, а также их взаимодействием между собой и пользователем. ОС выполняет следующие функции: • управление работой каждого блока ПО и их взаимодействием; • управление выполнением программ; • организацию хранения информации во внешней памяти; • взаимодействие пользователя с компьютером (поддержку интерфейса пользователя). Операционные системы для ПК делятся: • на одно- и многозадачные (в зависимости от числа параллельного выполнения прикладных процессов); • одно- и многопользовательские (в зависимости от числа пользователей, одновременно работающих с ОС); • непереносимые и переносимые на другие типы компьютеров; • несетевые и сетевые, обеспечивающие работу в ВС ЭВМ. Сетевая ОС — это комплекс программ, обеспечивающий обработку, передачу и хранение данных в сети. Сетевая ОС предоставляет пользователям различные виды сетевых служб (управление файлами, электронная почта, процессы управления сетью и т. д.), поддерживает работу в абонентских системах. Сетевые ОС используют архитектуру «клиент — сервер» или одноранговую архитектуру. Вначале эти ОС поддерживали только ЛВС, сейчас они распространяются и на объединения ЛВС. Операционные оболочки — специальные программы, предназначенные для облегчения общения пользователя с командами ОС. Операционные оболочки имеют текстовый и графический варианты интерфейса конечного пользователя. Утилиты — программы, служащие для выполнения вспомогательных операций обработки данных или обслуживания компьютеров. Наибольшее распространение имеют следующие утилиты: • Norton Utilities; • программа резервного копирования; •Антивирусные программы Касперского; • и др.). Средства для создания приложений — совокупность языков и систем программирования, инструментальные среды пользователя, а также различные программные компоненты для отладки и поддержки создаваемых программ. Язык программирования — это формализованный язык для описания алгоритма решения задач на компьютере. Языки программирования можно условно разделить на следующие классы: • машинные языки — это языки, воспринимаемые аппаратной частью компьютера (машинные коды); • машинно-ориентированные языки, отражающие структуру конкретного типа компьютера (ассемблер); • процедурно-ориентированные языки — это языки, в которых имеется возможность описания программы как совокупности процедур, или подпрограмм (Си, Паскаль и др.); • проблемно-ориентированные языки, предназначенные для решения задач определенного класса (ЛИСП, ПРОЛОГ)- Другой классификацией языков является их деление на языки, ориентированные на реализацию основ структурного программирования, основанного на модульной структуре программного продукта и типовых управляющих структурах алгоритмов обработки данных различных программных модулей, и объектно-ориентированные языки, поддерживающие понятие объектов, их свойств и методов обработки. Системы программирования включают: • компилятор (транслятор); • интегрированную среду разработки программ (не всегда); • отладчик; • средства оптимизации кода программ; • набор библиотек; • редактор связей; • сервисные средства (утилиты) (для работы с библиотеками, текстовыми и двоичными файлами); • справочные системы; • систему поддержки и управления продуктами программного комплекса. Компилятор транслирует всю программу без се выполнения. Трансляторы (интерпретаторы) выполняют пооперационную обработку и выполнение программы. Отладчики (debugger) — специальные программы, предназначенные для трассировки и анализа выполнения других программ. Трассировка — это обеспечение выполнения в пооператорном варианте. Инструментальная среда пользователя — это специальные средства, встроенные в пакеты прикладных программ, такие как: • библиотека функций, процедур, объектов и методов обработки; • макрокоманды; • клавишные макросы; • языковые макросы; • конструкторы экранных форм и объектов; • генераторы приложений; • языки запросов высокого уровня; • конструкторы меню и др. Методы проектирования программных систем • метод структурного проектирования сверху вниз; • метод потоков данных; • объектно-ориентированное проектирование. При структурном подходе логическая структура любой программы выражается комбинацией трёх базовых структур: следование, развилка (ветвление), повторение (цикл). Это позволяет создавать ясные, лёгкие для понимания программы. Метод потоков данных. В этом методе программная система рассматривается как преобразователь входных потоков в выходные. Метод потоков данных, как и структурный метод, с успехом применялся при решении ряда сложных задач, в частности, в системах информационного обеспечения, где существуют прямые связи между входными и выходными потоками системы и где не требуется уделять особого внимания быстродействию. Объектно-ориентированный подход использует объектную декомпозицию, то есть поведение программы описывается в терминах взаимодействия объектов. Основные концепции ООП (инкапсуляция, наследование, полиморфизм) позволяют значительно упростить процесс отладки и повторного использования готового программного кода. В основе ООП лежит представление о том, что программную систему необходимо проектировать как совокупность взаимодействующих друг с другом объектов, рассматривая каждый объект как экземпляр определенного класса, причем классы образуют иерархию. Объектно-ориентированный подход отражает топологию новейших языков высокого уровня. Полиморфизм – один фрагмент кода может работать с разными типами данных. Инкапсуляция – сокрытие. Ограничение доступа к различным компонентам программ. Наследование – это свойство системы, позволяющее описывать новый класс на основе существующего с частичной или полностью заимствованной функциональностью. ДЕКОМПОЗИЦИЯ При проектировании сложной программной системы необходимо разделять ее на все меньшие и меньшие подсистемы, каждую из которых можно совершенствовать независимо. В этом случае для понимания любого уровня системы необходимо одновременно держать в уме информацию лишь о немногих ее частях (отнюдь не о всех). Алгоритмическая декомпозиция. Существует структурное проектирование «сверху вниз», и декомпозиция в этом случае понимается как обычное разделение алгоритмов, где каждый модуль системы выполняет один из этапов общего процесса. Объектно-ориентированная декомпозиция. При этой декомпозиции мир представлен совокупностью автономных действующих объектов, которые взаимодействуют друг с другом, чтобы обеспечить поведение системы, соответствующее более высокому уровню. Абстракция выделяет существенные характеристики некоторого объекта, отличающие его от всех других видов объектов и, таким образом, четко определяет его концептуальные границы с точки зрения наблюдателя. Абстракция сущности Объект представляет собой полезную модель некой сущности в предметной области Абстракция поведения Объект состоит из обобщенного множества операций Абстракция виртуальной машины Объект группирует операции, которые либо вместе используются более высоким уровнем управления, либо сами используют некоторый набор операций низкого уровня Произвольная абстракция Объект включает в себя набор операций, не имеющих друг с другом ничего общего Жизненный цикл – совокупность процессов и этапов развития организмов живой природы, технических систем и продуктов производства от момента зарождения или появления потребности в их создании до прекращения функционирования или применения. В обобщённом виде ЖЦ ПС включает следующие этапы: 1. Определение требование к ПС. 2. Анализ требований и создание концепции ПС. 3. Проектирование. 4. Реализация. 5. Сопровождение. 6. Снятие с эксплуатации. Этапы анализа организационной системы предприятия и технологии достижения требуемых целей: • Понять предметную область • Выделить проблемы для решения • Найти возможные варианты решения • Выбрать подходящий вариант решения • Определить роль компьютерной программы в решении проблемы • Определить пределы возможностей программы • Оценить влияние программы на существующую систему • Определить способ внедрения программы в существующую систему предприятия • Оценить экономический эффект от внедрения программы • Разработать функциональное описание для следующей стадии - системного анализа Качество программных систем Каждая программа входящая в систему, должна отвечать таким требованиям, как правильность, точность, совместимость, защищенность, полезность, эффективность, проверяемость и адаптируемость. Будем говорить, что программа является • правильной, если она функционирует в соответствии со спецификацией. Подразумевается, что спецификации составлены в четкой форме, позволяющей однозначно судить о том, что действительно ли программа отвечает перечисленным в ней требованиям; • точной, если выдаваемые ею данные имеют допустимые отклонения от аналогичных результатов, полученных с помощью идеальных математических зависимостей; • совместимой, если она работает должным образом не только автономно, но и как составная часть всей программной системы, осуществляющей обработку информации; • надежной, если она при всех условиях обеспечивает полную повторяемость результатов; • универсальной, если она правильно работает при любых допустимых вариантах, исходных данных. В ходе разработки программ должны предусматриваться специальные средства защиты от ввода неправильных данных, обеспечивающие целостность системы; • защищенной, если она сохраняет работоспособность при возникновении сбоев; • полезной, если задача, которую она решает, представляет практическую ценность; • эффективной, если объем требуемых для ее работы ресурсов ЭВМ не превышает допустимого предела; • проверяемой, если ее качества могут быть продемонстрированы на практике; • адаптируемой, если она допускает быструю модификацию с целью приспособления к изменяющимся условиям функционирования. Адаптируемость в значительной степени зависит от конструкции программы, от того, насколько квалифицированно она составлена и полно снабжена документацией. Связность модуля Связность Сила связности Функциональная Последовательная Коммуникативная 10 (сильная связь) 9 7 Процедурная Временная Логическая По совпадению 5 3 1 0 (слабая связность) Меры сцепления модулей. Сцепление Независимое По данным По образцу По общей области По управлению По высшим ссылкам По кодам Степень сцепления модулей 0 (слабое сцепление) 1 3 4 5 7 9 (сильное сцепление)