Слайд 1Курганский государственный университет
Кафедра программного обеспечения автоматизированных систем
К У Р С
Л Е К Ц И Й
по дисциплине
ВВЕДЕНИЕ
В ПРОГРАММНУЮ ИНЖЕНЕРИЮ
для студентов направления 231000.62
«Программная инженерия»
Лекция 1.1
Предмет и основные понятия
программной инженерии
Слайд 2План лекции
Введение
1. Предпосылки и история развития промышленных технологий разработки ПО
1.1.
Модульное программирование
1.2. Структурное программирование
1.3. Объектно-ориентированное проектирование и программирование
1.4. Краткие итоги
2.
Предмет программной инженерии
2.1. Что такое инженерия (engineering) и чем занимаются инженеры ?
2.2. Что такое программное обеспечение (программный продукт - software)?
2.3. Что такое программная инженерия (software engineering)?
2.4. В чем отличия программной инженерии от информатики?
2.5. В чем отличие программной инженерии от других инженерий?
2.6. Краткие итоги
3. Методология программной инженерии
3.1. Модели программного обеспечения
3.2. Что такое CASE ?
3.3. Свойства хорошей компьютерной программы
4. Обзор программы изучения дисциплины
5. Контрольные вопросы и задания
Слайд 3Введение
Программное обеспечение играет важную роль практически во всех аспектах повседневной
жизни и профессиональной деятельности человека. Информационные технологии помогли нам стать
эффективнее и продуктивнее, они помогают в решении практических задач и предоставляют среду для работы и развлечений, во многих случаях более комфортную по сравнению со старыми "докомпьютерными" технологиями.
Однако, и сегодня серьезной проблемой является достижение адекватной стоимости, сроков разработки и качества программных продуктов.
Первый кризис программирования был отмечен в конце 60-х годов прошлого века: стоимость программного обеспечения вплотную приблизилась к стоимости компьютерной техники, и прогнозы показывали, что к середине 90-годов все человечество должно будет заниматься разработкой компьютерных программ. Тогда и заговорили о программной инженерии (или технологии промышленного программирования), как о некоторой дисциплине, целью которой является сокращение стоимости программ.
Программная инженерия обычно ассоциируется с разработкой сложных программных комплексов коллективами разработчиков. Становление и развитие этой области деятельности было вызвано рядом проблем, связанных с высокой стоимостью программного обеспечения, сложностью его создания, необходимостью прогнозирования и управления процессами разработки.
Сам термин – software engineering впервые был озвучен в 1968 году на конференции подкомитета НАТО по науке и технике, рассматривавшей проблемы проектирования, разработки, распространения и поддержки компьютерных программ. Там впервые было заявлено о необходимости создания дисциплины программная инженерия, которой следует руководствоваться для преодоления надвигающегося кризиса ПО.
В этом же году состоялась встреча руководителей ряда крупных программных проектов, на которой была предложена концепция жизненного цикла ПО (SLC – Software Lifetime Cycle) как последовательности стадий, которые необходимо выполнить в процессе создания и эксплуатации ПО.
Слайд 4Предпосылки и история развития
промышленных технологий разработки ПО
1.1. Модульное программирование
Одна
из причин высокой стоимости ПО, отмеченная еще на ранних этапах
развития программной инженерии – необходимость разработки одинаковых фрагментов кода, реализующих типовые задачи в различных программах. Использование ранее написанных фрагментов при создании новых компьютерных программ сулило существенное снижение сроков и стоимости их разработки.
Главный принцип модульного программирования состоял в выделении таких фрагментов и оформлении их в виде модулей. Каждый модуль снабжался интерфейсом модуля - описанием, в котором устанавливались правила его использования. Интерфейс задавал связи модуля с основной программой – связи по данным и связи по управлению. При этом возможность повторного использования модулей определялась тем, насколько эти связи удалось согласовывать с организацией данных и управления головной программы.
Наиболее простыми в этом отношении оказались модули решения математических задач: решения уравнений, систем уравнений, задач оптимизации. К настоящему времени накоплены и успешно используются большие библиотеки таких модулей. Для многих других типов модулей возможность их повторного использования оказалась проблематичной в виду сложности их связей с основной программой. Например, модуль расчета зарплаты, написанный для коммерческого предприятия, может не подойти для государственного бюджетного учреждения, т.к. зарплата в этих организациях рассчитывается не во всем одинаково.
Повторное использование модулей со сложными интерфейсами является достаточно актуальной задачей и по сей день. Для ее решения разрабатываются специальные формы (структуры) представления модулей и организации их интерфейсов.
Слайд 51.2. Структурное программирование
Следующий этап возрастания стоимости ПО - переход к
разработке сложных программных комплексов (управление космическими объектами и компонентами оборонного
комплекса, автоматизация крупных промышленных предприятий и финансовых учреждений и т.д.). Этот переход был вызван появлением вычислительной техники третьего поколения (интегральные схемы), обеспечившей существенное повышение производительности вычислений.
Сложность таких программных комплексов оценивалась следующими показателями:
большой объем программного кода (миллионы строк);
большое количество связей между элементами кода;
большое количество разработчиков (сотни человек);
большое количество пользователей (сотни и тысячи);
длительное время эксплуатации разработанного ПО.
Основная часть стоимости таких программ приходится на стадию их сопровождения – то есть на исправление ошибок и внесение изменений в программный код. Основная причина высокой стоимости стадии сопровождения состояла в том, что программы были плохо структурированы – программный код был очень сложен и запутан, а документация была не понятна, трудно читаема и часто не соответствовала конечному варианту программного кода.
В результате была предложена технология структурного программирования, которая базировалась на следующих основных принципах проектирования и кодирования:
Нисходящее проектирование, при котором в системе вначале выделяются основные функциональные подсистемы, которые затем иерархически делятся на подсистемы.
Согласованность процессов проектирования и программирования: планирование и поддержка соответствия программного кода проектной документации.
Применение специальных языков проектирования и средств автоматизации использования этих языков (CASE-системы).
Дисциплина структурного программирования: операторы циклов и условные операторы, запрет использования меток и оператора goto.
Слайд 61.3. Объектно-ориентированное проектирование
и программирование
Следующая проблема роста стоимости программ была
вызвана тем, что изменения требований к программе стали вноситься не
только на стадии сопровождения, но и на стадии проектирования и программирования – проблема заказчика, который не знает, что он хочет. В этих условиях создание программного продукта превратилось в его перманентное перепроектирование, и потребовалась методология, обеспечивающая возможность внесения изменений в программу, не меняя ранее написанного кода.
Решением этой проблемы стало использование подхода (метода), который стали называть объектно-ориентированным проектированием (OOD) и программированием (OOP). Суть этого подхода состоит в том, что вводится понятие класса как развитие понятия модуля с определенными свойствами и поведением, характеризующими обязанностями класса. Каждый класс может порождать объекты – экземпляры данного класса. При этом работают основные принципы (парадигмы) ООП:
Инкапсуляция – объединение в классе данных (свойств) и методов (процедур обработки).
Наследование – возможность вывода нового класса из старого с частичным изменением свойств и методов.
Полиморфизм – определение свойств и методов объекта по контексту.
Слайд 71.4. Краткие исторические итоги
1. Программная инженерия (или технология промышленного программирования)
возникла и формировалась под давлением роста стоимости создаваемого ПО. Главная
цель программной инженерии – сокращение стоимости и сроков разработки компьютерных программ.
2. Программная инженерия прошла несколько этапов развития, в процессе которых были сформулированы фундаментальные принципы и методы разработки программных продуктов.
3. Основной принцип программной инженерии: программы создаются в результате выполнения нескольких взаимосвязанных этапов (анализ требований, проектирование, разработка, внедрение, сопровождение), составляющих жизненный цикл программного продукта.
4. Фундаментальными методами проектирования и разработки являются модульное, структурное и объектно-ориентированное проектирование и программирование.
5. Кризис программирования продолжается.
Слайд 8Кризис программирования продолжается
Несмотря на то, что программная инженерия достигла определенных
успехов, перманентный кризис программирования продолжается.
Связано это с тем, рубеж
80–90-х годов отмечается как начало информационно-технологической революции, вызванной взрывным ростом использования информационных средств: персональный компьютер, вычислительные сети, мобильная связь, электронная почта, Internet и т.д.
Цена успеха – возрастают потребности в разработке ПО и, как следствие, кризис программирования принимает хронические формы:
США тратит ежегодно более $200 млрд. на более чем 170 тыс. проектов разработки ПО в сфере IT;
31,1% из них закрываются, так и не завершившись;
52,7% проектов завершаются с превышением первоначальных оценок бюджета/сроков и ограниченной функциональностью;
потери от недополученного эффекта внедрения ПО измеряются триллионами.
Слайд 9Кризис программирования продолжается
Статистика по 30 000 программным проектам,
выполненным американскими
софтверными компаниями
успешные проекты – завершены вовремя в полном объеме
и в рамках бюджета;
проблемные проекты – завершены не в полном объеме и/или с нарушением сроков, и/или перерасходом бюджета;
проваленные проекты – не доведены до конца (перерасход средств, низкое качество)
Слайд 10Кризис программирования продолжается
Основными причинами неудачи IT-проектов признаются:
Нереалистичные временные рамки проекта.
Недостаток
количества исполнителей.
Размытые границы проекта.
Недостаток финансирования.
Нехватка квалифицированных кадров.
Слайд 112. Предмет программной инженерии
На сегодняшний день нет единого определения понятия
"программная инженерия". Ниже приведено несколько таких определений, данных крупными специалистами
в этой области, или зафиксированные в документах ведущих организаций.
Программная инженерия – это установление и использование обоснованных инженерных принципов (методов) для экономного получения ПО, которое надежно и работает на реальных машинах.
Программная инженерия – это та форма инженерии, которая применяет принципы информатики и математики для рентабельного решения проблем ПО.
Программная инженерия – это применение систематического, дисциплинированного, измеряемого подхода к разработке, использованию и сопровождению ПО.
Программная инженерия – это дисциплина, целью которой является создание качественного ПО, которое завершается вовремя, не превышает выделенных бюджетных средств и удовлетворяет выдвигаемым требованиям.
Слайд 122. Предмет программной инженерии
Для того, чтобы получить представление о предмете
программной инженерии, нам потребуется ответить на следующие базовые вопросы:
Что такое
инженерия и чем занимаются инженеры ?
Что такое программное обеспечение (программный продукт - software)?
Что такое программная инженерия (software engineering)?
В чем отличие программной инженерии от информатики (the computer science)?
В чем отличие программной инженерии от других инженерий?
Каковы методы программной инженерии?
Что такое CASE (Computer-Aided Software Engineering)?
Какими свойствами должна обладать хорошая компьютерная программа?
Слайд 132.1. Что такое инженерия (engineering) и чем занимаются инженеры ?
Слово
инженер (engineer) имеет французское происхождение и первоначально использовалось для обозначения
военных специалистов по артиллерийскому вооружению. Позднее этим термином стали обозначать широкий круг технических специалистов, работающих в различных (не только военных) областях.
Профессиональная деятельность инженеров связана с проектированием, производством или эксплуатацией сложных технических объектов.
При всем разнообразии инженерных областей существует ряд объединяющих их базовых характеристик, которые могут использоваться для описания основ инженерии как таковой.
Инженерная деятельность неразрывно связана с необходимостью принятия решений и выбора подходов, оптимально соответствующих решаемой задаче с учетом существующего контекста.
Инженеры используют измеримые количественные характеристики; они совершенствуют и уточняют существующие методы измерений.
Инженеры используют дисциплинированные процессы при реализации проектов и понимают важность эффективной организации командной работы.
Инженеры несут ответственность за выполнение широкого спектра задач, начиная с исследований, разработки, проектирования, производства, тестирования, внедрения, эксплуатации и управления, и заканчивая продажами, консультированием и обучением.
Инженеры в своей деятельности используют инструментальные средства, поэтому выбор и использование походящих средств является крайне важным вопросом.
Инженеры объединяются в профессиональные сообщества и способствуют развитию своей отрасли путем разработки и внедрения рекомендаций, аттестационных принципов, стандартов, распространению хорошо зарекомендовавших себя профессиональных практик (best practices).
Инженеры повторно используют (reuse) результаты проектирования.
Слайд 142.2. Что такое программное обеспечение (программный продукт) ?
Взгляд на ПО,
как только на программу, работающую в компьютере, слишком узок -
потребитель получает не только программу, но еще и данные, необходимые для корректной работы программы в различных условиях (например, конфигурационные файлы или частично заполненную базу данных) и документацию к программе (например, руководство по её установке и эксплуатации).
Поэтому вместо термина программное обеспечение иногда используют термин программный продукт, подчеркивая этим тот факт, что ПО ориентировано на продажу потребителю.
Программное обеспечение определяется как набор компьютерных программ и связанных с ними данных и документации.
Различают два типа программных продуктов:
Коробочные продукты (shrink-wrapped software – упакованное ПО) – ориентированы на большие тиражи и широкий круг потребителей. Постановка задачи и спецификация требований, а также финансирование проекта осуществляется самим разработчиком, он же и несет все возможные риски в случае коммерческой неудачи. Стоимость создания коробочного ПО проецируется на весь тираж, и цена одного экземпляра, как правило, невысока.
Заказные продукты (bespoke или customized products) – разрабатываются в соответствии с требованиями конкретного заказчика, который финансирует проект и рискует тем, что разработчик не сможет реально выполнить все требования в срок и при выделенном бюджете. Заказные продукты массово не копируются, и цена экземпляра остается весьма высокой.
Слайд 152.3. Что такое программная инженерия (software engineering)?
Программная инженерия — это
инженерная дисциплина, которая связана со всеми аспектами производства и эксплуатации
ПО.
Инженер – это специалист, который выполняет практическую работу и добивается практических результатов, в отличие, например, от ученого, который может сказать: "проблема неразрешима в рамках существующих теорий" - и это будет научный результат, достойный опубликования или защиты диссертации.
Для решения задачи инженеры применяют теории, методы и средства, пригодные для решения данной задачи, но они применяют их выборочно и всегда пытаются найти решения даже в тех случаях, когда теорий или методов, соответствующих данной задаче, еще не существует.
Инженерные методы или способы, возможно, теоретически не обоснованные, но получившие неоднократное подтверждение на практике, в программной инженерии получили название профессиональных практик (best practices).
Инженеры работают в условиях ограниченных ресурсов: временных, финансовых и организационных. Программный продукт должен быть создан в установленные сроки, в рамках выделенных средств, оборудования и имеющимся составом исполнителей.
Программная инженерия занимается не только техническими вопросами производства ПО, но и управлением программными проектами (планирование, финансирование, управление коллективом разработчиков) и сопровождением ПО в процессе эксплуатации (обучение пользователей, обновление, модификация).
Задачей программной инженерии является также разработка средств, методов и теорий для поддержки процесса производства ПО.
Слайд 162.4. В чем отличия программной инженерии от информатики?
Информатика (the computer
science) занимается теорией и методологией вычислительных систем, а программная инженерия
- практическими проблемами создания ПО.
Информатика составляет теоретическую основу программной инженерии, и программный инженер должен хорошо знать информатику (так же, как, например, инженер по электронике - физику).
Информатика – не единственный теоретический фундамент программной инженерии, т.к. круг проблем, стоящих перед программным инженером значительно шире просто написания программ. Это еще и управление проектами, финансами, организация работ в коллективе и т.д. Решение этих проблем требует от программного инженера фундаментальных знаний, далеко выходящих за рамки информатики.
Особо следует отметить еще одну проблему, которую приходится решать программному инженеру - это проблема взаимодействия с заказчиком и пользователями программного продукта на различных стадиях проекта. Качественное решение этой проблемы потребует от программного инженера, как минимум, хорошей эрудиции в различных областях человеческой деятельности – ведь сфера применения программного обеспечения практически ни чем не ограничена.
Слайд 172.5. В чем отличие программной инженерии от других инженерий?
Жизненный цикл
продукта любой инженерии включает типовой набор фаз:
проектирование;
создание образца;
испытания;
производство;
эксплуатация;
утилизация.
С этой точки зрения программная инженерия ничем не отличается от других инженерий, и было бы заманчиво максимально использовать в программной инженерии технологии проектирования и производства, применяемые в других технических областях.
Однако, имеются и существенные отличия программной инженерии от других инженерий, ограничивающие возможности широкого использования накопленного в других областях опыта.
Рассмотрим основные из таких отличий, позволяющие, в частности, получить ответ на вопрос, почему доля провальных IT-проектов так велика.
Слайд 182.5. В чем отличие программной инженерии от других инженерий?
1). В
отличие от объектов других инженерий, компьютерная программа – не материальный
объект, что определяет специфичное распределение стоимости реализации фаз жизненного цикла ПО.
Стоимость фазы производства такого объекта исчезающее мала, так как производство программы сводится к копированию образца с одного носителя на другие.
Отсутствует также и фаза создания образца, который формируется компилятором автоматически на завершающем этапе проектирования программы.
Отсюда следуют вывод о том, что стоимость стадии проектирования ПО – это основной элемент всей его стоимости (при этом стоимость проектирования коробочных продуктов "размазывается" по копиям, а цена заказных, массово не копируемых продуктов остается высокой).
Слайд 192.5. В чем отличие программной инженерии от других инженерий?
2). Второе
существенное отличие состоит в том, что компьютерная программа – искусственный
объект, поведение которого не подчиняется объективным законам природы.
Например, инженер–строитель использует объективные законы строительной механики и может проверить свои архитектурные решения на соответствие этим законам и тем самым обеспечить объективный контроль качества проекта.
У программного инженера также есть типовые архитектурные решения (например, клиент-серверная архитектура), но эти решения не базируются на фундаментальных законах и определяются уровнем развития вычислительной техники.
Прямым следствием отсутствия возможности теоретического контроля качества программного проекта является то, что тестирование – это единственный способ убедиться в работоспособности программного продукта. Именно поэтому стоимость тестирования составляет существенную часть стоимости ПО.
Слайд 20Типовая структура стоимости ПО
Структура стоимости ПО существенно зависит от типа
ПО, применяемых методов его разработки и (!) метода оценки стоимости.
Типовая схема распределения стоимости между основными этапами (без учета стоимости этапа сопровождения):
15% - спецификация (формулировка требований и условий разработки);
25% - проектирование (разработка и верификация проекта);
20% - разработка (кодирование и тестирование компонентов);
40% - интеграция (сборка и тестирование продукта).
Для коробочного ПО характерна более высокая доля стоимости тестирования за счет сокращения (до 5%) доли стоимости спецификации. Применение опробованных решений и готовых компонентов позволяет повысить качество и сократить сроки разработки коробочных продуктов.
Распределение стоимости заказного ПО зависит от его сложности. При сложном ПО возрастает доля стоимости спецификации и интеграции и сокращается доля проектирования и разработки за счет применения опробованных проектных решений и повторного использования готовых компонентов.
Слайд 212.5. В чем отличие программной инженерии от других инженерий?
3). Третье
отличие заключается в том, что программная инженерия – молодая дисциплина,
опыт которой насчитывает всего несколько десятков лет.
По сравнению с опытом строительной инженерии (тысячелетия) это, конечно, очень мало. Программную инженерию иногда сравнивают с ранней строительной, когда законы строительной механики еще не были известны и строительные инженеры действовали методом проб и ошибок, накапливая бесценный опыт.
Несмотря на молодой возраст, программная инженерия также накопила определенный опыт, который позволяет делать удачные проекты.
Слайд 222.6. Краткие итоги
Программная инженерия качественно отличается от других инженерных дисциплин
нематериальностью программного обеспечения и дискретной природой его функционирования. Важные следствия:
1) отсутствие производственной фазы в традиционном промышленном смысле; 2) фаза сопровождения программного обеспечения в основном связана с продолжающейся его разработкой или эволюцией, а не с традиционным ремонтом и обслуживанием по причине физического износа.
Программная инженерия концентрируется на абстрактных/логических объектах вместо конкретных/физических и стремится интегрировать принципы математики и информатики с инженерными подходами, разработанными для производства материальных технических объектов.
Основанием программной инженерии является информатика, а не естественные науки, при этом основной упор делается на дискретную, а не на классическую (непрерывную) математику.
Основываясь на математике и компьютерной технике, программная инженерия занимается разработкой моделей и надежных методов производства высококачественного программного обеспечения, и данный подход распространяется на все уровни – от теории и принципов до реальной практики создания ПО.
Слайд 233. Методология программной инженерии
Толковый словарь русского языка С.И.Ожегова определяет
понятие "Методология" как "Принципы и способы организации теоретической и практической
деятельности. Совокупность методов, применяемых в какой-либо науке".
Методология программной инженерии – это совокупность принципов и способов организации деятельности проектной группы для создания качественного программного продукта при заданных ограничениях на основные ресурсы: время, бюджет, оборудование, количество и профессиональная компетентность исполнителей.
Слайд 243.1. Модели и методы программной инженерии
Методология программной инженерии основана на
идее поэтапного преобразования моделей ПО в компьютерную программу – окончательную
модель решаемой задачи.
На этапе спецификаций создается модель – описание требований;
Далее эта модель преобразуется в модель проекта ПО;
Затем модель проекта преобразуется в исходный код программы на языке высокого уровня;
И, наконец, исходный код программы преобразуется в исполнимый программный код.
Слайд 25Модели и методы программной инженерии
Методы программной инженерии должны включать в
себя следующие компоненты:
Описание моделей и нотация, используемая для их описания
(например, объектные модели, конечно-автоматные модели и т.д.);
Правила и ограничения, которые надо выполнять при разработке моделей (например, каждый объект должен иметь уникальное имя);
Рекомендации — эвристики, характеризующие хорошие приемы проектирования в данном методе (например, ни один объект не должен быть больше семи подчиненных ему объектов);
Руководство по применению метода — описание последовательности работ (действий), которые надо выполнить для построения моделей (например, все атрибуты объекта должны быть документированы до определения операций, связанных с этим объектом).
Нет идеальных методов – каждый из них применим и эффективен только для тех или иных случаев.
Нет абсолютных методов – применяемые на практике методы могут включать элементы различных подходов.
Выбор эффективного в конкретной ситуации метода – одна из задач, решаемых программными инженерами.
Модели метода представляются графически с помощью некоторого языка представления моделей (языка диаграмм). Позднее в нашей дисциплине будут рассмотрены элементы одного из таких языков - Unified Modeling Language (UML).
Слайд 263.2. Что такое CASE ?
CASE - Computer Aided Software Engineering
- инструментальные программные средства, используемые для поддержки процесса создания ПО.
CASE средства могут быть классифицированы по нескольким признакам:
По уровню применения:
Upper CASE - средства анализа требований;
Middle CASE - средства проектирования;
Low CASE - средства разработки приложений.
Специализированные:
Средства проектирования баз данных;
Средства реинжиниринга (восстановления) модели (формирование ERD на основе анализа схем БД или формирования диаграмм на основе анализа программных кодов).
Вспомогательные:
Средства планирования и управления проектом;
Средства конфигурационного управления;
Средства тестирования.
Интегрированные CASE-средства охватывают все этапы и процессы создания ПО от анализа требований до тестирования и выпуска документации. Интегрированные CASE-средства представлены, как правило, в виде набора согласованных по интерфейсу средств, предназначенных для поддержки отдельных этапов процесса.
При выборе CASE-средств следует руководствоваться основным принципом: сначала метод создания ПО, а потом – CASE-средства, применимые для этого метода.
В практической части нашей дисциплины мы ознакомимся с некоторыми CASE-средствами. Более подробное их освоение планируется при изучении других специальных дисциплин.
Слайд 273.3. Свойства хорошей компьютерной программы
Прежде всего, хорошая компьютерная программа
должна удовлетворять функциональным требованиям – то есть делать то, что
ожидает от нее заказчик.
Кроме функциональных требований, существует еще ряд характеристик, которым в той или иной степени должна обладать каждая программа.
Эти характеристики принято называть нефункциональными требованиями:
Сопровождаемость(maintainability)
Надежность (dependability)
Эффективность (efficiency)
Удобство использования (usability)
Слайд 283.3. Свойства хорошей компьютерной программы
Сопровождаемость означает, что ПО должно быть
написано с расчетом на его дальнейшее развитие. Это критическое свойство
системы, т.к. изменения ПО неизбежны вследствие изменения бизнеса. Сопровождение ПО выполняют, как правило, не те люди, которые его разрабатывали. Сопровождаемость ПО включает следующие элементы:
наличие и понятность проектной документации;
соответствие проектной документации исходному коду;
понятность исходного кода;
простота изменений исходного кода;
простота добавления новых функций.
Надежность ПО включает три основных элемента:
отказоустойчивость – возможность восстановления программы и данных в случае сбоев в работе;
безопасность – сбои в работе программы не должны приводить к опасным последствиям (авариям);
защищенность от случайных или преднамеренных внешних воздействий ("защита от дурака", защита от вирусов, спама).
Эффективность. ПО не должно впустую тратить системные ресурсы, такие, как память, процессорное время, каналы связи. Показатели оценки эффективности:
время выполнения кода;
загруженность процессора;
объем требуемой памяти;
время отклика на запрос и т.п.
Удобство использования. ПО должно быть легким в использовании, причем именно той категорией пользователей, на которых рассчитано приложение. Это включает в себя наличие адекватной документации и понятный пользователям интерфейс, причем понятный не "интуитивно", а профессионально.
Слайд 293.3. Свойства хорошей компьютерной программы
Как правило, реализация нефункциональных требований требует
больших затрат, чем функциональных.
Сопровождаемость требует значительных усилий по поддержанию
соответствия проекта исходному коду и применения специальных методов создания модифицируемых программ.
Надежность – требует дополнительных средств восстановления системы при сбоях, шифрования данных и/или ограничения доступа.
Эффективность – требует поиска специальных архитектурных решений, выбора каналов передачи данных с требуемыми характеристиками и оптимизации программного кода.
Удобство использования – требует создания профессионально понятного пользовательского интерфейса, проектирование которого потребует от разработчика более глубокого "погружения" в предметную область проекта.
Слайд 304. Обзор программы изучения дисциплины
Слайд 31Образовательные результаты
Должен ЗНАТЬ:
Историю развития промышленных технологий разработки программных продуктов и
стандартизации в области программной инженерии.
Процессы жизненного цикла программного обеспечения (стандарт
ISO/IEC 12207).
Основные положения корпоративных стандартов разработки и моделей жизненного цикла программного обеспечения: MSF, RUP, XP
Основы языка визуального моделирования программных систем (UML).
Профессионально-этические принципы программной инженерии (кодекс этики IEEE-CS/ACM).
Должен УМЕТЬ:
Использовать типовые инструментальные средства для реализации программных проектов
Слайд 34Балльные оценки
Текущий и рубежный контроль
Слайд 375. Контрольные вопросы и задания
Определите понятия "программный продукт" и "программное
обеспечение". Чем отличаются "коробочные" программные продукты от "заказных"?
Что понимается
под "жизненным циклом ПО"?
Что называют "кризисом программного обеспечения"? В чем он проявляется и каковы его основные причины?
Определите понятие "программная инженерия".
Что общего между программной инженерией и другими инженерными отраслями?
В чем отличия между программной инженерией и другими инженерными отраслями?
Определите основные черты технологии модульного программирования.
Определите основные черты технологии структурного программирования.
Определите основные черты технологии объектно-ориентированного программирования.
Какими из перечисленных технологий программирования Вы владеете и в какой степени?
Что такое CASE ? Приведите классификацию CASE-средств по различным признакам.
Приведите примеры и рассмотрите функциональные возможности известных Вам CASE-средств уровня Low CASE.
Определите и дайте краткую характеристику основным нефункциональным требованиям к программному продукту.
Какие Вам известны способы повышения уровня отказоустойчивости баз данных ?
Какие Вам известны способы повышения уровня защищенности компьютерных систем от преднамеренных внешних воздействий ?