- •1. Основи програмної інженерії.
- •1.1. Програмна інженерія в історичному аспекті.
- •1.2. Програмна інженерія як дисципліна.
- •1.3. Swebok: Керівництво до зводу знань з програмної інженерії.
- •1.4. Структура і зміст swebok.
- •1.4.1. Інженерія вимог
- •1.4.2. Проектування програмного забезпечення
- •1.4.3. Конструювання програмного забезпечення
- •1.4.4. Тестування програмного забезпечення
- •1.4.5. Супровід програмного забезпечення
- •1.4.6. Керування конфігурацією
- •1.4.7. Керування інженерією програмного забезпечення
- •1.4.8. Процес інженерії
- •1.4.9. Методи і інструменти інженерії
- •1.4.10. Якість програмного забезпечення
- •Контрольні питання і завдання
- •2. Характеристика життєвого циклу стандарта iso/iec 12207.
- •Контрольні питання і завдання
- •3. Формування прикладних моделей життєвого циклу
- •Контрольні питання і завдання
- •4. Вимоги до програмних систем.
- •4.1. Загальні підходи до визначення вимог
- •Контрольні питання і завдання
- •5. Методи програмування.
- •5.1. Прикладне (систематичне) програмування
- •5.1.1 Структурне програмування
- •5.1.2. Об'єкт но-орієнтоване програмування
- •5.1.4. Компонентне програмування
- •5.1.5. Аспектно-орієнтоване програмування
- •5.1.6. Генерувальне (порождувальне) програмування
- •5.1.7. Сервісно-орієнтоване програмування
- •5.1.8. Агенте програмування
- •5.2. Теоретичне програмування
- •5.3. Контрольні питання і завдання
- •6. Оптимізація програм
- •6.1 Основні поняття.
- •6.2. Призначення і цілі оптимізації
- •6.3. Проміжна мова
- •6.4. Елементи топології програми
- •6.4.1. Блок (лінійна ділянка)
- •6.4.2. Сильно зв'язана область
- •6.5. Способи оптимізації
- •6.5.1. Розвантаження ділянок повторюваності
- •6.5.2. Скорочення глибини операції
- •6.5.3. Спрощення дій
- •6.5.3.1. Видалення індуктивних змінних і виразів
- •6.5.3.2. Заміна складних операцій на більш прості
- •6.5.3.3 Виключення надлишкових виразів
- •6.5.3.4 Інші перетворення
- •6.5.4. Реалізація дій
- •6.5.5. Підстановка (згортання)
- •6.5.6. Чищення програми
- •6.5.6.1. Усунення ідентичних операторів
- •6.5.6.2. Заміна змінних в операторах умовного переходу і усунення невикористовуваних визначень.
- •6.5.6.3. Усунення марних операторів і змінних
- •6.5.7. Економія пам'яті
- •6.5.8. Скорочення програми
- •6.5.9. Вставка псевдоблоку
- •7. Навчально-методичні рекомендації до вивчення дисцілини «Основи програмної інженерії.»
- •7.1. Анотація навчальної дісциплини. Галузь знань – 0501 «Інформатика та обчислювальна техника» Напрям підготовки - 6.050103 «Програмна інженерія»
- •7.2. Необхідність та задачі навчальної дісциплини. Ії місце в учбовому процесі.
- •7.3. Тематичний план курсу.
- •7.4. Тематичний план лекцій.
- •7.5. Тематичний план лабораторних робіт.
- •7.6. Тематичний план практичних робіт.
- •7.7. Тематичний план самостійної роботи студентів.
- •7.8. Питання для підсумкового контролю.
- •7.9. Структура залікового кредиту навчальної дисципліни
- •7.3. Структура модулів дисципліни
- •7.10. Система критеріїв оцінювання знань відповідно до кожного модуля дисципліни
- •Література
- •Список літератури до розділу 2
- •Додаток 1. Термінологічний словник
- •Додаток 2. Перелік стандартів програмної інженерії
6.5.6.1. Усунення ідентичних операторів
i-та операція вважається зайвою, якщо існує більш рання ідентична j-та операція і ніяка змінна, від якої залежить ця операція, не змінюється третьою операцією, що лежить між i-тою і j-тою операціями
Оператор F вважається ідентичним і може бути усунутий із програми, якщо існують інші оператори G1,G2,...Gn, такі, що
1) оператор F і всі оператори G1, G2, ... Gn виконують ту саму операцію над тими самими операндами;
2) не існує шляху від присвоювання значень операндів оператора F до самого оператора F, що не проходив би спочатку через оператори G.
6.5.6.2. Заміна змінних в операторах умовного переходу і усунення невикористовуваних визначень.
У результаті скорочення глибини операції рекурсивна програмна змінна (визначена через саму себе), що є керівною в операторі умовного переходу, може бути замінена в ньому генерованою змінною t(mt- ідентифікатором).
Це у свою чергу може привести до того, що рекурсивно означена програмна змінна використовуватися в блоці не буде і саме визначення може бути усунуте.
Визначення не використовується і може бути усунуто, якщо результат визначення не є операндом жодного оператора рекурсивного визначення і результат цього останнього не використовується ні в якому іншому операторі.
Існування невикористовуваних визначень до оптимізації є помилкою програміста. Але після оптимізації такі означення можуть виникнути як результат перестановки і зміни окремих операторів у процесі оптимізації.
for даного визначення в даному блоці провадиться пошук використання цього означення у всіх наступних командах блоку і у всіх блоках, що можуть іти за ним. Пошук припиняється, коли знаходиться оператор, що використовує дане визначення як аргумент. Якщо такий оператор у даному і наступних блоках знайдений не буде, то означення вважається невикористовуваним та усувається.
Як тільки невикористовуване визначення усунуте, всі оператори, від яких залежав усунутий оператор, якщо вони ніде більше не використовуються, можуть бути усунуті
6.5.6.3. Усунення марних операторів і змінних
Якщо блок містить такий оператор S, що змінна, якій привласнюється значення в S, не є активною після цього оператора, то S - марний оператор. Іншими словами,S - марний оператор, якщо він привласнює значення змінній, що не є вихідний і на яку немає посилання в наступних операторах
Змінна А називається активною після виконання оператора Si, якщо
- їй привласнене значення оператором Si;
- їй не привласнені значення операторами Si+1,...Sj;
- на неї посилається оператор Sj+1.
if оператор Si привласнює значення змінній А і вона неактивна після моменту i, то
- при i>0 можна видалити Si з P
- при i=0 можна видалити A з I
Наприклад, нехай B=(P,I,U), де I={ A,B,C }, U={ F,C } і P складається з
F:=A+A
G:=F*C
F:=A+B
G:=A*B
Другий оператор марний, тому що його область дії порожня. Таким чином, одне застосування перетворення усунення марних операторів відображає B у B1=(P1,I,U), де P1 складається з
F:=A+A
F:=A+B
G:=A*B
Тепер у B1 марна вхідна змінна C і перший оператор. Застосувавши те ж перетворення, можна одержати B2=(P2,{A,B},U), де P2 складається з
F:=A+B
G:=A*B
