
- •Оглавление
- •Введение.
- •Организация процесса конструирования. Жизненный цикл программных средств.
- •Определение технологии конструирования программного обеспечения
- •Классический жизненный цикл
- •Макетирование
- •Стратегии конструирования по
- •Инкрементная модель
- •Быстрая разработка приложений
- •Спиральная модель
- •Компонентно-ориентированная модель
- •Тяжеловесные и облегченные процессы
- •Модели качества процессов конструирования
- •Планирование программного проекта. Оценка трудоемкости и стоимости программного проекта. Конкурентоспособность.
- •Процесс руководства проектом
- •Начало проекта
- •Измерения, меры и метрики
- •Планирование проектных задач
- •Размерно-ориентированные метрики
- •Функционально-ориентированные метрики
- •Выполнение оценки в ходе руководства проектом
- •Выполнение оценки проекта на основе loc- и fp-метрик
- •Конструктивная модель стоимости
- •Модель композиции приложения
- •Модель раннего этапа проектирования
- •Модель этапа постархитектуры
- •Предварительная оценка программного проекта
- •Анализ чувствительности программного проекта
- •Сценарий понижения зарплаты
- •Сценарий наращивания памяти
- •Сценарий использования нового микропроцессора
- •Сценарий уменьшения средств на завершение проекта
- •Организация разработки программного проекта.
- •Кризис программирования и способ выхода из него
- •Модель cmm-sei
- •Управление качеством разработки программного продукта с помощью системы стандартов iso 9001
- •Примерная структура процесса и организации, занимающейся разработкой программных продуктов
- •Внедрение программного проекта.
- •Что такое проект внедрения.
- •Определение стратегических целей проекта и тактического плана внедрения
- •Обучение специалистов группы внедрения.
- •Моделирование бизнеса.
- •Обучение конечных пользователей работе с системой.
- •Опытно-промышленная эксплуатация
- •Ввод системы в промышленную эксплуатацию.
- •Ключевые факторы успеха.
- •Эволюция программного обеспечения.
- •5.1. Наследуемые системы
- •Количество сбоев аппа- Характеризуются ли аппаратные средства высоким уровнем ратных средств и по сбоев в работе? Является ли по поддержки причиной аварийных перезагрузок системы?
- •5.2. Модернизация программного обеспечения
- •Прогнозирование сопровождения
- •5.3. Реинжениринг программного обеспечения
- •Преобразование исходного кода программ
- •Анализ систем
- •Создание программных модулей
- •Создание абстракций данных
- •Изменение данных
- •5.4. Управление конфигурациями
- •Планирование управления конфигурацией
- •Определение конфигурационных объектов
- •База данных конфигураций
- •Управление изменениями
- •Управление версиями и выпусками
- •Идентификация версий
- •Управление выходными версиями
- •Сборка системы
- •Case-средства для управления конфигурацией
- •Средства поддержки управления изменениями
- •Средства поддержки управления версиями
- •Средства сборки систем
- •Экономическая эффективность эксплуатации программного проекта.
- •6.1. Особенности экономики производства крупных программных продуктов
- •6.2. Проблемы анализа экономики производства программных продуктов
- •6.3. Проблемы организации экономически эффективного производства программных продуктов
- •6.4. Оценка стоимости разработки программного обеспечения
- •6.4.1. Линейный метод
- •6.4.2. Метод функциональных точек
- •6.4.3. Оценка с использованием эмпирических данных
- •6.5. Методы оценки эффективности по на этапе эксплуатации
- •Список литературы.
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего профессионального образования
«Тульский государственный университет»
Кафедра «Финансы и Менеджмент»
Огнянович А.В.
доцент каф. ФиМ, канд. экон. наук
КОНСПЕКТ ЛЕКЦИЙ
по дисциплине
«ЭКОНОМИКА ПРОГРАММНОЙ ИНЖЕНЕРИИ»
Направление подготовки: 231000 «Программная инженерия»
Профиль: «Разработка программно-информационных систем»
Формы обучения: очная, очно-заочная, заочная
Тула 2012
Рассмотрено на заседании кафедры «Финансы и менеджмент» факультета «Экономика и менеджмента».
Протокол № ____ от «___» _______________ 20___г.
Зав. кафедрой ____________________ Е.А.Федорова
Оглавление
Введение. 5
1. Организация процесса конструирования. Жизненный цикл программных средств. 8
1.1. Определение технологии конструирования программного обеспечения 8
1.2. Классический жизненный цикл 9
1.3. Макетирование 11
1.4. Стратегии конструирования ПО 13
1.5. Инкрементная модель 13
1.6. Быстрая разработка приложений 14
1.7. Спиральная модель 16
1.8. Компонентно-ориентированная модель 18
1.9. Тяжеловесные и облегченные процессы 19
1.10. ХР-процесс 20
1.11. Модели качества процессов конструирования 26
2. Планирование программного проекта. Оценка трудоемкости и стоимости программного проекта. Конкурентоспособность. 30
2.1. Процесс руководства проектом 30
2.1.1. Начало проекта 30
2.1.2. Измерения, меры и метрики 30
2.1.3. Процесс оценки 31
2.1.4. Анализ риска 31
2.1.5. Планирование 31
2.1.6. Трассировка и контроль 32
2.2. Планирование проектных задач 32
2.3. Размерно-ориентированные метрики 34
2.4. Функционально-ориентированные метрики 35
2.5. Выполнение оценки в ходе руководства проектом 42
2.6. Выполнение оценки проекта на основе LOC- и FP-метрик 43
2.7. Конструктивная модель стоимости 44
2.7.1. Модель композиции приложения 45
2.7.2. Модель раннего этапа проектирования 47
2.7.3. Модель этапа постархитектуры 50
2.8. Предварительная оценка программного проекта 54
2.9. Анализ чувствительности программного проекта 57
2.9.1. Сценарий понижения зарплаты 59
2.9.2. Сценарий наращивания памяти 59
2.9.3. Сценарий использования нового микропроцессора 59
2.9.4. Сценарий уменьшения средств на завершение проекта 60
3. Организация разработки программного проекта. 63
3.1. Кризис программирования и способ выхода из него 63
3.2. Модель CMM-SEI 65
3.3. Управление качеством разработки программного продукта с помощью системы стандартов ISO 9001 68
3.4. Примерная структура процесса и организации, занимающейся разработкой программных продуктов 70
4. Внедрение программного проекта. 73
4.1. Что такое проект внедрения. 74
4.2. Ключевые факторы успеха. 81
5. Эволюция программного обеспечения. 90
5.1. Наследуемые системы 90
5.2. Модернизация программного обеспечения 107
5.3. Реинжениринг программного обеспечения 126
5.4. Управление конфигурациями 142
6. Экономическая эффективность эксплуатации программного проекта. 164
6.1. Особенности экономики производства крупных программных продуктов 168
6.2. Проблемы анализа экономики производства программных продуктов 172
6.3. Проблемы организации экономически эффективного производства программных продуктов 176
6.4. Оценка стоимости разработки программного обеспечения 181
6.4.1. Линейный метод 182
6.4.2. Метод функциональных точек 182
6.4.3. Оценка с использованием эмпирических данных 186
6.5. Методы оценки эффективности ПО на этапе эксплуатации 189
Введение.
Программная инженерия — это интегрирование принципов математики, информатики и компьютерных наук с инженерными подходами, разработанными для производства осязаемых материальных артефактов[1].Также программная инженерия определяется как системный подход к анализу, проектированию, оценке, реализации, тестированию, обслуживанию и модернизации программного обеспечения, то есть применение инженерии к разработке программного обеспечения.
Дисциплина программной инженерии[2] включается в круг вопросов компьютинга (англ. computing) и может рассматриваться как инженерная область, имеющая более тесные связи со своей базовой дисциплиной — компьютерными науками, — чем другие инженерные области. Среди других инженерных дисциплин она качественно выделяется нематериальностью программного обеспечения и дискретной природой его функционирования. Основываясь на математике и компьютинге, программная инженерия занимается разработкой систематических моделей и надежных методов производства высококачественного программного обеспечения, и данный подход распространяется на все уровни — от теории и принципов до реальной практики создания программного обеспечения, которая лучше всего заметна сторонним наблюдателям.
Термин Разработка программного обеспечения является более общим и часто используемым, по сравнению с термином Программная инженерия и не обязательно включает в себя парадигмы инженерии. Однако вряд ли можно сказать, что использование этого метода оказало сколько-нибудь ощутимый вклад в развитие реальной разработки ПО на протяжении уже более чем 40 лет.
Термин «инженерия программного обеспечения» появился впервые в 1968 году на Конференции НАТО «Инженерия программного обеспечения» и предназначался, чтобы спровоцировать поиск решений для происходившего в то время «кризиса программного обеспечения». С тех пор, это переросло в профессию и область исследований, посвященных созданию программного обеспечения, более качественного, доступного, лучше поддерживаемого, и быстрее разрабатываемого.
Так как область все еще относительно молода по сравнению со своими сестринскими областями инженерии, есть все еще большая работа и дебаты вокруг того, что представляет собой «инженерия программного обеспечения», и удовлетворяет ли оно понятию инженерии. Этот спор развивается естественным образом, начавшись с попыток рассматривать создание программного обеспечения только как программирование. Разработка программного обеспечения — термин, иногда предпочитаемый практиками в промышленности, которые рассматривают разработку программного обеспечения как несравнимо более мощную и конструкционноёмкую методологию в сравнении с процессом написания кода программистом.
Все же, несмотря на юность профессии, будущее области радужно, поскольку, Money Magazine и Salary.com оценили профессию разработчика программного обеспечения как лучшую работу в Америке в 2006.
Разработка программного обеспечения связана с дисциплинами информатики, управления проектами, и инженерии систем.
Когда первые современные цифровые компьютеры появились в начале 1940-х годов [9] наборы исполняемых команд уже были встроены в машину. Специалисты быстро поняли, что этот подход не слишком удобен. Так появилась “архитектура хранимых программ” или архитектура фон Неймана. Таким образом, деление на "железо" и "программное обеспечение" началось с абстракции, используемой чтобы решить проблему сложности вычислений.
Первые языки программирования стали появляться в 1950-х годах, и это был еще один важный шаг в абстракции. Основные языки, такие как Fortran, Algol и Cobol были выпущены в конце 1950-х для решения научных, алгоритмических и бизнес-задач соответственно. Дейкстра написал свою известную статью, "Go To Statement Considered Harmful" в 1968 году, а Дэвид Парнас ввел ключевое понятие модульности и скрытия информации в 1972 году, чтобы помочь программистам справляться со все более и более сложными программными системами. Системное программное обеспечение для управления аппаратным, названное “операционная система” было представлено компанией Unix в 1969 году. В 1967 году язык Simula ввел понятие объектно-ориентированной парадигмы программирования.
Эти достижения в области программного обеспечения были встречены большим прорывом компьютерной технике. В середине 1970-х годов был представленмикрокомпьютер, что позволило любителям получить собственный компьютер и писать свои программы для него. Это, в свою очередь привело к появлениюперсональных компьютеров (ПК) и Microsoft Windows. Также в середине 1980-х появляются такие понятия как en:Software Development Life Cycle или SDLC(Цикл разработки ПО) в качестве некоторого консенсуса для централизованной разработки программного обеспечения. Конец 1970-х и начало 1980-х годов ознаменовались появлением нескольких новых Simula-подобных объектно-ориентированных языков программирования, в том числе Smalltalk, Objective-C иC++.
Open Source, появившийся в начале 90-х в форме Linux, а также других программ, ввел понятие “базара” или децентрализованного стиля разработки ПО. Затем мировая паутина и стремительная популяризация интернета в середине 90-х изменили программную инженерию еще раз. Распределенные системы получили широкое распространение, как способ устройства систем, а также язык Java с его собственной виртуальной машиной, сделали еще один шаг в абстракции. Сотрудничество программистов позволило появиться на свет документу, названному Agile Manifesto, который поддерживал облегчение процессов, что способствовало написанию более дешевых и регулярно обновляемых программ.
В настоящее время определение программной инженерии все еще обсуждается специалистами. До сих пор идут споры, какой же метод производства программного обеспечения "дешевле, лучше, быстрее". Сокращение затрат вообще было одной из главных задач ИТ-индустрии с 1990 года. Совокупная стоимость владения ПО включает затраты не только на его приобретение или разработку. Это также расходы на задержки производства, на содержание и ресурсы, необходимые для поддержки инфраструктуры.