Syllabus

Тернопільський національний технічний університет імені Івана Пулюя

Каф. програмної інженерії

Конструювання програмного забезпечення

Силабус

1. Освітні програми, для яких дисципліна є обов’язковою:

# Рівень освіти Галузь знань Спеціальність Освітня програма Курс(и) Семестр(и)
1 бакалавр 12. Інформаційні технології 121. Інженерія програмного забезпечення (бакалавр) 3 6

2. Дисципліна пропонується як вибіркова для усіх рівнів вищої освіти і усіх освітніх програм.

3. Інформація про автора курсу

Прізвище, ім'я та по батькові Михалик Дмитро Михайлович
Науковий ступінь канд. техн. наук
Вчене звання доцент
Посилання на сторінку викладача(ів) на офіційній веб-сторінці університету http://library.tntu.edu.ua/personaliji/a/m/myhalyk-dmytro-myhajlovych/
Е-mail (в домені tntu.edu.ua)

4. Інформація про навчальну дисципліну

Розподіл аудиторних годин Лекції: 36
Практичні заняття: 0
Лабораторні заняття: 36

Кількість годин самостійної роботи: 78
Кількість кредитів ECTS: 5
Мова викладання українська
Вид підсумкового контрою екзамен
Посилання на електронний навчальний курс у СЕН університету ATutor https://dl.tntu.edu.ua/bounce.php?course=1737

5. Програма навчальної дисципліни

Опис навчальної дисципліни, її мета, предмет вивчання та результати навчання

Мета курсу полягає у вивченні студентами основних принципів конструювання програмного забезпечення і прийомами роботи з програмним кодом. Розглядуються питання організації процесу конструювання програмного забезпечення, обговорюються причини і наслідки труднощів, що виникають в проектах з розробки програмних систем, проводиться порівняльний аналіз послідовного та ітеративного підходів до конструювання програмного забезпечення. Основна увага приділена викладу принципів організації процесу кодування, контролю якості, рефакторінгу і оптимізації програмної коду.
Знання, вміння та навички, отримані студентами під час вивчення даної дисципліни знадобляться під час їх професійної діяльності, а також використовуватимуться в усіх подальших курсах пов’язаних з розробкою та написання програмного коду, а також при роботі над курсовими і дипломним проектами.
Завданням лекційних занять є ознайомлення студентів з загальними принципами конструювання програмного забезпечення, зокрема з конструювання класів, методів, операторів та змінних, а також методами та засобами оптимізації, рефатокторінгу та тестування з конструйованого програмного коду.
Завдання лабораторних занять полягає у практичному засвоєнні студентами навичок по розробці інтерпретаторів простих мов програмування, розробці синтаксичних аналізаторів виразів та конструюванню багато потокових програм.

Зміст навчальної дисципліни

Лекційний курс (формулювання тем)

Змістовий модуль 1. Структури даних при конструювання
Тема 1. Принципи конструювання програмного забезпечення
Поняття конструювання ПЗ. Основні рішення при конструювання: вибір мови, вибір конвенції, вибір методології.
Тема 2. Проектування при конструюванні
Поняття проектування та конструювання. Рівні проектування. Компоненти проектування.
Тема 3. Специфікації
Для чого потрібні специфікації? Поведінкові еквівалентності. Специфікації в Java. Специфікації методу, що змінюють параметри. Декларативна специфікація. Порядок специфікацій. Оцінка специфікацій. Винятки для особливих результатів. Зловживання винятками
Тема 4. Кінцеві автомати
Змінні та незмінні об’єкти. Ітерування по колекціях. Представлення змінних об’єктів як автоматів. Псевдоніми. Використання автоматів для аналізу і проектування. Тестування автоматів
Тема 5. Регулярні вирази і граматик
Машина стану для розмітки. Зчитування вхідних даних. Лексичний аналізатор. Граматика. Регулярні граматики. Рекурсивний розбір та обчислення. Генератори парсерів. Використання регулярних виразів.
Тема 6. Абстрактні типи даних
Що таке абстракція? Користувацькі типи даних. Класифікація типів та операцій. Проектування абстрактного типу. Незалежність представлення. Збереження інваріантів. Незмінність. Як встановити інваріанти


Змістовий модуль 2. Методики конструювання
Тема 7. Паралелізм
Для чого паралелізм в програмному забезпеченні. Дві моделі для паралельного програмування. Потоки та процеси. Time-slicing. Приклад Shared Memory. Синхронізація. Тупіки. Приклад Message Passing. Паралелізм важко тестувати і відлагоджувати
Тема 8. Потокобезпечність
Структуризація таблиць стилів. Верстка таблиць стилів. Групування селекторів. Оформлення тексту за допомогою CSS.
Тема 9. Використання блокування
Потоки (Threads). Thread Confinement. Уникання глобальних змінних. Immutability. Потокобезпечні колекції. Цілі паралельного проектування програм.
Тема 10. Синхронізація
Кроки розробки типу даних. Аргументи на підтримку потокобезпечності. Блокування (Locking). Шаблон Monitor. Потокобезпечніть та синхронізація. Принципи локування. Надання клієнтові доступу до замка. Проектування типів даних для паралелізму. Питання з Deadlock. Паралелізм на практиці
Тема 11. Мережеве програмування
Адресація в мережі. Підтримка мережі в Java. Сокетні з'єднання по протоколу TCP/IP. Багатопоточність при розробці мережевих застосувань. Датаграми та протокол UDP.
Тема 12. Швидкодія
Оптимізація коду. Коли виконувати оптимізацію?. Приклад оптимізації алгоритму множення матриць. Де шукати жир? Стратегії оптимізації логічних операцій. Стратегії оптимізації циклів. Стратегії оптимізації циклів

Лабораторний практикум (теми)

Рекурсивно-низхідний алгоритм розбору виразів.
Midi-piano.
Написання інтерпретатора мови програмування.
Розробка розподіленого ПЗ для пошук простих множників чисел

Навчальні матеріали та ресурси

Базова
1. Макконелл С. Совершенний код. Мастер-класс / пер. з англ. – М.: И-во "Русская Редакция"; СПб.: Питер, 2007. - 896с.
2. Шилдт Герберт. Теория и практика С++: пер. с англ.-СПб.: ВНV-Санкт-Петербург,1999.-416 с.
3. Шилдт Г. Холмс Д. Искусство программирования на Java. пер. с англ. – М.: Издательський дом “Вильямс”, 2005. - 336 с.

Допоміжна
4. Маккарти Д., Маккарти М. Правила разработки программного обеспечения – М.: Изд-во “Русская Редакция”; СПб, 2007. – 240с.
5. Леффингуэлл Д., Уидриг Д. Принципы работы с требованиями к программному обеспечению. Унифицированный поход, М.: «Вильямс», 2002. – 448с.
6. Брауде Э. Технология разработки программного обеспечения. СПб.: Питер, 2004. – 687с.
7. Лафоре. Р. Объектно-ориентированное программирование в С++. 4-е издание. Издательство: Питер. Серия: Классика computer science, 2005. – 928 с.
8. Макконелл С. Совершенний код. Мастер-класс / пер. з англ. – М.: И-во "Русская Редакция"; СПб.: Питер, 2007. – 896с.
9. Фаулер М.Рефакторинг: улучшение существующего кода / пер. з англ. – СПб: Символ-плюс, 2003. – 432с.
10. Ховард М., Лебланк Д., Виега Д. Х68 19 смертных грехов, угрожающих безопасности программ. Как не допустить типичных ошибок . – М.: ДМК Пресс, 2006. – 288 с.: ил.

6. Політика та контроль навчальної дисципліни (освітнього компонента)

Види контролю та рейтингова система оцінювання результатів навчання

Оцінка якості засвоєння навчальної дисципліни включає поточний контроль успішності та модульний контроль, зокрема методи тестового контролю та самоконтролю, а також методи лабораторного контролю і методи лабораторного самоконтролю.
Поточний контроль знань студентів здійснюється шляхом періодичного контролю за виконанням лабораторних робіт та здачі модулів.
Для модульного контролю засвоєння студентами навчального матеріалу, що вивчається під час аудиторних занять і самостійної роботи, передбачено проведення тестування за допомогою засобів електронного навчання в системі ATutor.


Таблиця відповідності рейтингових балів оцінкам за університетською шкалою:

Шкала оцінок
ВНЗ
(100-бальна)
Національна
(4-бальна)
ECTS
90-100 Відмінно А
82-89 Добре B
75-81 C
67-74 Задовільно D
60-66 E
35-59 Незадовільно FX
1-34 F
Затверджено рішенням кафедри
(протокол №
від «
»
року).