Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Калькулятор знижок
1. Початковий рівень. Створити бібліотеку з методом розрахунку знижки за сумою покупки (0 %, 5 %, 10 %) і тестовий проєкт MSTest з тестами для кожного діапазону.
2. Базовий рівень. Створити бібліотеку з методом розрахунку знижки за сумою покупки (0 %, 5 %, 10 % за порогами) і тестовий проєкт MSTest: тести граничних значень з [DataRow] (межі діапазонів і поряд із ними), перевірка від’ємної суми (ThrowsExactly). Виконати рефакторинг вкладених if у таблицю порогів, зберігаючи тести зеленими.
3. Високий рівень. Розробити через TDD бібліотеку розрахунку знижки за сумою покупки (0, 5 або 10 %), картою лояльності й промокодом з правилом «разом не більше 20 %» і отримати звіт покриття коду бібліотеки не нижче 90 %. Застосунок dotnet CLI отримує суму, карту й промокод з аргументів і виводить знижку та суму до сплати; помилки – у Console.Error.
Варіант 2. Валідатор email-адрес
1. Початковий рівень. Створити бібліотеку з методом перевірки email (один @, непорожні частини, крапка в домені) і тестовий проєкт MSTest з тестами для коректних і некоректних адрес.
2. Базовий рівень. Розробити через TDD бібліотеку з валідатором email, що для кожного правила (один @, непорожні частини, крапка в домені) повертає повідомлення про конкретну помилку; у тестовому проєкті MSTest використати [DataRow] для кожного класу еквівалентності.
3. Високий рівень. Створити бібліотеку з валідатором email: один @, непорожні частини, крапка в домені, обмеження довжини частин, дозволені символи й заборонені домени з інтерфейсу IDomainBlacklist (у тестах MSTest – фейк). Застосунок dotnet CLI перевіряє адреси зі стандартного введення і виводить результат для кожної; помилки – у Console.Error.
Варіант 3. Сума прописом
1. Початковий рівень. Розробити через TDD (бібліотека й тестовий проєкт MSTest) метод, що записує ціле число від 0 до 99 словами українською мовою, наприклад 42 → «сорок два».
2. Базовий рівень. Розробити через TDD бібліотеку з методом запису цілого числа від 0 до 999 999 словами українською мовою з правильним узгодженням («одна тисяча», «дві тисячі», «п’ять тисяч») і тестовий проєкт MSTest з граничними тестами (0, 999, 1000, 999 999).
3. Високий рівень. Створити бібліотеку, що записує грошову суму до 999 999,99 словами гривень і копійок з узгодженням («одна гривня», «дві гривні», «п’ять гривень») для банківських документів, з тестами MSTest; виконати рефакторинг до таблиць форм слів. Застосунок dotnet CLI перетворює суми з аргументів; помилки – у Console.Error.
Варіант 4. Банківський рахунок
1. Початковий рівень. Створити клас банківського рахунку (баланс, поповнення, зняття) і тестовий проєкт MSTest з тестами поповнення, зняття та заборони від’ємних сум.
2. Базовий рівень. Створити клас банківського рахунку з кредитним лімітом, поповненням, зняттям та історією операцій і тестовий проєкт MSTest: інваріант «баланс не менший за кредитний ліміт» у всіх операціях, винятки з повідомленнями для некоректних сум, історія операцій (CollectionAssert).
3. Високий рівень. Створити бібліотеку банківських рахунків (баланс, поповнення, зняття) з переказами між рахунками з комісією через інтерфейс IFeePolicy (у тестах – заглушка) і нарахуванням відсотків з TimeProvider; тестовий проєкт MSTest з покриттям бібліотеки не нижче 90 %.
Варіант 5. Доставка їжі
1. Початковий рівень. Створити клас замовлення доставки, що рахує суму страв за меню ресторану IMenu, і тестовий проєкт MSTest з фейковим меню (фіксовані ціни) для тестів додавання страв і суми замовлення.
2. Базовий рівень. Створити клас замовлення доставки з меню ресторану через інтерфейс IMenu і тестовий проєкт MSTest з фейковим меню: тести вартості доставки за відстанню, мінімальної суми замовлення та недоступних страв; перевірити кількість звернень до фейку.
3. Високий рівень. Створити бібліотеку замовлень доставки з меню IMenu і сервісом кур’єрів ICourierService та тестовий проєкт MSTest з фейковим меню й тестом-моком, що перевіряє виклик призначення кур’єра лише для оплаченого замовлення. Застосунок dotnet CLI моделює замовлення (страви, оплата, кур’єр); помилки – у Console.Error.
Варіант 6. Розбір CSV
1. Початковий рівень. Створити метод розбору рядка CSV у масив полів і тестовий проєкт MSTest з тестами для простих і порожніх полів.
2. Базовий рівень. Розробити через TDD метод розбору тексту CSV на записи (масиви полів) з підтримкою полів у лапках з комами й подвоєних лапок, пропуском порожніх рядків і винятком з номером рядка для некоректних даних; тести MSTest.
3. Високий рівень. Створити бібліотеку розбору CSV (поля в лапках, помилки з номером рядка) з тестами MSTest і виконати рефакторинг розбирача в клас зі стратегіями роздільника й культури, зберігаючи тести зеленими; тести охоплюють і файли в кодуванні Windows-1251. Застосунок dotnet CLI перевіряє CSV-файл з аргументів; помилки – у Console.Error.
Варіант 7. Боулінг
1. Початковий рівень. Розробити через TDD клас гри в боулінг з методами Roll(pins) і Score() та тести MSTest для гри без страйків і спейрів (20 кидків).
2. Базовий рівень. Розробити через TDD клас гри в боулінг (Roll(pins), Score()) з підрахунком спейрів і страйків з бонусами та тести MSTest для всіх випадків, зокрема ідеальної гри (300 очок).
3. Високий рівень. Створити бібліотеку підрахунку очок боулінгу зі спейрами, страйками, десятим фреймом з додатковими кидками і перевіркою некоректних послідовностей, виконати рефакторинг до класу фрейму зі збереженням тестів MSTest. Застосунок dotnet CLI рахує очки за кидками з аргументів; помилки – у Console.Error.
Варіант 8. Графік кредиту
1. Початковий рівень. Створити метод розрахунку щомісячного ануїтетного платежу за сумою кредиту, річною ставкою й кількістю місяців і тестовий проєкт MSTest з перевіркою з допуском округлення.
2. Базовий рівень. Створити бібліотеку, що будує ануїтетний графік кредиту (decimal: платіж, відсотки, тіло, залишок щомісяця), і тести MSTest: сума платежів дорівнює тілу кредиту плюс відсотки, а останній платіж закриває залишок до копійки.
3. Високий рівень. Створити бібліотеку графіків кредиту (ануїтетний і диференційований як стратегії після рефакторингу, дострокове погашення) з тестами MSTest, зокрема порівняльними тестами двох схем. Застосунок dotnet CLI виводить графік за сумою, ставкою, строком і схемою з аргументів; помилки – у Console.Error.
Варіант 9. Виробничий календар
1. Початковий рівень. Створити метод визначення високосного року і тестовий проєкт MSTest з тестами для граничних років (1900, 2000, 2024, 2100).
2. Базовий рівень. Розробити через TDD метод підрахунку робочих днів між двома датами (DateOnly) без субот і неділь та тести MSTest, зокрема для періодів через кінець місяця та року.
3. Високий рівень. Створити бібліотеку підрахунку робочих днів між датами з урахуванням вихідних, святкових днів з інтерфейсу IHolidayCalendar (у тестах MSTest – фейк) і перенесення вихідних. Застосунок dotnet CLI рахує робочі дні між датами з аргументів; помилки – у Console.Error.
Варіант 10. Власні колекції
1. Початковий рівень. Створити узагальнений стек MyStack<T> на масиві та тестовий проєкт MSTest з тестами Push, Pop, Peek, Count і порожнього стека.
2. Базовий рівень. Створити узагальнену чергу MyQueue<T> на циклічному масиві (Enqueue, Dequeue, Count, IEnumerable<T>) і тести MSTest, зокрема збільшення місткості й обходу через foreach; набори послідовностей передавати через [DynamicData].
3. Високий рівень. Розробити через TDD узагальнену чергу з пріоритетом на бінарній купі (Enqueue, Dequeue, Peek, Count) з тестами MSTest і порівняти результати з PriorityQueue на випадкових даних з фіксованим зерном. Покриття – не нижче 95 %.
Варіант 11. Шифр Віженера
1. Початковий рівень. Створити клас шифру Віженера з методами шифрування й розшифрування за ключем і тестовий проєкт MSTest з відомими парами «текст – шифротекст».
2. Базовий рівень. Створити клас шифру Віженера (шифрування й розшифрування за ключем) і тести MSTest: оборотність для набору текстів, збереження регістру й небуквених символів, виняток для некоректного ключа.
3. Високий рівень. Створити бібліотеку шифру Віженера для української та англійської абеток з тестами MSTest, проаналізувати звіт покриття коду, дописати тести для непокритих гілок і виконати рефакторинг до спільного класу абетки.
Варіант 12. Складський облік
1. Початковий рівень. Створити сервіс складського обліку з інтерфейсом репозиторію залишків і тестовий проєкт MSTest, що перевіряє надходження товару з фейковим репозиторієм у пам’яті.
2. Базовий рівень. Створити сервіс складського обліку (кілька складів, репозиторій залишків через інтерфейс) і тести MSTest з фейковим репозиторієм у пам’яті: списання з перевіркою недостатнього залишку, переміщення між складами, журнал операцій.
3. Високий рівень. Створити бібліотеку складського обліку (надходження, списання, переміщення), розділену за SRP, з інтерфейсом сповіщень про мінімальний залишок і тестами MSTest з моками викликів сповіщень. Застосунок dotnet CLI обробляє операції зі стандартного введення; помилки – у Console.Error.
Варіант 13. Розрахунок стипендії
1. Початковий рівень. Написати самостійно «поганий» метод розрахунку стипендії за середнім балом (магічні числа, вкладені if) і характеризаційні тести MSTest, що фіксують його поточну поведінку.
2. Базовий рівень. Створити метод розрахунку стипендії за середнім балом з магічними числами й вкладеними if, покрити його характеризаційними тестами MSTest і виконати рефакторинг: константи, Extract Method, перелічення категорій студентів; тести мають залишатися зеленими.
3. Високий рівень. Створити бібліотеку розрахунку стипендії за середнім балом з надбавками за участь в олімпіадах і соціальні категорії через стратегії, покрити код тестами MSTest і оформити звіт рефакторингу «до/після» від початкового методу з вкладеними if.
Варіант 14. Текстова статистика
1. Початковий рівень. Створити клас текстової статистики з методами підрахунку слів і речень і тестовий проєкт MSTest з тестами цих методів.
2. Базовий рівень. Створити аналізатор тексту з довгим методом, що рахує частоти слів і знаходить найдовше слово, і тести MSTest, зокрема граничних випадків (порожній текст, лише розділові знаки); виконати Extract Method, зберігаючи тести зеленими.
3. Високий рівень. Створити бібліотеку аналізу тексту рефакторингом одного аналізатора до конвеєра окремих аналізаторів зі спільним інтерфейсом (слова й речення, частоти слів, найдовше слово) з тестами MSTest кожного. Застосунок dotnet CLI аналізує файл з аргументів; помилки – у Console.Error.
Варіант 15. Прокат авто
1. Початковий рівень. Створити метод розрахунку вартості оренди авто за кількістю годин і погодинним тарифом і тестовий проєкт MSTest з тестами розрахунку.
2. Базовий рівень. Створити клас оренди авто, що за часом повернення з TimeProvider рахує вартість і штраф за запізнення з «безкоштовними 30 хвилинами», і тести MSTest з FakeTimeProvider, зокрема на межі 30 хвилин.
3. Високий рівень. Розробити через TDD з FakeTimeProvider бібліотеку оренди авто з погодинним, нічним і вихідним тарифами як стратегіями після рефакторингу та тестами MSTest. Застосунок dotnet CLI розраховує оренду за часом початку й закінчення з аргументів; помилки – у Console.Error.
Варіант 16. Турнірна таблиця
1. Початковий рівень. Створити метод нарахування очок команди за результатом матчу (перемога – 3, нічия – 1, поразка – 0) і тестовий проєкт MSTest з тестами.
2. Базовий рівень. Створити клас турнірної таблиці, що за результатами матчів сортує команди за очками, різницею м’ячів і забитими м’ячами, і тести MSTest, зокрема для команд з однаковими показниками.
3. Високий рівень. Розробити через TDD бібліотеку турнірної таблиці (очки, різниця та забиті м’ячі) з правилом особистих зустрічей для рівних очок і тести MSTest на наборах даних з [DynamicData]. Застосунок dotnet CLI будує таблицю з файлу результатів матчів; помилки – у Console.Error.
Варіант 17. Конвертер одиниць
1. Початковий рівень. Створити конвертер довжини між одиницями (м, км, фут, дюйм, миля) і параметризовані тести MSTest перетворень з допуском похибки.
2. Базовий рівень. Створити конвертер одиниць довжини й температури (°C, °F, K) і тести MSTest: оборотність (м → фут → м), перетворення між температурними шкалами, виняток для невідомої одиниці.
3. Високий рівень. Створити конвертер одиниць довжини через таблицю коефіцієнтів до базової одиниці (рефакторинг попарних формул) і перевірити всі пари одиниць тестами MSTest на автоматично згенерованих тестових даних.
Варіант 18. Гра «Життя»
1. Початковий рівень. Створити метод правил гри «Життя», що за станом клітини й кількістю живих сусідів повертає її новий стан, і тести MSTest виживання й народження.
2. Базовий рівень. Створити клас поля гри «Життя» з методом обчислення наступного покоління і тести MSTest відомих фігур: «блок» не змінюється, «мигалка» повертається через 2 кроки, «глайдер» зсувається через 4 кроки.
3. Високий рівень. Створити бібліотеку гри «Життя» з тороїдальним полем рефакторингом процедурної реалізації в класи поля й правил зі збереженням тестів MSTest. Застосунок dotnet CLI моделює гру з файлу початкового поля й виводить задану кількість поколінь; помилки – у Console.Error.
Варіант 19. Термостат
1. Початковий рівень. Створити клас термостата, що вмикає обігрів нижче заданої температури й вимикає вище за показами датчика ITemperatureSensor, і тести MSTest з фейковим датчиком.
2. Базовий рівень. Створити клас термостата з датчиком ITemperatureSensor і гістерезисом (±0,5 °C навколо заданої температури) та тести MSTest з фейковим датчиком для послідовностей показів, що не спричиняють частих перемикань.
3. Високий рівень. Створити бібліотеку термостата з гістерезисом і розкладом температур за часом доби через TimeProvider та тести MSTest з FakeTimeProvider і фейковим датчиком для переходів між періодами. Застосунок dotnet CLI моделює добу й виводить перемикання обігріву; помилки – у Console.Error.
Варіант 20. Обчислювач виразів
1. Початковий рівень. Створити метод обчислення рядкового виразу з цілими числами, + і - без дужок і тестовий проєкт MSTest з тестами.
2. Базовий рівень. Розробити через TDD метод обчислення рядкового виразу з числами, +, -, *, /, пріоритетом операцій і дужками, що для помилок генерує виняток з позицією; тести MSTest.
3. Високий рівень. Створити бібліотеку обчислення виразів (чотири дії, дужки, унарний мінус, змінні) рефакторингом до токенізатора й розбирача з окремими тестами MSTest. Застосунок dotnet CLI обчислює вирази з аргументів; помилки – у Console.Error.
Варіант 21. Кредитний скоринг
1. Початковий рівень. Створити метод оцінювання кредитної заявки за віком, доходом і стажем з рішенням «схвалено/відхилено» і тестовий проєкт MSTest з тестами.
2. Базовий рівень. Створити метод кредитного скорингу заявки (вік, дохід, стаж) як довгий switch, написати характеризаційні тести MSTest і виконати рефакторинг до набору правил зі спільним інтерфейсом.
3. Високий рівень. Створити бібліотеку кредитного скорингу з набором правил зі спільним інтерфейсом (вік, дохід, стаж, зовнішня кредитна історія через інтерфейс, у тестах – фейк) і поясненням рішення (список спрацьованих правил); тести MSTest з покриттям правил 100 % гілок.
Варіант 22. Розбір URL
1. Початковий рівень. Створити метод розбору URL, що повертає схему й хост, і тестовий проєкт MSTest з тестами.
2. Базовий рівень. Створити клас розбору URL (схема, хост, порт за замовчуванням, шлях, параметри запиту, фрагмент) і тести MSTest, що порівнюють результати з класом Uri.
3. Високий рівень. Розробити через TDD бібліотеку розбору URL на частини й будівельника URL з частин з кодуванням параметрів (рефакторинг до будівельника) з тестами MSTest. Застосунок dotnet CLI розбирає URL з аргументів і виводить частини; помилки – у Console.Error.
Варіант 23. Черга пацієнтів
1. Початковий рівень. Створити клас черги пацієнтів у порядку надходження (додати, викликати наступного, кількість) і тестовий проєкт MSTest з тестами.
2. Базовий рівень. Створити клас черги пацієнтів із пріоритетами (невідкладні, пільгові, звичайні) і тести MSTest, що перевіряють порядок виклику й збереження порядку надходження в межах пріоритету.
3. Високий рівень. Створити клас черги пацієнтів із пріоритетами (невідкладні, пільгові, звичайні), часом очікування з TimeProvider і підвищенням пріоритету після 2 годин очікування та тести MSTest з FakeTimeProvider на граничні моменти часу.
Варіант 24. Спортивні нормативи
1. Початковий рівень. Створити метод визначення оцінки за результатом бігу на 100 м для юнаків за таблицею нормативів і табличні тести MSTest з [DataRow].
2. Базовий рівень. Створити клас нормативів, що визначає оцінку за результатом вправи, статтю (юнаки, дівчата) і кількома вправами, і тести MSTest з [DynamicData], зокрема граничних результатів.
3. Високий рівень. Створити бібліотеку оцінювання спортивних нормативів (вправи, стать, пороги оцінок) із завантаженням таблиці з JSON-файлу, тестами MSTest завантаження і 100 % покриттям гілок таблиці нормативів за звітом покриття.
Варіант 25. Тарифи мобільного зв’язку
1. Початковий рівень. Створити метод розрахунку вартості дзвінків за тривалістю й ціною хвилини тарифу і тестовий проєкт MSTest з тестами.
2. Базовий рівень. Створити розрахунок вартості дзвінків для трьох тарифів з дублюванням коду, написати характеризаційні тести MSTest і усунути дублювання рефакторингом.
3. Високий рівень. Розробити через TDD бібліотеку тарифів мобільного зв’язку з пакетами хвилин, оплатою перевищення лімітів і порівнянням тарифів для профілю абонента (хвилини, SMS, інтернет на місяць), з тестами MSTest. Застосунок dotnet CLI підбирає тариф для профілю з аргументів; помилки – у Console.Error.
Варіант 26. LINQ-звіти
1. Початковий рівень. Створити метод із запитом LINQ, що фільтрує товари (назва, категорія, ціна) за категорією й сортує за ціною, і тести MSTest на невеликому наборі даних.
2. Базовий рівень. Створити метод LINQ, що групує продажі (дата, категорія, сума) за категоріями й місяцями, і тести MSTest, зокрема порожніх груп і граничних дат.
3. Високий рівень. Створити бібліотеку звітів продажів з LINQ, розбивши довгий метод звіту на невеликі методи-запити (фільтрація, групування, підсумки) з окремими тестами MSTest, і перевірити однаковість результатів старого й нового методу на великих згенерованих даних.
Варіант 27. Збереження в JSON
1. Початковий рівень. Створити запис з простими властивостями, методи збереження та завантаження JSON (System.Text.Json) і тест MSTest циклу «серіалізація – десеріалізація».
2. Базовий рівень. Створити клас збереження в JSON-файл моделі з колекціями, переліченнями й датами і тести MSTest з тимчасовим каталогом, зокрема відсутніх властивостей (значення за замовчуванням).
3. Високий рівень. Створити сервіс нотаток зі сховищем через інтерфейс і дві реалізації сховища: фейкову в пам’яті для модульних тестів MSTest сервісу та файлову JSON для окремих інтеграційних тестів.
Варіант 28. Сповіщення подій
1. Початковий рівень. Створити клас із подією (наприклад, PriceChanged зі старою й новою ціною) і тести MSTest, які перевіряють, що підписник отримує подію з правильними даними.
2. Базовий рівень. Створити клас із подією зміни ціни й тести MSTest порядку виклику кількох підписників, відписки й зміни ціни без підписників.
3. Високий рівень. Створити видавця подій зміни ціни рефакторингом з event до інтерфейсу спостерігача зі збереженням тестів MSTest і тести обробки винятку в одному з підписників.
Варіант 29. Шахові фігури
1. Початковий рівень. Створити метод, що повертає допустимі ходи тури із заданої клітинки порожньої шахової дошки 8×8, і тестовий проєкт MSTest з тестами.
2. Базовий рівень. Створити класи шахових фігур (кінь, слон, ферзь) з методом допустимих ходів з урахуванням країв дошки та перешкод і тести MSTest.
3. Високий рівень. Розробити через TDD ходи шахових фігур, зокрема пішака (перший хід, взяття, перетворення), з рефакторингом до спільного базового класу фігур і тестами MSTest. Застосунок dotnet CLI виводить допустимі ходи фігури з клітинки з аргументів; помилки – у Console.Error.
Варіант 30. Парковка
1. Початковий рівень. Створити метод розрахунку вартості паркування за тривалістю й погодинним тарифом і тестовий проєкт MSTest з тестами.
2. Базовий рівень. Створити клас парковки, що фіксує в’їзд і виїзд через TimeProvider і рахує вартість з безкоштовними 15 хвилинами й округленням до години, і тести MSTest з FakeTimeProvider.
3. Високий рівень. Створити бібліотеку тарифів парковки (погодинний з округленням, нічний, добовий максимум) як стратегій після рефакторингу з тестами MSTest, зокрема переходу через північ. Застосунок dotnet CLI обробляє журнал в’їздів і виїздів з файлу; помилки – у Console.Error.
Порядок виконання та захисту роботи
- Опрацювати теоретичні відомості та приклади розв’язання завдань.
- Створити рішення з бібліотекою класів, консольним застосунком і тестовим проєктом MSTest.
- Визначити класи еквівалентності та граничні значення для методів свого варіанта; скласти таблицю тестових випадків.
- Реалізувати завдання обраного рівня складності; для завдань TDD фіксувати в системі контролю версій або звіті послідовність кроків «червоний – зелений – рефакторинг».
- Запустити тести в Test Explorer і командою
dotnet test, отримати звіт покриття коду та пояснити непокриті місця. - Продемонструвати роботу тестів викладачеві, показати тест, що не проходить, і відповісти на контрольні питання.