Лекция 1 ТП- инженерная наука.pptx
- Количество слайдов: 15
ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ Инженерия программных средств
Лекции: 1 раз в неделю Лабораторные: 1 раз в 2 недели Форма контроля: зачет Консультации: чт. , сб. 14. 15 2
ЛИТЕРАТУРА 1. Л. Г. Гагарина, Е. В. Кокорева, Б. Д. Виснадул. Технология разработки программного обеспечения 2. Стив Макконнелл. Профессиональная разработка программного обеспечения 3. Кент Бек. Экстремальное программирование 4. Скотт Амблер - Гибкие технологии: экстремальное программирование и унифицированный процесс разработки 5. Иванова Г. С. Технология программирования 6. Вигерс Карл. Разработка требований к программному обеспечению 7. Фредерик Брукс. Мифический человеко-месяц 8. Николас Дж. Карр - Блеск и нищета информационных технологий 3
ОСНОВНЫЕ ПОНЯТИЯ И ОПРЕДЕЛЕНИЯ Основная тема данного курса — методы разработки «больших» и сложных программ - программных продуктов, программных комплексов. Технология программирования — совокупность методов и средств, применяемых в процессе разработки программного обеспечения (программных продуктов, программных комплексов). Программа (program, routine) — упорядоченная последовательность команд (инструкций) компьютера для решения задачи. Программное обеспечение (software) — совокупность программ обработки данных и необходимых для их эксплуатации документов. 4
Задача (problem, task) — проблема, подлежащая решению. Приложение (application) — программная реализация на компьютере решения задач Процесс создания программ можно представить как последовательность следующих действий: 1) постановка задачи; 2) алгоритмизация решения задачи; 3) программирование. Постановка задачи (problem definition) — это точная формулировка решения задачи на компьютере с описанием входной и выходной информации. Алгоритм — система точно сформулированных правил, определяющая процесс преобразования допустимых исходных данных (входной информации) в желаемый результат (выходную информацию) за конечное число шагов. Программирование (programming) — теоретическая и практическая деятельность, связанная с созданием программ. 5
Какой должна быть технология программирования? 6
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете Стив Макконнелл 7
ПРОГРАММИРОВАНИЕ – ИСКУССТВО, РЕМЕСЛО, НАУКА ИЛИ ИНДУСТРИЯ? Цель науки – расширение горизонтов познания. Узнать нечто новое о мире, в котором мы живем, установление закономерностей, законов природы. Цель искусства – воздействие на эмоции человека, получение эстетического удовольствия Кнут Искусство программирования. , Джон Бентли - Жемчужины творчества программистов "Затем, что ветру и орлу, И сердцу девы нет закона, Гордись: таков и ты, поэт, И для тебя условий нет". А. С. Пушкин Цель инженерии или технологии – конструирование, созидание чеголибо для практического применения. 8
Далее Технология программирования = Инженерия программных средств Программная инженерия (Software Engineering) является отраслью Computer science, изучает вопросы построения компьютерных программ, отражает закономерности ее развития, обобщает опыт программирования в виде комплекса общих знаний и правил регламентации инженерной деятельности разработчиков ПО. Отличия от науки Как инженерная дисциплина, она охватывает все аспекты создания ПО, начиная от формирования требований до создания, сопровождения и снятия с эксплуатации ПО, а также включает инженерные методы оценки трудозатрат, стоимости, производительности и качества, управление проектом разработки и коллективом разработчиков. В программной инженерии, инженеры – это специалисты, выполняющие практические работы по реализации программ с применением теории, методов и средств компьютерной науки. Компьютерная наука (computer science) охватывает теорию и методы построения вычислительных и программных систем, тогда как программная инженерия рассматривает вопросы практического построения ПО. 9
В отличие от науки, целью которой есть получение знаний, для инженерии знание – это способ получения некоторой пользы. Ф. Брукс: «Ученый строит, чтобы научиться, инженер учится, чтобы строить» . Таким образом, разработку программных систем можно считать инженерной деятельностью. Отличия от традиционной инженерии, где: • ветви инженерии имеют высокую степень специализации, а у программной инженерии специализация заметна только в довольно узких применениях (например, операционные системы, • трансляторы); объекты хорошо определены и манипуляции с ними происходят в узком контексте типичных проектных решений и деталей, которые отвечают типовым требованиям заказчиков и касаются отдельных деталей, а не общих вопросов, тогда как у программной инженерии подобная типизация отсутствует; • отдельные готовые решения классифицированы и каталогизированы, а в программной инженерии каждая новая разработка - это новая проблема, в которой довольно тяжело рассмотреть аналогию с ранее разработанными системами. • Результат заранее известен, а в программировании - нет 10
ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ УЖЕ НЕ РЕМЕСЛО В настоящее время мировая компьютерная общественность объединились в профессиональные комитеты, которые ведут разработку • ядра знаний (SWEBOK) • этического кодекса программиста • учебных курсов подготовки соответствующих специалистов • обучение специальности • сертификацию специалистов в области программной инженерии В разработке больших программных проектов, кроме программистов, принимают участие: – менеджеры, которые планируют и руководят проектом, отслеживают сроки и затраты; – инженеры службы хранения готовых компонентов в библиотеках и репозитариях; – технологи, которые определяют инженерные методы и стандарты, регламентирующие и регулирующие процесс реализации проекта; – тестировщики, которые проверяют правильность выполнения процесса проектирования и продуктов процессов, на основе собранных данных проводят измерения разных характеристик качества, включая оценку надежности ПО. 11
НА СЕГОДНЯШНИЙ ДЕНЬ ü накоплен значительный объем интеллектуальных знаний в области создания ПО; ü появились новые разнообразные методы анализа, моделирования и проектирования ПО; ü есть необходимость совершенствования методов обнаружения ошибок в ПО; ü есть потребность эффективной организации коллективов разработчиков ПО и оценки их деятельности; ü широко используются готовые программные компоненты, высоко технологические средства и инструменты разработки ПО; ü характерна реинженерия компонентов и систем для их адаптации к новым изменяющимся условиям сред и сетей. 12
Программная инженерия, как инженерная дисциплина, делает главный акцент на повышение качества и производительности ПО за счет применения новых и усовершенствованных: • методов проектирования ПО; • готовых компонентов и методов их генерации; • методов эволюции ПО; • методов верификации и тестирования ПО; • инструментальных средств поддержки; • методов управления проектами, • методов оценки качества, производительности, стоимости и т. п. ; • стандартизации процессов разработки ПО (ISO/IEC 12207, ISO/IEC 15504, ISO 9126 и др. ), регламентирующих этапы ЖЦ; подходов к оценке продуктов и процессов. А надо ли это? Может лучше так: напишем – исправим? . . . 13
СТАТИСТИКА УСПЕШНОСТИ IT-ПРОЕКТОВ Результат 2004 2006 2008 20010 2012 Успех 29% 35% 32% 37% 39% Провал 18% 19% 24% 21% 18% Остальные 53% 46% 44% 42% 43% Источник: The Standish Group International, Chaos reports • Нарушение сроков • Gartner: Превышение стоимости в Затраты на IT • Ненадлежащее качество $3, 8 трлн мире в 2014 году 14
СОДЕРЖАНИЕ ДИСЦИПЛИНЫ Проектировани е ПО Анализ и планировани е Управление требованиями Технология программирования Сопровождение • Выпуск и внедрение • Лицензирование • Техподдержка Документирование • Стандарты • Технологии документирования Разработка ПО • Языки программирования • Кодирование • Отладка Управление проектом • Управление рисками • Версии • Управление изменениями и дефектами • Непрерывная интеграция • Сборка и выпуск Качество ПО • Стандарты качества • Оценка качества • Обеспечение качества 15