1 ПРОГРАМНА ІНЖЕНЕРІЯ ЯК ФАХ
Виробництво й використання комп’ютерних програм є тепер
масовою діяльністю: як засвідчує статистика,
розробленням програм зайнято майже сім мільйонів людей,
а тих, хто активно використовує програмні системи у
своїй діяльності за фахом, нараховують десятки
мільйонів. Програмні системи набули статусу соціально
значущого фактора, який впливає на безпеку та добробут
суспільства.
За таких обставин світове суспільство прийшло до висновку,
що технологія виробництва програм потребує свого оформлення
як самостійний інженерний фах, який має забезпечити у світі
відповідний кадровий потенціал для обсягу програмних
розробок, що постійно зростає. За чотири десятиріччя досвіду
з програмування створено передумови для такого оформлення, і
тепер ми можемо спостерігати інтенсивний процес визначення
нового фаху, котрий названо програмною інженерією. Цей
процес протікає у двох руслах
-
як широка дискусія у відповідних спеціальних журналах
(наприклад, у джерелах [1,2]) та як цілеспрямована
організаційна діяльність міжнародних професійних
комп’ютерних об’єднань на чолі з відомими АСМ та
IEEE
Computer
Society,
для концентрації зусиль яких створено спеціальний комітет. У
його публікаціях [3] дефініція програмної інженерії
визначається так: програмна інженерія
-
це система методів, засобів та дисципліни планування,
розробки, експлуатації й супроводження програмного
забезпечення, здатна до масового відтворення.
Як бачимо, до ключових процесів у сфері діяльності даного
фаху віднесено планування та супроводження. При цьому перший
визначається як аналіз цілей і завдань розробки, можливості
її реалізації та потрібних
для цього ресурсів, а другий (супроводження) трактується не стільки
як усунення знайдених хиб, скільки як визначення й
реалізація необхідних змін, зумовлених еволюцією потреб та
умов діяльності користувачів. Адже один з авторитетів
програмної інженерії М. Джексон [4] стверджує, що золотим
правилом професії є таке: всяка закінчена програмна система
одразу потребує змін.
Чому мова йде саме про інженерну діяльність? Згадаймо, як
вона визначається у відомому загальному тлумачному словнику
[5]:
-
інженерія — це застосування наукових результатів, яке
дозволяє мати користь від властивостей матеріалів та джерел
енергії;
-
діяльність із створення машин для надання корисних послуг.
На відміну від науки, метою якої є здобуття знань, для
інженерії знання є лише засобом отримання користі. Як казав
ще один з визнаних авторитетів Ф. Брукс [6], вчений будує,
щоб навчитися, інженер навчається, щоб будувати.
Розроблення програмних систем визначається, як бачимо, як
інженерна діяльність. Однак слід навести її досить значні
відмінності від традиційної інженерії:
-
традиційні гілки інженерії мають високий ступінь
спеціалізації (авіоніка, машинобудування, хімія тощо). У
програмній інженерії спеціалізація є помітною тільки у
досить вузьких застосуваннях, як-от транслятори, операційні
системи і деякі інші;
-
об’єкти традиційної інженерії добре визначені, і маніпуляції
з ними відбуваються у вузькому контексті, коли проблеми
ухвалення рішень стосуються окремих деталей, а не загальних
питань. Принципи побудови автомобіля або літака апріорно
визначені, їхні типові складові — також, напрацьовано
колекцію типових проектних рішень та деталей, що
відповідають типовим потребам замовників: гусениці для
бездоріжжя, двері позаду для транспортування поранених, шипи
на шинах для ожеледиці тощо; нова розробка потребує змін
лише окремих з них. У програмній інженерії подібної
типізації немає;
-
окремі проблеми традиційної інженерії та відповідні їм
готові рішення добре класифіковані й каталогізовані. У
програмній інженерії нова розробка виглядає як нова
проблема, в якій досить важко розгледіти аналогії із
системами, які було побудовано раніше, бо класифікації та
каталогізації розв’язаних проблем практично немає.
Перелічені відмінності потребують значних зусиль для
нівелювання їх, і саме тепер світова комп’ютерна спільнота
визнала доцільність та вчасність таких зусиль. Це визнання
матеріалізували міжнародні професійні об’єднання, створивши
спеціальний комітет, метою якого є перетворення програмної
інженерії на спеціальність, що визнається офіційно і має
зафіксовані ознаки для розпізнавання її як такої.
Практика спеціалізації професійної діяльності, що склалася в
цивілізованому світі, дозволяє вважати професію "зрілою",
якщо для неї є:
-
система початкового навчання за фахом;
-
механізми розвитку вмінь та навичок персоналу, необхідні для
практичної діяльності;
-
сертифікація персоналу, організована в рамках професії;
-
ліцензування фахівців, організоване під керівництвом органів
влади (зокрема, для систем з підвищеним ризиком, як-от для
АЕС та їм подібних);
-
системи професійного вдосконалення кваліфікації персоналу та
відстеження сучасного рівня знань і технологій за фахом, щоб
уможливити для фахівців виживання за умов інтенсивного
розвитку фаху;
-
етичний кодекс фахівців;
-
професійні об’єднання.
Для програмної інженерії є лише потужні професійні
об’єднання, такі, як широковідомі серед професіоналів
американське об’єднання комп’ютерних спеціалістів
ACM
(Association
for
computer
machinery)
і комп’ютерна спілка при Інституті інженерів з електроніки
та електрики
IEEE
Computer
Society,
об’єднаними зусиллями яких у 1999 році було ухвалено етичний
кодекс професіонала з програмної інженерії [7].
Для наявності усіх інших з перелічених ознак потрібно, щоб
було зафіксовано суму знань, які становлять фахову
кваліфікацію персоналу. Згадані вище професійні об’єднання
та ряд потужних виробників програмного забезпечення стали як
ініціаторами, так і організаторами діяльності з визначення
суми професійних знань з програмної інженерії, для чого й
було створено спеціальний комітет, який об’єднав широке коло
провідних спеціалістів.
У 1999 році комітет напрацював перелік головних розділів,
які, на думку членів комітету, є сумою необхідних знань з
даної професії, для кожного з розділів подано перелік тем,
що входять до його складу [3]. Таким чином, визначено два
вищі рівні дерева знань.
Назвемо ці розділи:
-
аналіз вимог (requirement
analysis)
до програмної системи, яку мають створити;
-
детальний проект згаданої системи;
-
кодування;
-
тестування системи;
-
процес супроводження програмного продукту;
-
керування конфігурацією;
-
забезпечення якості розробки;
-
забезпечення відповідності розробки до вимог її замовників
-
валідація (validation)
та забезпечення відповідності кодів до проекту
-
верифікація
(verification);
-
процес удосконалення отриманого програмного продукту.
Напрацьовано також перелік суміжних дисциплін, знання з яких
необхідні для фахівців з програмної інженерії. До таких
дисциплін, зокрема, належать:
-
комп’ютерна наука;
-
управління проектом;
-
електрична інженерія;
-
математика;
-
телекомунікації та мережі;
-
менеджмент;
-
когнітивні науки.
Отже, зміст нової інженерної дисципліни - програмна інженерія можна вважати, певною мірою, визначеним, хоча деякі корективи цілком імовірні.
Контрольні запитання і завдання
1.
У чому суть інженерної і наукової діяльності?
2.
У чому специфіка програмної інженерії як інженерної
діяльності?
3.
Назвіть ознаки професії. Які з них властиві програмній
інженерії?
4.
Які з названих ознак вимагають наявності зафіксованої суми
фахових знань, що становлять основи кваліфікації персоналу?
Вінницький національний технічний університет