М. Сидоров - ВСТУП ДО ІНЖЕНЕРІЇ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
Обзор книги М. Сидоров - ВСТУП ДО ІНЖЕНЕРІЇ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
ВСТУП
Видання містить матеріал лекцій з дисципліни «Вступ до програмної інженерії», яка викладаеться в бакалавраті «Програмна інженерія».
Матеріал книги є базовим під час вивчення інших дисциплін бакалаврату «Програмна інженерія».
Курс лекцій складається з двох, модулів та семи розділів, у яких викладено основні принципи, методи та засоби інженерії програмного забезпечення.
У першому розділі розглянуто умови виникнення інженерії програмного забезпечення та її місце в контексті інших інженерій.
У другому розділі висвітлено культуру інженерії програмного забезпечення і моделі зрілості як засоби реалізації культури.
У третьому розділі викладено результати інженерної діяльності - програми, програмні продукти і системи.
У четвертому розділі наведено складові життєвого циклу програмного забезпечення.
У п'ятому розділі розглянуто складові інженерії програмного забезпечення; їх застосування і зв'язок.
У шостому розділі подано моделі життєвого циклу програмного забезпечення.
У сьомому розділі викладено окремі матеріали з менеджменту проектів, а саме - оцінка вартості програмного забезпечення.
Курс лекцій може застосовуватися під чаc вивчення дисципліни «Методологія розробки великих програмних комплексів і систем», яка викладаєтеся в бакалавраті «Комп'ютерні науки».
Модуль І
ІНЖЕНЕРІЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ. ОСНОВНІ ПОНЯТТЯ
Розділ 1. ІСТОРИЧНИЙ АСПЕКТ ІНЖЕНЕРІЇ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
Незважаючи на відносно недовгий період, що пройшов з моменту появи інженерії програмного забезпечення (1968), вона має свою історію.
У розділі 1 розглянуто процеси, діячі і події, які призвели до по яви інженерії програмного забезпечення. Показано, що інженерія програмного забезпечення — це одна з Інженерних дисциплін. Наведено визначення інженерії програмного забезпечення. Розглянуто професійні властивості інженера з програмного забезпечення,
1.1. Умови виникнення інженерії програмного забезпечення
Як відомо, перші комп'ютери, що працювали під управлінням Програм, які зберігаються в пам'яті, з'явилися у 40 - 50-х рр. XX ст. Разом з ними постало нове завдання, суть якого полягає у створенні програм, і процес, спрямований на її вирішення - програмування. Тому подальший розвиток обчислювальної техніки пов'язаний не тільки з удосконаленням комп'ютерів і їх розповсюдженням, але й з розвитком програмування.
Майже одночасно з появою комп'ютерів відбулося розділення розробників програм на два типи - прикладних і системних програмістів.
До першого типу (прикладні програмісти) увійшли фахівці з прикладних галузей (доменів) - математики, фізики, економіки, освіти; технологій. Вони писали програми мовами високого рівня (Cobol, Fortran) для вирішення тих завдань, що виникають у галузях. Їх діяльність називалася прикладним програмуванням.
До другого типу (системні програмісти) увійшли фахівці, від яких не вимагалося знань доменів, оскільки вони займалися автоматизацією процесів розробки програм. Системні програмісти за звичай писали програми в машинному коді або мовою АСЕМБЛЕР. Їх діяльність називалася системним програмуванням. Сукупність прикладних і системних програм називається програмним забезпеченням.
У 60 - 70-х рр. XX ст. були створені високопродуктивні обчислювальні машини (швидкістю близько 1 млн., опер./с БЕСМ-6 в CPCP i UNIVAC в США). З їх появою виникла можливість вирішення великих і складних завдань. Це, своєю чергою, потребувало розробки великих програм (від 100 тис. до 1 мли. рядків). Великі програми спричинили проблеми, пов'язані з їх створенням і вико рисканням.
Із збільшенням продуктивності, кількості обчислювальних машин і розширенням сфери їх застосування, з'явилися програми двох типів. Програми першого типу створювалися і продавалися разом з машинами (транслятори, операційні системи, бібліотеки підпрограм). Програми другого типу створювалися на замовлення і призначалися для вирішення завдань з різних предметних галузей. Таким чином, з'явився замовник - організація, яка ставила завдання, призначала терміни, виділяла бюджет і оплачувала роботу. У зв'язку з цим дуже швидко з'явилось завдання - супровід Про грами і проблема - непорозуміння між розробником і замовником.
У 60-х рр. XX ст. унаслідок розповсюдження застосування комп'ютерів, зросла роль і утвердилась важливість програмного забезпечення. Цьому сприяла поява значної кількості проектів програмного забезпечення, що характеризувалися такими аспектами:
- наявністю замовника або ринкової ніші;
- великими розмірами і витратами;
- жорсткими вимогами до процесів реалізації і результатів;
- мілітаризацією.
Контекст, у якому розроблялося і використовувалося програмне забезпечення, сприяв особливому стану програмного забезпечення в обчислювальній техніці і характеризувався такими чинниками:
- розроблялося дуже велике за обсягом програмне забезпечення, характерним представником якою була тоді операційна система OS360 для ЕОМ серії IBM. Це програмне забезпечення містило більше 500 тис. операторів і розроблялося значним, для того часу, колективом розробників (близько 1000). Досвід цього проекту був узагальнений і став відомий;
- програмне забезпечення вирішувало настільки серйозні зав дання, що виникла проблема з його супроводом, суть якого зводилася не тільки до виправлення помилок, допущених при розробці, але й до модифікації програмного забезпечення у зв'язку із зміною вимог замовника або середовища, у якому експлуатувалося програмне забезпечення, або бажанням розробника продовжити експлуатацію, шляхом випуску вдосконалених версій;
- часті зриви термінів розробки і перевищення бюджету потре бували не тільки нового підходу до організації процесу розробки, але і нових методів і засобів, що забезпечують обґрунтований розрахунок параметрів проекту, які характеризували фінансування, терміни, об'єми програмного забезпечення, кількісний і якісний склад колективу розробників. Існуюча і широко використовувана одиниця вимірювання - «людино-місяць» не працювала на таких масштабних проектах;
- досвід розробки програмного забезпечення, який нагромаджений за цей період, показав, що все рідше розроблялися принципово нові проекти. Лише 15% усіх проектів потребували розробки «з нуля». Нині 85% належать до проектів, що повторюються. Тому актуальним стає використання досвіду, нагромадженого в програмному забезпеченні До того ж, поступово стало зрозуміло, що має вирішуватися завдання використання досвіду не лише безпосередньо програмування, у вигляді частин програм, але і досвіду результатів виконання інших процесів, наприклад, проектування. Для вирішення цього завдання в 1984 р. були широко розгорнені роботи з дослідження програмного забезпечення в аспекті повторного використання (reuse);
- техніка програмування і процеси, що були ефективні в 50-х і ранніх 60-х pp. XX ст. («програмування в малому») для розробки невеликих програм малими колективами, стали неефективними при розробці великого за обсягом, складного програмного забезпечення, що складається з мільйонів рядків коду, та вимагає декількох років роботи сотень фахівців різних спеціальностей. Були потрібні нові технології, що почали вважати «програмуванням у великому».
Почали з'являтися нові процеси, що потребували певної організації (табл.1.1). Таким чином, склалася ситуація, яка призвела до кризи в програмному забезпеченні і необхідності пошуку шляхів виходу з неї, так званої «срібної кулі». Виходом з цієї ситуації стало обговорення на конференції NATO в 1968 р. нової дисципліни, яку назвали «інженерія програмного забезпечення» (software engineering). До того ж, уперше акценти в методах, засобах і процесах розробки програмного забезпечення були зміщені: по-перше, з кодування програм на інші процеси їх розробки, а по-друге, з якісних аспектів у бік кількісних, інженерних. Окрім цього, додатковий стимул отримали ті, хто виконував наукові і практичні роботи з економічного напряму і менеджменту проектів програмного забезпечення.
Таблиця 1.1
Періоди розвитку 1960±5 років програмування "any-wich-way" 1970±5 років «програмування в малому» 1980±5 років «програмування у великому» Об'єкти порівняння Об'єкти Маленькі програми Алгоритми і програми Системна структура Дані Неструктурована інформація Структури даних Бази даних і типи Управління Елементарне розуміння діаграм управління Програми виконуються і закінчуються Програми, що безперервно виконуються Простір етанів Стан, що погано розуміється окремо від управління Маленькі, прості Великі, структуризовані Організаційне управління Немає Індивідуальні зусилля Колективні зусилля, супровід Інструмент» Асемблери Компілятори, редактори, завантажувачі Середовища, інтегровані інструменти1.2. Інженерія програмного забезпечення - інженерна галузь