Лекція 2. Поняття процесу проектування програмних продуктів
Чим програмування відрізняється від програмної інженерії? Тим, що перше є деякою абстрактною діяльністю і може відбуватися в багатьох різних контекстах. Поняття процесу розробки ПО. Універсальний процес. Поточний процес. Конкретний процес. Стандартний процес. Вдосконалення процесу.
Розробка програмного коду передує аналізом і проектуванням (перше означає створення функціональної моделі майбутньої системи без урахування реалізації, для усвідомлення програмістами вимог і очікувань замовника; друге означає попередній макет, ескіз, план системи на папері). Трудови трати на аналіз і проектування, а також форма представлення їх результатів сильно варіюються від видів проектів і переваг розробників і замовників.
Розробку системи також необхідно виконувати з урахуванням зручностей її подальшого супроводу, повторного використання і інтеграції з іншими системами. Це означає, що система розбивається на компоненти, зручні в розробці, придатні для повторного використання і інтеграції. А також необхідні характеристики, що мають, по швидкодії. Для цих компонент ретельно опрацьовуються інтерфейси. Сама ж система документується на багатьох рівнях, створюються правила оформлення програмного коду – тобто оставляются численні семантичні сліди, що допомагають створити і зберегти, підтримувати єдину, струнку архітектуру, одноманітний стиль, порядок.
Всі ці і інші додаткові види діяльності, що виконуються в процесі промислового програмування і необхідні для успішного виконання замовлень і називатимемо програмною інженерією (software engineering). Виходить, що так ми позначаємо, по-перше, деяку практичну діяльність, а по-друге, спеціальну область знання. Або іншими словами, наукову дисципліну. Адже для полегшення виконання кожного окремого проекту, для можливості використовувати різноманітний позитивний досвід, досягнутий іншими командами і розробниками, цей самий досвід піддається осмисленню, узагальненню і належному оформленню. Так з'являються різні методи і практики (best practices) – тестування, проектування, роботи над вимогами і ін., архітектурних шаблонів і ін. А також стандарти і методології, що стосуються всього процесу в цілому (наприклад, MSF, RUP, CMMI, Scrum). Ось ці-то узагальнення і входять в програмну інженерію як в область знання.
Програмна інженерія використовує досягнення інформатики, тісно пов'язана з системотехнікою, часто передує бизнес-реинжинирингом. Трохи докладніше про цей контекст програмної інженерії.
Информатика (computer science) – это свод теоретических наук, основанных на математике и посвященных формальным основам вычислимости. Сюда относят математическую логику, теорию грамматик, методы построения компиляторов, математические формальные методы, используемые в верификации и модельном тестировании и т.д. Трудно строго отделить программную инженерию от информатики, но в целом направленность этих дисциплин различна. Программная инженерия нацелена на решение проблем производства, информатика – на разработку формальных, математизированных подходов к программированию.
Системотехніка (system engineering) об'єднує різні інженерні дисципліни по розробці всіляких штучних систем – енергоустановок, телекомунікаційних систем, вбудованих систем реального часу і так далі Дуже часто ПО виявляється частиною таких систем, виконуючи завдання управління відповідного устаткування. Такі системи називаються програмно-апаратними, і беручи участь в їх створенні, програмісти вимушені глибоко розбиратися в особливостях відповідної апаратури.
Бізнес-рєїнжінірінг (business reengineering) – в широкому сенсі позначає модернізацію бізнесу в певній компанії, впровадження нових практик, підтримуваних відповідними, новими інформаційними системами. При цьому акцент може бути як на внутрішньому перевлаштуванні компанії так і на розробці нового клієнтського сервісу (як правило, ці питання взаємозв'язані). Бізнес-рєїнжінірінг часто передує розробці і впровадженню інформаційних систем на підприємстві, оскільки потрібний спочатку навести певний лад в діловодстві, а лише потім закріпити його інформаційною системою.
Зв'язок програмної інженерії (як області практичної діяльності) з інформатикою, системотехнікою і бизнес-реинжинирингом показана на рис. 2.1.
Рис. 2.1.