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