Презентация "Основы программной инженерии"


Подписи к слайдам:
Инженерный менеджмент и офисные технологии

Основы программной инженерии

  • Барышникова Марина Юрьевна
  • МГТУ им. Н.Э. Баумана
  • Каф. ИУ-7
  • baryshnikovam@mail.ru

Лекция 1

  • Цели и задачи курса. Понятие программной инженерии. Стандарты программной инженерии. Список литературы

Основы программной инженерии

  • Лектор – Барышникова Марина Юрьевна
  • Преподаватель, ведущий семинары и лабораторные работы – Ломовской Игорь Владимирович
  • ИУ-7 ауд. 513-л
  • Структура курса:
  • Лекции – вторник, 8-30, ауд. 216-л, письменный зачет на 15-16 неделе, максимальная оценка – 30 баллов, минимум для зачета – 20 баллов
  • Семинары и лабораторные работы - суббота, ауд. 508-л
  • Контрольные мероприятия:
    • 8 нед. – рубежный контроль – 35 б.
    • 16 нед. – рубежный контроль – 35 б. (минимум - 25 б.)
    • 4 – 12 нед. – домашнее задание из 2-х частей – 15 б.
    • 3 контрольные работы – по 5 б. каждая
    • Минимальное количество баллов, необходимое для зачета – 65

Информационный ресурс для поддержки курса

  • http://dev.iu7.bmstu.ru/
  • Логин и пароль для входа в систему будут высланы на электронный адрес каждому студенту 
  • ПО, необходимое для выполнения лабораторных работ:
  • http://ftp.iu7.bmstu.ru/se/
  • Рабочие материалы по курсу: http://dev.iu7.bmstu.ru/trac/workbook_se

Вместо введения

  • Мы живем в эпоху информационного общества или общества, основанного на знаниях
  • Производство программного обеспечения (ПО) сегодня – это крупнейшая отрасль мировой экономики, в которой занято около 10 миллионов специалистов

Программирование - стадии эволюции

  • 50-е годы 20 века. Программирование в машинном коде. Решение главным образом, научно-технических задач (счет по формулам). Наличие достаточно четко сформулированного технического задания. Отсутствие этапа проектирования. Составление документации после завершения разработки. Зарождение концепции модульного программирования
  • 60-е годы. Широкое использование языков программирования высокого уровня (Алгол 60, Фортран, Кобол и др.). Возрастание сложности задач, решаемых с помощью компьютеров. Использование методов коллективной работы при создании больших программных систем
  • 70-е годы. Широкое распространение информационных систем и баз данных. Развитие абстрактных типов данных. Исследование проблем обеспечения надежности и мобильности программных средств (ПС). Создание методики управления коллективной разработкой программ. Появление инструментальных средств поддержки программирования
  • 80-е годы. Широкое внедрение персональных компьютеров во все сферы человеческой деятельности и создание обширного и разнообразного контингента пользователей программных средств. Бурное развитие пользовательских интерфейсов и создание четкой концепции качества ПО. Внедрение объектного подхода к разработке ПС. Развитие концепции компьютерных сетей
  • 90-е годы. Охват всего человеческого общества международной компьютерной сетью. Актуальность проблемы защиты компьютерной информации и передаваемых по сети сообщений. Развитие CASE-средств разработки ПО

Процент успешных проектов по созданию программного обеспечения чрезвычайно низок. Почему?

  • Разработка ПО по-прежнему остается непредсказуемой. Очень незначительное число проектов (порядка 20-25%) по созданию программного обеспечения оказываются успешными и укладываются в первоначальные бюджетные и временные рамки
  • Управление определяет успех или неудачу программных проектов в большей степени, чем технологические преимущества
  • Количество переделанного или «выброшенного на свалку» ПО показывает незрелость процесса его разработки
  • и т.д.

  • Программа
  • (Завершенный продукт, пригодный для запуска своим автором на системе, на которой она была разработана)
  • Программный комплекс
  • (интерфейсы, системная интеграция)
  • Программный продукт
  • (Обобщение, тестирование, документирование, сопровождение)
  • Системный программный продукт

«Программист подобно поэту, работает почти непосредственно с чистой мыслью. Он строит свои замки в воздухе и из воздуха, творя силой воображения. Однако эта податливость «материала» таит свои проблемы. Во-первых, необходима безошибочная точность действий: одна ошибка и чудо не состоялось!»

  • «Программист подобно поэту, работает почти непосредственно с чистой мыслью. Он строит свои замки в воздухе и из воздуха, творя силой воображения. Однако эта податливость «материала» таит свои проблемы. Во-первых, необходима безошибочная точность действий: одна ошибка и чудо не состоялось!»
  • Ф. Брукс

При разработке программного обеспечения следует учитывать, что:

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

  • Методология
  • Инженерная дисциплина
  • Программная инженерия
  • Цикл разработки программной системы

Программная инженерия (Software Engineering)

  • является отраслью информатики[1] (computer science) и изучает вопросы построения компьютерных программ, обобщает опыт программирования в виде комплекса общих знаний и правил регламентации инженерной деятельности разработчиков программного обеспечения
  • [1] Информатика охватывает теорию и методы построения вычислительных и программных систем. Знание информатики необходимо специалистам в области программного обеспечения так же, как знание физики – инженерам-электронщикам

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

  • Современный инженер-программист – это специалист, выполняющий практические работы по созданию программного обеспечения, способный обеспечить высокое качество разработки за счет применения современных методов проектирования, использования готовых компонентов и методов их генерации. Он знаком со стандартами, регламентирующими процесс разработки, уверенно оперирует понятием «жизненный цикл ПО», хорошо владеет навыками использования инструментальных систем программирования. Он знает методы управления проектами, может произвести оценку качества, производительности, стоимости и т.п., умеет эффективно работать в команде
  • Что такое инженер-программист сегодня?

Содержание курса

    • Лекции:
    • жизненный цикл программного обеспечения и его модели;
    • управление качеством;
    • современные подходы к организации процесса разработки программного обеспечения;
    • и др.
  • Лабораторные работы:
    • Структурное программирование (программирование «сверху-вниз» и «снизу-вверх»);
    • работа с системами версионного контроля и отслеживания ошибок в ПО;
    • методы кодирования и тестирования программного обеспечения, включая стиль программирования, в том числе, защитное программирование

Стандарты программной инженерии

  • Стандарт - standard - норма, образец, мерило:
    • утверждаемый компетентным органом нормативно-технический документ, устанавливающий комплекс норм и правил по отношению к объекту стандартизации,
    • типовой образец, эталон, модель, принимаемые за исходные для сопоставления с ними других предметов

Основные типы стандартов

  • Корпоративные стандарты разрабатываются крупными фирмами с целью повышения качества своей продукции. Создаются на основе собственного опыта компании, но с учетом требований мировых стандартов. Не сертифицируются, но являются обязательными для применения внутри корпорации
  • Отраслевые стандарты действуют в пределах организаций некоторой отрасли (министерства). Разрабатываются с учетом требований мирового опыта и специфики отрасли. Являются, как правило, обязательными для отрасли. Подлежат сертификации
  • Государственные стандарты (ГОСТы) принимаются государственными органами и имеют силу закона. Разрабатываются с учетом мирового опыта или на основе отраслевых стандартов. Могут иметь как рекомендательный, так и обязательный характер. Для сертификации создаются государственные или лицензированные органы сертификации
  • Международные стандарты разрабатываются специальными международными организациями на основе мирового опыта и лучших корпоративных стандартов. Имеют сугубо рекомендательный характер

Разработчики стандартов в области программной инженерии

  • ISO - The International Standards Organization - международная организация по стандартизации, работающая в сотрудничестве с IEC - The International Electrotechnical Commission - международной электротехнической комиссией
  • IEEE Computer Society - профессиональное объединение специалистов в области программной инженерии
  • ACM - Association for Computing Machinery – Ассоциация по вычислительной технике
  • SEI - Software Engineering Institute – Институт Программной Инженерии при университете Карнеги-Мелон
  • PMI - Project Management Institute – Международный Институт Проектного Менеджмента

Объекты стандартизации в программной инженерии

  • процессы разработки ПО
  • продукты разработки
  • ресурсы, которые используют процессы для создания программного продукта

Ядро профессиональных знаний SWEBOK (Software Engineering Body of Knowledge)

  • Software Requirements – требования к ПО
  • Software Design – проектирование ПО
  • Software Construction – конструирование ПО
  • Software Testing – тестирование ПО
  • Software Maintenance – сопровождение ПО
  • Software Configuration Management – управление конфигурацией
  • Software Engineering Management – управление IT проектом
  • Software Engineering Process – процесс программной инженерии
  • Software Engineering Tools and Methods – методы и инструменты
  • Software Quality – качество ПО

Свод знаний по управлению проектами PMI PMBOK (Project Management Body of Knowledge)

  • Управление интеграцией – Project Integration Management
  • Управление содержанием – Project Scope Management
  • Управление временем – Project Time Management
  • Управление затратами – Project Cost Management
  • Управление рисками – Project Risk Management
  • Управление персоналом – Project Personnel Management
  • Управление коммуникациями – Project Communication Management
  • Управление закупками – Project Procurement Management
  • Управление качеством – Project Quality Management

Кодекс этики программной инженерии (краткая версия)

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

Принципы, положенные в основу кодекса этики программной инженерии

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

Список литературы

  • Иванова Г.С. Технология программирования.- М.: из-во МГТУ им. Н.Э. Баумана, 2002
  • Вендров А.М. Проектирование программного обеспечения экономических информационных систем. – М.: Финансы и статистика, 2000
  • Липаев В.В. Программная инженерия: методологические основы. – М.: из-во «ТЕИС», 2006
  • Костров А.В. Основы информационного менеджмента. – М.: Финансы и статистика, 2001
  • Орлов С.А. Технологии разработки программного обеспечения. – СПб.: из-во «Питер», 2002
  • Фредерик Брукс. Мифический человеко-месяц или как создаются программные системы. Пер. с англ. – СПб.: из-во «Символ», 2001
  • Уокер Ройс. Управление проектами по созданию программного обеспечения. Пер. с англ. – М.: из-во «Лори», 2002
  • Роберт Т. Фатрелл, Дональд Ф. Шафер, Линда И. Шафер. Управление программными проектами: достижение оптимального качества при минимуме затрат. Пер. с англ. - М.: Издательский дом «Вильямс», 2003
  • Эдвард Йордон. Путь камикадзе: как разработчику программного обеспечения выжить в безнадежном проекте. Пер. с англ. - М.: из-во «Лори», 2001
  • Скотт Кендалл. Унифицированный процесс. Основные концепции. Пер. с англ. - М.: Издательский дом «Вильямс», 2002

Список литературы

  • Кент Бек. Экстремальное программирование. Пер. с англ. – СПб.: из-во «Питер», 2002
  • Тимоти Пайрон. Использование Microsoft Project 2003. Пер. с англ. – М.: из-во «Виьямс», 2005
  • Якобсон А., Буч Г., Рамбо Дж. Унифицированный процесс разработки программного обеспечения. Пер. с англ. – СПб.: из-во «Питер», 2002
  • Стив Макконнелл. Остаться в живых! Руководство для менеджера программных проектов. Пер. с англ. – СПб.: из-во «Питер», 2006
  • Фергус О’Коннэл. Как успешно руководить проектами. Серебряная пуля. Пер. с англ. – М.: из-во «Кудиц-образ», 2003
  • Дж. Филипс. Менеджмент IT- проектов: на пути от старта до финиша. Пер. с англ. – М.: из-во «Лори», 2008
  • Стив Макконнелл. Сколько стоит программный проект. Пер. с англ. – СПб.: из-во «Питер», 2007

Список литературы

  • Оценка и аттестация зрелости процессов создания и сопровождения программных средств и систем (ISO/IEC TR 155-4 – CMM). Пер. с англ. – М.: Книга и бизнес, 2001
  • Рейнвотер Дж. Как пасти котов. Наставления для программистов, руководящих другими программистами. – СПб.: Питер, 2006
  • Орлик С. Введение в программную инженерию и управление жизненным циклом ПО. – Copyright © Сергей Орлик, 2005, http://sorlik.blogspot.com, http://sorlik.ru/
  • Скопин И.Н. Основы менеджмента программных проектов. http://www.intuit.ru/department/se/msd/