Малышенко Владислав Викторович
- Технология программирования и основные этапы ее развития
- Проблемы разработки сложных программных систем
- Блочно-иерархический подход к созданию сложных систем
- Жизненный цикл и этапы разработки программного обеспечения
- Эволюция моделей жизненного цикла программного обеспечения
- Ускорение разработки программного обеспечения. Технология RAD
- Оценка качества процессов создания программного обеспечения
Технологией программирования называют совокупность методов и средств, используемых в процессе разработки программного обеспечения. Технология программирования представляет собой набор технологических инструкций, включающих:
- указание последовательности выполнения технологических операций;
- перечисление условий, при которых выполняется та или иная операция;
- описания самих операций, где для каждой операции определены исходные данные, результаты, а также инструкции, нормативы, стандарты, критерии и методы оценки и т. п.
Методические материалы,
инструкции, нормативы и
стандарты, критерии оценки
результатов
Технологическая
операция
Исходные данные
в стандартном
представлении
(документы,
рабочие материалы,
результаты
предыдущей
операции)
Результаты в
стандартном
представлении
Исполнители,
программные и
технические средства
Программа
Данные
Первый этап – «стихийное» программирование ( 3 )
(Идея написания подпрограмм появилась гораздо раньше, но отсутствие средств поддержки в первых языковых средствах существенно снижало эффективность их применения.)
Подпрограммы можно было сохранять и использовать в других программах. В результате были созданы огромные библиотеки расчетных и служебных подпрограмм, которые по мере надобности вызывались из разрабатываемой программы.
Типичная программа того времени состояла из основной программы, области глобальных данных и набора подпрограмм (в основном библиотечных), выполняющих обработку всех данных или их части.
Программа
Данные
1
2
…
n
Программа
Данные
2
n
1
Данные
Данные
Данные
- Сложность разрабатываемого программного обеспечения при использовании подпрограмм с локальными данными по-прежнему ограничивалась возможностью программиста отслеживать процессы обработки данных, но уже на новом уровне. Однако появление средств поддержки подпрограмм позволило осуществлять разработку программного обеспечения нескольким программистам параллельно.
- В начале 60-х годов XX в. разразился «кризис программирования». Он выражался в том, что фирмы, взявшиеся за разработку сложного программного обеспечения, такого, как операционные системы, срывали все сроки завершения проектов.
- Проект устаревал раньше, чем был готов к внедрению, увеличивалась его стоимость, и в результате многие проекты так никогда и не были завершены.
- Объективно все это было вызвано несовершенством технологии программирования.
- Разработка «снизу-вверх» - подход, при котором вначале проектировали и реализовывали сравнительно простые подпрограммы, из которых затем пытались построить сложную программу.
- В отсутствии четких моделей описания подпрограмм и методов их проектирования создание каждой подпрограммы превращалось в непростую задачу, интерфейсы подпрограмм получались сложными, и при сборке программного продукта выявлялось большое количество ошибок согласования.
- Исправление таких ошибок, как правило, требовало серьезного изменения уже разработанных подпрограмм, что еще более осложняло ситуацию, так как при этом в программу часто вносились новые ошибки, которые также необходимо было исправлять...
- В конечном итоге процесс тестирования и отладки программ занимал более 80% времени разработки, если вообще когда-нибудь заканчивался.
Структурный подход к программированию
декомпозиция процедурной
Поддержка принципов структурного программирования была заложена в основу так называемых процедурных языков программирования.
Они включали основные «структурные» операторы передачи управления, поддерживали вложение подпрограмм, локализацию и ограничение области «видимости» данных. (PL/1, ALGOL-68, Pascal, С)
Одновременно со структурным программированием появилось огромное количество языков, базирующихся на других концепциях, но большинство из них не выдержало конкуренции.
структурирования данных
технология модульного программирования
Основная программа
Глобальные данные
Модуль k
Модуль 1
Данные
Данные
n 1
1
n k
1
Данные
Данные
Данные
Данные
Модульное программирование предполагает выделение групп подпрограмм, использующих одни и те же глобальные данные в отдельно компилируемые модули , например, модуль графических ресурсов, модуль подпрограмм вывода на принтер. Связи между модулями при использовании данной технологии осуществляются через специальный интерфейс, в то время как доступ к реализации модуля запрещен. Эту технологию поддерживают современные версии языков Pascal и С (C++), языки Ада и Modula.
Объектно-ориентированное программирование объектов наследованием сообщений
Объектная структура программы впервые была использована в языке имитационного моделирования сложных систем Simula, появившемся еще в 60-х годах XX в.
Естественный для языков моделирования способ представления программы получил развитие в другом специализированном языке моделирования - языке Smalltalk (70-е годы XX в.), а затем был использован в новых версиях универсальных языков программирования, таких, как Pascal, C++, Modula, Java.
Основным достоинством объектно-ориентированного программирования по сравнению с модульным программированием является «более естественная» декомпозиция программного обеспечения, которая существенно облегчает его разработку.
Это приводит к более полной локализации данных и интегрированию их с подпрограммами обработки, что позволяет вести практически независимую разработку отдельных частей программы. Кроме этого, объектный подход предлагает новые способы организации программ, основанные на механизмах наследования, полиморфизма, композиции, наполнения.
В результате существенно увеличивается показатель повторного использования кодов и появляется возможность создания библиотек классов для различных применений.
Бурное развитие технологий программирования, основанных на объектном подходе, позволило решить многие проблемы.
Так были созданы среды, поддерживающие визуальное программирование , например, Delphi, C++ Builder, Visual C++ и т. д.
При использовании визуальной среды у программиста появляется возможность проектировать некоторую часть, например, интерфейсы будущего продукта, с применением визуальных средств добавления и настройки специальных библиотечных компонентов.
- фактически отсутствуют стандарты компоновки двоичных результатов компиляции объектов в единое целое даже в пределах одного языка программирования: компоновка объектов, полученных разными компиляторами C++ в лучшем случае проблематична, что приводит к необходимости разработки программного обеспечения с использованием средств и возможностей одного языка программирования высокого уровня и одного компилятора, а значит, требует одного языка программирования высокого уровня и одного компилятора, а значит, требует наличия исходных кодов используемых библиотек классов;
- изменение реализации одного из программных объектов, как минимум, связано с перекомпиляцией соответствующего модуля и перекомпоновкой всего программного обеспечения, использующего данный объект.
Компонентный подход стандартизованные двоичные интерфейсы
В отличие от обычных объектов объекты-компоненты можно собрать в динамически вызываемые библиотеки или исполняемые файлы, распространять в двоичном виде (без исходных текстов) и использовать в любом языке программирования, поддерживающем соответствующую технологию.
Компонентный подход лежит в основе технологий, разработанных на базе COM (Component Object Model - компонентная модель объектов), и технологии создания распределенных приложений CORBA (Common Object Request Broker Architecture - общая архитектура с посредником обработки запросов объектов). Эти технологии используют сходные принципы и различаются лишь особенностями их реализации.
Компьютер 2
Компьютер 1
Приложение 3
Приложение 2
Приложение 1
Объект
Объект
Объект
Операционная система
Операционная система
Объект
Объект
Технология СОМ фирмы Microsoft является развитием технологии OLE I (Object Linking and Embedding - связывание и внедрение объектов), которая использовалась в ранних версиях Windows для создания составных документов.
Технология СОМ определяет общую парадигму взаимодействия программ любых типов : библиотек, приложений, операционной системы, т. е. позволяет одной части программного обеспечения использовать функции в разных процессах на одном компьютере или на разных компьютерах.
Модификация СОМ, обеспечивающая передачу вызовов между компьютерами, называется DCOM (Distributed COM - распределенная СОМ).
COM технологии
По технологии СОМ приложение предоставляет свои службы, используя специальные объекты - объекты СОМ , которые являются экземплярами классов СОМ . Объект СОМ так же, как обычный объект включает поля и методы, но в отличие от обычных объектов каждый объект СОМ может реализовывать несколько интерфейсов, обеспечивающих доступ к его полям и функциям.
Это достигается за счет организации отдельной таблицы адресов методов для каждого интерфейса. При этом интерфейс обычно объединяет несколько однотипных функций. Кроме того, классы СОМ поддерживают наследование интерфейсов , но не поддерживают наследования реализации , т. е. не наследуют код методов.
CASE- технология
Отличительной особенностью современного этапа развития технологии программирования, кроме изменения подхода, является создание и внедрение автоматизированных технологий разработки и сопровождения программного обеспечения, которые были названы CASE-технологиями
(Computer-Aided Software/System Engineering ─ разработка программного обеспечения, программных систем с использованием компьютерной поддержки).
CASE- технология
Без средств автоматизации разработка достаточно сложного программного обеспечения на настоящий момент становится трудно осуществимой: память человека уже не в состоянии фиксировать все детали, которые необходимо учитывать при разработке программного обеспечения.
На сегодня существуют CASE-технологии, поддерживающие как структурный, так и объектный подходы к программированию.
Появление нового подхода не означает, что отныне все программное обеспечение будет создаваться из программных компонентов, но анализ существующих проблем разработки сложного программного обеспечения показывает, что он будет применяться достаточно широко.
Большинство современных программных систем объективно очень сложны.
Эта сложность обуславливается многими причинами, главной из которых является логическая сложность решаемых ими задач.
В наше время, когда созданы мощные компьютерные сети, появилась возможность переложить на них решение сложных ресурсоемких задач, о компьютеризации которых раньше никто, и не думал.
Сейчас в процесс компьютеризации вовлекаются совершенно новые предметные области, а для уже освоенных областей усложняются уже сложившиеся постановки задач.
совокупность взаимозависимых подсистем .
- Каждую подсистему разделить на подсистемы и т. д. до самого нижнего «элементарного» уровня.
- На элементарном уровне система, состоит из немногих типов подсистем, по-разному скомбинированных и организованных. Иерархии такого типа получили название «целое-часть».
- Поведение системы в целом обычно оказывается сложнее поведения отдельных частей.
- В природе существует еще один вид иерархии - иерархия «простое-сложное» или иерархия развития (усложнения) систем в процессе эволюции.
- декомпозиции
- пошаговой детализации .
- иерархии
В основе блочно-иерархического подхода лежат декомпозиция и иерархическое упорядочение.
Важную роль играют также следующие принципы:
- непротиворечивость — контроль согласованности элементов между собой;
- полнота — контроль на присутствие лишних элементов;
- формализация — строгость методического подхода;
- повторяемость — необходимость выделения одинаковых блоков для удешевления и ускорения разработки;
- локальная оптимизация — оптимизация в пределах уровня иерархии.
Совокупность языков моделей, постановок задач, методов описаний некоторого иерархического уровня принято называть уровнем проектирования .
Конкретизация
Абстракция
Объект
Уровень 0
Блок n
Блок 1
Блок 2
Уровень 1
Уровень 2
Блок n .k n
Блок n .1
Блок 2.k 2
Блок 2.1
Блок 1 .k 1
Блок 1 .1
Часть II . Жизненный цикл
Жизненным циклом программного обеспечения называют период от момента появления идеи создания некоторого программного обеспечения до момента завершения его поддержки фирмой-разработчиком или фирмой, выполнявшей сопровождение.
Состав процессов жизненного цикла регламентируется международным стандартом ISO/ I EC 12207: 1995 « Information Technology - Software Life Cycle Processes » («Информационные технологии - Процессы жизненного цикла программного обеспечения»).
Этот стандарт описывает структуру жизненного цикла программного обеспечения и его процессы. Процесс жизненного цикла определяется как совокупность взаимосвязанных действий, преобразующих некоторые входные данные в выходные. Каждый процесс характеризуется определенными задачами и методами их решения, а также исходными данными и результатами.
Вспомогательные процессы
Основные процессы
Приобретение
Документирование
Поставка
Управление конфигурацией
Разработка
Обеспечение качества
Эксплуатация
Верификация
Сопровождение
Аттестация
Организационные процессы
Совместная оценка
Управление
Аудит
Усовершенствование
Инфраструктура
Решение проблем
Обучение
- подготовительную работу
- анализ требовании к системе;
- проектирование архитектуры системы
- анализ требований к программному обеспечению
- проектирование архитектуры программного обеспечения
- детальное проектирование программного обеспечения
- кодирование и тестирование программного обеспечения
- интеграцию программного обеспечения
- квалификационное тестирование программного обеспечения;
- интеграцию системы
- квалификационное тестирование системы
- установку программного обеспечения
- приемку программного обеспечения
каскадная схема разработки программного обеспечения
технических
Постановка
задачи
Анализ
Проектирование
Реализация
Модификация
Постановка
задачи
Анализ
Проектирование
Реализация
Модификация
схемой с промежуточным контролем
Для преодоления перечисленных проблем в середине 80-х годов XX в, была предложена спиральная схема . В соответствии с данной схемой программное обеспечение создается не сразу, а итерационно с использованием метода прототипирования, базирующегося на создании прототипов. Именно появление прототипирования привело к тому, что процесс модификации программного обеспечения перестал восприниматься, как «необходимое зло», а стал восприниматься как отдельный важный процесс.
Прототипом называют действующий программный продукт, реализующий отдельные функции и внешние интерфейсы разрабатываемого программного обеспечения.
CASE -технологии представляют собой совокупность методологий анализа, проектирования, разработки и сопровождения сложных программных систем, основанных как на структурном, так и на объектном подходах, которые поддерживаются комплексом взаимосвязанных средств автоматизации.
В основе любой CASE-технологии лежит парадигма/методология/метод/нотация/средство.
Методология строится на базе некоторого подхода и определяет шаги работы, их последовательность, а также правила распределения и назначения методов.
Метод определяет способ достижения той или иной цели - выполнение шага работы.
Нотацией
Средства
- обеспечивают автоматизированный контроль совместимости спецификаций проекта;
- уменьшают время создания прототипа системы;
- ускоряют процесс проектирования и разработки;
- автоматизируют формирование проектной документации для всех этапов жизненного цикла в соответствии с современными стандартами;
- частично генерируют коды программ для различных платформ разработки;
- поддерживают технологии повторного использования компонентов системы;
- обеспечивают возможность восстановления проектной документации по имеющимся исходным кодам.
Использование CASE-средств позволяет существенно снизить трудозатраты на разработку сложного программного обеспечения в основном за счет автоматизации процессов документирования и контроля.
Однако следует иметь в виду, что современные CASE-средства дороги, а их использование требует более высокой квалификации разработчиков .
Следовательно, их имеет смысл использовать в сложных проектах, причем, чем сложнее разрабатываемое программное обеспечение, тем больше выигрыш от использования CASE-технологий. На сегодняшний день практически все промышленно производимое сложное программное обеспечение разрабатывается с использованием CASE-средств.
технология RAD (Rapid Application Development – Быстрая разработка приложений).
Эта технология ориентирована, как следует из названия, на максимально быстрое получение первых версий разрабатываемого программного обеспечения. Она предусматривает выполнение следующих условий:
- ведение разработки небольшими группами разработчиков (3-7 человек), каждая из которых проектирует и реализует отдельные подсистемы проекта - позволяет улучшить управляемость проекта;
- использование итерационного подхода способствует уменьшению времени получения работоспособного прототипа;
- наличие четко проработанного графика цикла, рассчитанного не более чем на три месяца, существенно увеличивает эффективность работы.
RAD
- международные стандарты серии ISO 9000 (ISO 9000 - ISO 9004);
- СММ - Capability Maturity Model - модель зрелости (совершенствования) процессов создания программного обеспечения, предложенная SEI (Software Engineering Institute – институт программирования при университете Карнеги-Меллон);
- рабочая версия международного стандарта ISO/IEC 15504 : Information Technology – Software Process Assessment; эта версия более известна под названием SPICE - (Software Process Improvement and Capability dEtermination - определение возможностей и улучшение процесса создания программного обеспечения).
СММ определяет пять уровней зрелости организаций-разработчиков, причем каждый следующий уровень включает в себя все ключевые характеристики предыдущих.
СММ. Начальный уровень (initial level)
- не существует стабильных условий
- резко снижает качество
- процесс разработки сводится к написанию кода
СММ. Повторяемый уровень (repeatable level)
- технологии управления проектами
- группа обеспечения качества
СММ. Определенный уровень (defined level)
- Характеризуется тем, что стандартный процесс создания и сопровождения программного обеспечения полностью документирован.
- В процессе стандартизации происходит переход на наиболее эффективные практики и технологии.
- Для создания и поддержания подобного стандарта в организации должна быть создана специальная группа.
- Наличие на предприятии программы постоянного повышения квалификации и обучения сотрудников .
- Начиная с этого уровня, организация перестает зависеть от качеств конкретных разработчиков, и процесс не имеет тенденции скатываться на уровень ниже в стрессовых ситуациях.
СММ. Управляемый уровень (managed level)
- количественные показатели качества ,
СММ. Оптимизирующий уровень (optimizing level)
В основе стандарта лежит оценка процессов . Эта оценка выполняется путем сравнения процесса разработки программного обеспечения, существующего в данной организации, с описанной в стандарте моделью. Анализ результатов, полученных на этом этапе, помогает определить сильные и слабые стороны процесса, а также внутренние риски, присущие данному процессу. Это помогает оценить эффективность процессов, определить причины ухудшения качества и связанные с этим издержки во времени или стоимости.
Затем выполняется определение возможностей процесса , т. е. возможностей его улучшения. В результате в организации может появиться понимание необходимости улучшения того или иного процесса . К этому моменту цели совершенствования процесса уже четко сформулированы и остается только техническая реализация поставленных задач. После этого весь цикл работ начинается сначала.
Безусловно, совершенствование процессов жизненного цикла программного обеспечения абсолютно необходимо. Однако следует иметь в виду, что построение «более зрелого» процесса разработки не обязательно обеспечивает создание более качественного программного обеспечения. Это хотя и связанные, но совершенно различные процессы.
Использование формальных моделей и методов позволяет создавать понятные, непротиворечивые спецификации на разрабатываемое программное обеспечение. Конечно, внедрение таких методов имеет смысл, хотя оно весьма дорого и трудоемко, а возможности их применения весьмаu1086 ограничены. Основная же проблема - проблема сложности разрабатываемого программного обеспечения с совершенствованием процессов разработки пока не разрешена.
Создание программного обеспечения по-прежнему предъявляет повышенные требования к квалификации тех, кто этим занимается: проектировщикам программного обеспечения и непосредственно программистам.
Технологии программирования:
- Стихийный подход
- Структурный подход
- Модульный подход
- Объектно-ориентированный подход
- Компонентный подход
- CASE -технологии
- JAVA подход
Для описания жизненного цикла создания ПО используются модели:
- Каскадная модель
- Каскадная модель с промежуточным контролем
- Спиральная модель
- CASE- технологии
- RAD- технологии
Для оценки качества ПО разработаны стандарты: