Спецсеминар "Инженерия программного обеспечения", осень 2003
преп. Губанов Юрий Александрович, mail
1. Критерии зачёта
min 50% посещаемость
доклад (кому хватит)
в конце курса – вопросы по пропущенным лекциям
2. Книги
Соммервиль “Инженерия программного обеспечения”, книга переведена на русский, продается, в частности, в Доме Книги
Брукс “Мифический человеко-месяц”
Йордан “Путь камикадзе”
Расписание докладов
3. Конспекты докладов
2003.09.10 - Введение в инженерию программного обеспечения
2003.09.17 - Введение в системную инженерию
2003.09.24 - Управление программным проектом
2003.10.01 - Процесс создания ПО
2003.10.01 - Требования к ПО
2003.10.08 - Архитектурное проектирование
2003.10.08 - Объектно-ориентированное проектирование
2003.10.15 - Проектирование интерфейсов
2003.10.22 - Реинжиниринг
2003.10.29 - Йордан "Путь камикадзе"
2003.11.05 - Управление конфигурациями
2003.11.12 - Тестирование ПО
2003.11.19 - Экстремальное программирование
2003.11.19 - Управление качеством
2003.11.26 - Управление персоналом
2003.11.26 - Брукс "Мифический человеко-месяц"
2003.12.03 - UML
2003.12.10 - Распределенные системы
Введение в инженерию программного обеспечения
1. Ссылки
http://software-engin.com – сайт книги Соммервиля, презентации и pdf на английском
http://www.swebok.org – Software Engineering Book of Knowledge
http://www.computer.org/certification – CSDP program
http://sites.computer.org/ccse – Computer Curricula
http://www.osp.ru/os/2003/02/044_print.htm – пригодится воды напиться про образование в области IT
2. Основная задача курса
Основная задача курса — дать студентам разносторонний и по возможности полный обзор вопросов, из которых состоит предмет "программной инженерии" (software engineering). В западных университетах подобный курс обычно преподается одним из первых, и потому очень часто называется просто SE1 (Software Engineering 1st course).
3. Темы курса:
Мы будем ориентироваться на перечень тем, определенных IEEE для экзамена software engineering professional (темы приведены в алфавитном порядке):
Software Engineering Overview
Software Configuration Management
Software Construction and Implementation
Software Design
Software Engineering Tools & Methods
Software Engineering Management
Software Engineering Process
Software Maintenance
Software Quality
Software Requirements
Software Testing
Software Professionalism and Engineering Economics
4. Основные определения
(занудное введение, без которого не обойтись), сформулированные в виде FAQ (Frequently Asked Questions):
Что такое программное обеспечение (software)?
Это программы, а также вся связанная с ними документация и конфигурационные данные, необходимые для корректной работы программы (т.е. не только программа).
В конечном итоге, продаются не программы, а программные продукты, которые бывают двух типов: коробочные продукты (generic products or shrink-wrapped software) и заказные продукты (bespoke or customized products). Важная разница между ними заключается в том, кто ставит задачу (пишет спецификацию).
Что такое программная инженерия?
Программная инженерия — это инженерная дисциплина, которая связана со всеми аспектами производства ПО от начальных стадий создания спецификации до поддержки системы после сдачи в эксплуатацию. В этом определении есть две важные части:
"Инженерная дисциплина". Инженеры добиваются результатов. Они применяют теории, методы и средства, пригодные для решения данной задачи, но они применяют их выборочно и всегда пытаются найти решения, даже в тех случаях, когда теорий или методов, соответствующих данной задаче, еще не существует. Кроме того, инженеры должны понимать значимость временных, финансовых и организационных ограничений. В советское время слово "инженер" абсолютно девальвировалось, но инженерное дело от этого не умерло
"Все аспекты производства ПО". Программная инженерия занимается не только техническими вопросами производства ПО, но и управлением программных проектов, а также разработкой средств, методов и теорий для поддержки процесса производства ПО.
Программные инженеры применяют систематичные и организованные подходы к работе для достижения максимальной эффективности и качества ПО. Общепринято мнение, что неправильно выбранный подход должен отрицательно сказаться на качестве и сроках сдачи системы. Но подход надо выбирать с умом — во многих случаях неформальные, "легкие" процессы могут оказаться значительно эффективнее (например, в таких задачах, как написание web-based applications или e-commerce systems).
В чем разница между программной инженерией (software engineering) и информатикой (computer science)?
Информатика занимается теорией и методами компьютерных и программных систем, в то время как программная инженерия занимается практическими проблемами создания ПО. Естественно, инженер-программист обязан в каком-то объеме знать информатику (точно так же, как электрический инженер должен в каком-то объеме знать физику). Однако объем теоретических знаний у разных специалистов сильно разнится и может быть очень невысоким, что, тем не менее, не мешает решать некоторые задачи (те, что попроще).
В идеале, вся программная инженерия должна быть поддержана какими-то теориями информатики, но практике все значительно сложнее. Инженеры зачастую применяют первые попавшиеся методы, а элегантные теории информатики не всегда могут быть применены к реальным большим системам.
В чем разница между программной инженерией и системной инженерией (systems engineering)?
Системная инженерия (а точнее — компьютерная системная инженерия, computer-based systems engineering, CBSE) занимается всеми аспектами создания и эволюции комплексных систем, в которых ПО играет заметную роль. Таким образом, программная инженерия является частью системной инженерии, наряду с созданием аппаратных платформ, созданием архитектуры, системной интеграцией и т.п. В системной инженерии основной упор приходится именно на системные вопросы, а не на составные части системы.
Системная инженерия значительно старше программирования как дисциплина — люди уже очень давно производят сложные индустриальные системы, такие как поезда, химические заводы и т.п.
Что такое программный процесс?
Программный процесс — это набор действий и связанных с ними результатов, приводящих к созданию программного продукта. Мы будем выделять четыре основных фазы программного процесса:
Создание спецификации ПО
Разработка ПО
Тестирование ПО (включает в себя validation и verification)
Развитие или эволюция ПО (software evolution)
Что такое модель программного процесса?
Модель программного процесса — это упрощенное описание программного процесса, представленное с некоторой точки зрения. Модели всегда являются упрощениями: all models are wrong; some models are useful (E. Deming). Некоторые примеры типов моделей программного процесса:
Модель технологического процесса (workflow model) — показывает последовательность действий, наряду со входами, выходами и зависимостями. Действия в этой модели представляют собой действия людей.
Модель потоков данных (data flow or activity model) — представляет процесс в виде набора действий, каждый из которых выполняет некоторое преобразование данных. В этой модели действия могут быть более низкого уровня, чем в предыдущей модели (например, какие-то действия может выполнять компьютер).
Модель роль/действие (role/action model) — показывает роли людей, участвующих в программном процессе, а также действия, за которые они отвечают.
Есть несколько традици