Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯИ ОСНОВНЫЕ ЭТАПЫ ЕЕ РАЗВИТИЯ



Технология программирования. Основные понятия и подходы

 

ВВЕДЕНИЕ

ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯИ ОСНОВНЫЕ ЭТАПЫ ЕЕ РАЗВИТИЯ

Первый этап - «стихийное» программирование

Второй этап - структурный подход к программированию

Третий этап - объектный подход к программированию

Четвертый этап - компонентный подход и CASE-технологии

ЖИЗНЕННЫЙ ЦИКЛ И ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

1. Постановка задачи (стадия «Техническое задание»)

2. Анализ требований и разработка спецификаций (стадия «Эскизный проект»)

Проектирование (стадия «Технический проект»)

Реализация (стадия «Рабочий проект»)

Сопровождение

БЛОЧНО-ИЕРАРХИЧЕСКИЙ ПОДХОДК СОЗДАНИЮ СЛОЖНЫХ СИСТЕМ

ЭВОЛЮЦИЯ, КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

Поколения ЯП

Классификация языков программирования

Определения: алфавит, лексика, синтаксис, семантика

РАЗРАБОТКА СТРУКТУРЫ ПРОГРАММЫ И МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ

Цель модульного программирования

Методы разработки структуры программы

Контроль структуры программы

ПРОБЛЕМЫ ОЦЕНКИ СОЗДЫНЫХ ПРОГРАММНЫХ ПРОДУКТОВ

Перечень оцениваемых прав

Цели и задачи оценки

 

ВВЕДЕНИЕ

Программирование — сравнительно молодая и быстро развивающаяся отрасль на­уки и техники. Опыт ведения реальных разработок и совершенствования имеющихся программных и технических средств постоянно переосмысливается, в результате чего появляются новые методы, методологии и технологии, которые, в свою очередь, служат основой более современных средств разработки программного обеспечения. Исследо­вать процессы создания новых технологий и определять их основные тенденции целесо­образно, сопоставляя эти технологии с уровнем развития программирования и особен­ностями имеющихся в распоряжении программистов программных и аппаратных средств.

Язык программирования – это совокупность набора символов (алфавит) системы, правил образования (синтаксис) и истолкования конструкций из символов (семантика) для задания алгоритмов с использованием символов естественного языка.

Языки программирования – это искусственно созданные языки для описания алгоритмов решения задач с помощью ЭВМ. Алгоритм, записанный на языке программирования, называется программой.

Различают языки низкого и высокого уровня. К языкам низкого уровня относятся машинные языки (языки машинных команд данной модели компьютера) и полумашинные языки (ассемблеры). Программа, записанная на языке высокого уровня, представляет собой набор операторов. К языкам высокого уровня относятся Basic, Pascal, С, Lisp, Prolog, Visual Basic, Delphi и др. Языки высокого уровня называют также алгоритмическими.


 

Технология программирования

Жизненный цикл и

Реализация.

Реализация представляет собой процесс поэтапного напи­сания кодов программы на выбранном языке программирования (кодирова­ние), их тестирование и отладку.

 

Сопровождение.

Сопровождение - это процесс создания и внедрения новых версий программного продукта.

Причинами выпуска новых версий могут служить:

необходимость исправления ошибок, выявленных в процессе эксплуа­тации предыдущих версий;

необходимость совершенствования предыдущих версий, например, улучшения интерфейса, расширения состава выполняемых функций или по­вышения его производительности;

изменение среды функционирования, например, появление новых тех­нических средств и/или программных продуктов, с которыми взаимодейст­вует сопровождаемое программное обеспечение.

 

На этом этапе в программный продукт вносят необходимые изменения, которые так же, как в остальных случаях, могут потребовать пересмотра про­ектных решений, принятых на любом предыдущем этапе. С изменением мо­дели жизненного цикла программного обеспечения (см. далее) роль этого этапа существенно возросла, так как продукты теперь создаются итерацион­но: сначала выпускается сравнительно простая версия, затем следующая с большими возможностями, затем следующая и т. д. Именно это и послужило причиной выделения этапа сопровождения в отдельный процесс жизненного цикла в соответствии с стандартом 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 и др.).

 

Перечень оцениваемых прав

Компьютерные программы и программное обеспечение (а точнее, права в отношении них) являются одним из видов интеллектуальной собственности и могут быть оценены в соответствии с действующим порядком.

Когда речь идет об оценке стоимости компьютерных программ, на самом деле, при этом подразумевают оценку определенного набора юридических прав на пользование программой. В отношении программ для ЭВМ различают два основных вида права – исключительное право и не исключительное право (право по лицензионному договору).

Определение исключительного права дано в Гражданском кодексе РФ (часть 4, раздел VII, глава 69, статья 1229), исключительное право дает правообладателю возможность распоряжаться данной программой по своему усмотрению – он может выдавать лицензии на ее использование, устанавливать ограничения на пользование программой и может, при желании, продать свое исключительное право другому лицу.

Неисключительное право на программное обеспечение предоставляется по усмотрению владельца исключительного права в рамках лицензионного соглашения. Объем прав по неисключительной лицензии полностью зависит от условий лицензионного договора и может быть различен. Как правило, типовая лицензия на пользование программой разрешает установку и запуск программы на компьютере, но запрещает модификацию программы и ее копирование, распространение и продажу. Но перечень прав, передаваемых по лицензии, может быть совершенно разным и полностью зависит от соглашения между владельцем исключительного права и пользователем. Понятно, что и стоимость лицензии на программное обеспечение во всех этих случаях будет различна.

Исключительное и неисключительное право на программное обеспечение являются имущественными правами, то есть с ними можно поступать как с имуществом – продавать и покупать. Эти права обладают рыночной стоимостью, которая может быть оценена. С другой стороны, существуют авторские права, т.е. права автора как создателя программы – такие как право авторства, право на имя, право на обнародование, право на защиту репутации автора. Данные права являются личными, а не имущественными, а значит, не подлежат отчуждению. Оценить личные авторские права в отношении программы нельзя, так как такие права не могут быть объектом купли-продажи.

Цели и задачи оценки

Чаще всего заказчики просят оценить компьютерные программы для целей постановки на бухгалтерский учет. Вот типичная ситуация – предприятие в течение долгого времени разрабатывает программный комплекс. Какие-то части программы пишут штатные программисты, какие-то части отдают на аутсорсинг. При этом, как правило, затраты на создание программы бухгалтерия списывает на расходы. В итоге компания получает готовый продукт (программное обеспечение), но затраты на его создание уже невозможно точно определить, а значит у бухгалтера возникают проблемы по отражению стоимости этого актива в учете. Оптимальным решением в создавшейся ситуации является обращение к независимому оценщику для проведения оценки созданного программного обеспечения. Оценщик определяет рыночную стоимость программы, а бухгалтерия предприятия ставит ее на учет по этой стоимости.

 

Оценка стоимости программ и программного обеспечения может производиться не только для бухгалтерских целей, но и для внесения в уставный капитал компании, для оформления лицензионного соглашения или для установления размера ущерба правообладателя от неправомерного использования программ.

 

Расчет рыночной стоимости программного обеспечения проводится, в подавляющем большинстве случаев, доходным подходом. Если есть возможность получить достоверные данные о расходах, произведенных на разработку и создание программы, то в этом случае можно использовать и затратный подход, то есть провести расчет стоимости программы, основываясь на произведенных затратах.

Технология программирования. Основные понятия и подходы

 

ВВЕДЕНИЕ

ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯИ ОСНОВНЫЕ ЭТАПЫ ЕЕ РАЗВИТИЯ


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-04-11; Просмотров: 1359; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.073 с.)
Главная | Случайная страница | Обратная связь