Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Сопровождение - это процесс создания и внедрения новых версий программного продукта.
Причинами выпуска новых версий могут служить: • необходимость исправления ошибок, выявленных в процессе эксплуатации предыдущих версий; • необходимость совершенствования предыдущих версий, например, улучшения интерфейса, расширения состава выполняемых функций или повышения его производительности; • изменение среды функционирования, например, появление новых технических средств и/или программных продуктов, с которыми взаимодействует сопровождаемое программное обеспечение.
На этом этапе в программный продукт вносят необходимые изменения, которые так же, как в остальных случаях, могут потребовать пересмотра проектных решений, принятых на любом предыдущем этапе. С изменением модели жизненного цикла программного обеспечения (см. далее) роль этого этапа существенно возросла, так как продукты теперь создаются итерационно: сначала выпускается сравнительно простая версия, затем следующая с большими возможностями, затем следующая и т. д. Именно это и послужило причиной выделения этапа сопровождения в отдельный процесс жизненного цикла в соответствии с стандартом ISO/IEC 12207. Рассматриваемый стандарт только называет и определяет процессы жизненного цикла программного обеспечения, не конкретизируя в деталях, как реализовывать или выполнять действия и задачи, включенные в эти процессы. Эти вопросы регламентируются соответствующими методами, методиками и т. п. Прежде, чем перейти к подробному рассмотрению последних, проанализируем эволюцию схем разработки программного обеспечения от момента их появления до настоящего времени.
БЛОЧНО-ИЕРАРХИЧЕСКИЙ ПОДХОД К СОЗДАНИЮ СЛОЖНЫХ СИСТЕМ Подавляющее большинство сложных систем как в природе, так и в технике имеет иерархическую внутреннюю структуру. Это связано с тем, что обычно связи элементов сложных систем различны как по типу, так и по силе, что и позволяет рассматривать эти системы как некоторую совокупность взаимозависимых подсистем. Внутренние связи элементов таких подсистем сильнее, чем связи между подсисте- мами. Например, компьютер состоит из процессора, памяти и внешних устройств, а Солнечная система включает Солнце и планеты, вра- щающиеся вокруг него. В свою очередь, используя то же различие связей, можно каждую подсистему разделить на подсистемы и т.д. до самого нижнего «эле- ментарного» уровня, причём выбор уровня, компоненты которого сле- дует считать элементарными, остаётся за исследователем. На элемен- тарном уровне система, как правило, состоит из немногих типов под- систем, по-разному скомбинированных и организованных. Иерархии такого типа получили название «целое-часть». Поведение системы в целом обычно оказывается сложнее поведе- ния отдельных частей, причём из-за более сильных внутренних связей особенности системы в основном обусловлены отношениями между её частями, а не частями как таковыми. В природе существует ещё один вид иерархии – иерархия «про- стое-сложное» или иерархия развития (усложнения) систем в процессе эволюции. В этой иерархии любая функционирующая система являет- ся результатом развития более простой системы. Именно данный вид иерархии реализуется механизмом наследования объектно-ориентиро- ванного программирования. Будучи в значительной степени отражением природных и техни- ческих систем, программные системы обычно являются иерархиче- скими, т.е. обладают описанными выше свойствами. На этих свойствах иерархических систем строится блочно-иерархический подход к их исследованию или созданию. Этот подход предполагает сначала соз- давать части таких объектов (блоки, модули), а затем собирать из них сам объект. Процесс разбиения сложного объекта на сравнительно независи- мые части получил название декомпозиции. При декомпозиции учи- тывают, что связи между отдельными частями должны быть слабее, чем связи элементов внутри частей. Кроме того, чтобы из полученных частей можно было собрать разрабатываемый объект, в процессе де- композиции необходимо определить все виды связей частей между собой. При создании очень сложных объектов процесс декомпозиции выполняется многократно: каждый блок, в свою очередь, декомпози- руют на части, пока не получают блоки, которые сравнительно легко разработать. Данный метод разработки получил название пошаговой детализации. Существенно и то, что в процессе декомпозиции стараются выде- лить аналогичные блоки, которые можно было бы разрабатывать на общей основе. Таким образом, как уже упоминалось выше, обеспечи- вают увеличение степени повторяемости кодов и, соответственно, снижение стоимости разработки.
Результат декомпозиции обычно представляют в виде схемы ие- рархии, на нижнем уровне которой располагают сравнительно простые блоки, а на верхнем – объект, подлежащий разработке. На каждом ие- рархическом уровне описание блоков выполняют с определённой сте- пенью детализации, абстрагируясь от несущественных деталей. Следо- вательно, для каждого уровня используют свои формы документации и свои модели, отражающие сущность процессов, выполняемых каждым блоком. Так для объекта в целом, как правило, удаётся сформулировать лишь самые общие требования, а блоки нижнего уровня должны быть специфицированы так, чтобы из них действительно можно было собрать работающий объект. Другими словами, чем больше блок, тем более аб- страктным должно быть его описание (рис. 1.8). При соблюдении этого принципа разработчик сохраняет возмож- ность осмысления проекта и, следовательно, может принимать наибо- лее правильные решения на каждом этапе, что называют локальной оптимизацией (в отличие от глобальной оптимизации характеристик объектов, которая для действительно сложных объектов не всегда воз- можна). Итак, в основе блочно-иерархического подхода лежат декомпози- ция и иерархическое упорядочение. Важную роль играют также сле- дующие принципы: - формализация – строгость методического подхода; - повторяемость – необходимость выделения одинаковых бло- ков для удешевления и ускорения разработки; - локальная оптимизация – оптимизация в пределах уровня ие- рархии; Рис. 1.8. Соотношение абстрактного и конкретного в описании блоков при блочно-иерархическом подходе
- непротиворечивость – контроль согласованности элементов между собой; - полнота – контроль на присутствие лишних элементов. Совокупность языков моделей, постановок задач, методов описа- ний некоторого иерархического уровня принято называть уровнем проектирования. Каждый объект в процессе проектирования, как правило, прихо- дится рассматривать с нескольких сторон. Различные взгляды на объ- ект проектирования принято называть аспектами проектирования. Помимо того, что использование блочно-иерархического подхода делает возможным создание сложных систем, он также: - упрощает проверку работоспособности как системы в целом, так и отдельных блоков; - обеспечивает возможность модернизации систем, например, замены ненадёжных блоков с сохранением их интерфейсов. Необходимо отметить, что использование блочно-иерархического подхода применительно к программным системам стало возможным только после конкретизации общих положений подхода и внесения некоторых изменений в процесс проектирования. При этом структурный подход учитывает только свойства иерархии «целое-часть», а объектный – использует ещё и свойства иерархии «простое-сложное».
ЭВОЛЮЦИЯ, КЛАССИФИКАЦИЯ В развитии инструментального программного обеспечения (т.е. программного обеспечения, служащего для создания программных средств в любой проблемной области) рассматривают пять поколений языков программирования (ЯП). Языки программирования как средство общения человека с ЭВМ от поколения к поколению улучшали свои характеристики, становясь, все более доступными в освоении непрофессионалам.
Первые три поколения ЯП характеризовались более сложным набором зарезервированных слов и синтаксисом. Языки четвертого поколения все еще требуют соблюдения определенного синтаксиса при написании программ, но он значительно легче для освоения. Естественные ЯП, разрабатываемые в настоящее время, составят пятое поколение и позволят определять необходимые процедуры обработки информации, используя предложения языка, весьма близкого к естественному и не требующего соблюдения особого синтаксиса.
Поколения ЯП
ЯП первого поколения представляли собой набор машинных команд в двоичном (бинарном) или восьмеричном формате, которым определялся архитектурой конкретной ЭВМ. Каждый тип ЭВМ имел свой ЯП, программы на котором были пригодны только для данного типа ЭВМ. От программиста при этом требовалось хорошее знание не только машинного языка, но и архитектуры ЭВМ.
Второе поколение ЯП характеризуется созданием языков ассемблерного типа (ассемблеров, макроассемблеров), позволяющих вместо двоичных и других форматов машинных команд использовать их мнемонические символьные обозначения (имена). Являясь существенным шагом вперед, ассемблерные языки все еще оставались машинно-зависимыми, а программист все также должен был быть хорошо знаком с организацией и функционированием аппаратной среды конкретного типа ЭВМ. При этом ассемблерные программы все так же затруднительны для чтения, трудоемки при отладке и требуют больших усилий для переноса на другие типы ЭВМ. Однако и сейчас ассемблерные языки используются при необходимости разработки высокоэффективного программного обеспечения (минимального по объему и с максимальной производительностью).
Третье поколение ЯП начинается с появления в 1956 г. первого языка высокого уровня — Fortran, разработанного под руководством Дж. Бэкуса в фирме IВМ. За короткое время Fortran становится основным ЯП при решении инженерно-технических и научных задач. Первоначально Fortran обладал весьма ограниченными средствами обеспечения работы с символьной информацией и с системой ввода-вывода. Однако постоянное развитие языка сделало его одним из самых распространенных ЯВУ на ЭВМ всех классов — от микро- до суперЭВМ, а его версии используются и для вычислительных средств нетрадиционной параллельной архитектуры.
Вскоре после языка Fortran появились такие ныне широко известные языки, как Аlgol, Соbоl, Ваsiс, РL/1, Раscal, АРL, АDА, С, Forth, Lisp, Моdula и др. В настоящее время насчитывается свыше 2000 различных языков высокого уровня.
Языки четвертого поколения носят ярко выраженный непроцедурный характер, определяемый тем, что программы на таких языках описывают только что, а не как надо сделать. В программах формируются скорее соотношения, а не последовательности шагов выполнения алгоритмов. Типичными примерами непроцедурных языков являются языки, используемые для задач искусственного интеллекта (например, Рrolog, Langin). Так как непроцедурные языки имеют минимальное число синтаксических правил, они значительно более пригодны для применения непрофессионалами в области программирования.
Второй тенденцией развития ЯП четвертого поколения являются объектно-ориентированные языки, базирующиеся на понятии программного объекта, впервые использованного в языке Simulа-67 и составившего впоследствии основу известного языка Smalltalk. Программный объект состоит из структур данных и алгоритмов, при этом каждый объект знает, как выполнять операции со своими собственными данными. На самом деле, различные объекты могут пользоваться совершенно разными алгоритмами при выполнении действий, определенных одним и тем же ключевым словом (так называемое свойство полиморфизма). Например, объект с комплексными числами и массивами в качестве данных будет использовать различные алгоритмы для выполнения операции умножения. Такими свойствами обладают объектно-ориентированные Pascal Basic, С++, Smalltalk, Simulа, и ряд других языков программирования.
Третьим направлением развития языков четвертого поколения можно считать языки запросов, позволяющих пользователю получать информацию из баз данных. Языки запросов имеют свой особый синтаксис, который должен соблюдаться, как и в традиционных ЯП третьего поколения, но при этом проще в использовании. Среди языков запросов фактическим стандартом стал язык SQL.
И, наконец, четвертым направлением развития являются языки параллельного программирования (модификация ЯВУ Fortran, языки Оссаm, SISAL, FР и др.), которые ориентированы на создание программного обеспечения для вычислительных средств параллельной архитектуры (многомашинные, мультипроцессорные среды и др.), в отличие от языков третьего поколения, ориентированных на традиционную однопроцессорную архитектуру.
К интенсивно развивающемуся в настоящее время пятому поколению относятся языки искусственного интеллекта, экспертных систем, баз знаний (InterLisp, ExpertLisp, IQLisp, SIAL и др.), а также естественные языки, не требующие освоения какого-либо специального синтаксиса (в настоящее время успешно используются естественные ЯП с ограниченными возможностями — Clout, Q& А, НАL и др.).
Популярное:
|
Последнее изменение этой страницы: 2016-04-11; Просмотров: 1231; Нарушение авторского права страницы