- •26.Зручність використання програмного забезпечення
- •27.Керування якістю
- •28.Програмна інженерія
- •29.Об'єктно-орієнтована методика
- •30.Виділення і класифікація процесів (процесний опис)
- •33.Види і властивості вимог
- •34.Склад продукту: огляд, клієнтська частина vsts, серверна частина vsts
- •35.Ітеративний цикл автор/рецензент
- •39.Керування ризиками
- •38.Контроль зручності програмного забезпечення
- •42.Карти пам'яті
28.Програмна інженерія
Чим програмування відрізняється від програмної інженерії? Тим, що перше є деякою абстрактною діяльністю і може відбуватися у багатьох різних контекстах. Можна програмувати для задоволення, для того, щоб навчитися (наприклад, на уроках, на семінарах в університеті), можна програмувати в рамках наукових розробок. А можна займатися промисловим програмуванням. Як правило, це відбувається в команді, і абсолютно точно - для замовника, який платить за роботу гроші. При цьому необхідно точно розуміти, що потрібно замовнику, виконати роботу у визначені терміни і результат повинен бути потрібної якості - того, яке задовольнить замовника і за яку він заплатить. Щоб задовольнити цим додатковим вимогам, програмування "обростає" різними додатковими видами діяльності: розробкою вимог, плануванням, тестуванням, конфігураційним управлінням, проектним менеджментом, створенням різної документації (проектної, користувальницької та ін.)
Розробка програмного коду передує аналізом і проектуванням (перше означає створення функціональної моделі майбутньої системи без обліку реалізації, для усвідомлення програмістами вимог і очікувань замовника; друге означає попередній макет, ескіз, план системи на папері). Трудовитрати на аналіз і проектування, а також форма подання їх результатів сильно варіюються від видів проектів і переваг розробників і замовників.
Потрібні також спеціальні зусилля по організації процесу розробки. У загальному вигляді це Ітеративний-инкрементальное модель, коли необхідна функціональність створюється порціями, які менеджери і замовник можуть оцінити, і тим самим є можливість управління ходом розробки. Проте ця загальна модель має безліч модифікацій і варіантів.
Розробку системи також необхідно виконувати з урахуванням зручностей її подальшого супроводу, повторного використання та інтеграції з іншими системами. Це означає, що система розбивається на компоненти, зручні у розробці, придатні для повторного використання та інтеграції. А також мають необхідні характеристики по швидкодії. Для цих компонент ретельно опрацьовуються інтерфейси. Сама ж система документується на багатьох рівнях, створюються правила оформлення програмного коду - тобто залишаються численні семантичні сліди, які допомагають створити і зберегти, підтримувати єдину, струнку архітектуру, однаковий стиль, порядок ...
Всі ці та інші додаткові види діяльності, які здійснюються в процесі промислового програмування і необхідні для успішного виконання замовлень і будемо називати програмної інженерії (software engineering) 1). Виходить, що так ми позначаємо, по-перше, деяку практичну діяльність, а по-друге, спеціальну область знання. Або іншими словами, наукову дисципліну. Адже для полегшення виконання кожного окремого проекту, для можливості використовувати різноманітний позитивний досвід, досягнутий іншими командами і розробниками, цей самий досвід піддається осмисленню, узагальненню та належному оформленню. Так з'являються різні методи і практики (best practices) - тестування, проектування, роботи над вимогами і пр., архітектурних шаблонів і пр. А також стандарти та методології, що стосуються всього процесу в цілому (наприклад, MSF, RUP, CMMI, Scrum). Ось ці-то узагальнення і входять в програмну інженерію як в область знання.