Тестування. Фундаментальна теорія. Частина 2 — Методології розробки ПЗ
Нарешті я дістався до другої шпори. Перша знаходиться тут. Ця присвячена методологіям розробки і також буде корисною для початківців у тестуванні, оскільки це також часто запитують на співбесідах.
І, як завжди, критика, уточнення, доповнення are extremely welcome.
Види методологій розробки програмного забезпечення:
• Каскадна або поетапна розробка (іноді її називають «водоспадною моделлю») — це процес створення програмного забезпечення, який передбачає послідовне пройдення фаз аналізу, проектування, реалізації, тестування, інтеграції та підтримки. Цей підхід часто використовується при роботі над великими проєктами з тривалим терміном впровадження.
• Ітеративна або інкрементна (еволюційна) модель дозволяє паралельно виконувати кілька завдань з постійним аналізом результатів і коригуванням попередніх етапів роботи. Це більш «швидкісний» підхід до розробки для великого числа кваліфікованих програмістів.
• Спіральна методика характеризується пройденням проектом повторюваного циклу на кожному етапі розвитку: планування — виконання — перевірка — оцінка (англ. plan-do-check-act cycle). Цей підхід зазвичай використовується для проєктів з неокончательно сформованою візією результату або для проєктів, які потребують швидкого впровадження поетапно.
• Гнучка методологія Agile-розробки — це так звана швидка розробка без втрати якості, коли головною метою є працездатний продукт, а не його документація. Це найсучасніший неформальний підхід до створення програмного забезпечення, у якому реагування на зміни вважається важливішим, ніж жорстке дотримання плану. Використовується для молодих швидкозростаючих проектів, які з кожною ітерацією програмного забезпечення фактично готові до його релізу.
SCRUM
Scrum (Скрам) — це не абревіатура, цей термін був запозичений з регбі і означає групову сутичку навколо м’яча.
Scrum — це методологія управління проектами, яка ґрунтується на принципах тайм-менеджменту. Основною її особливістю є залученість усіх учасників до процесу, при цьому кожен учасник має свою визначену роль. Суть полягає в тому, що не лише команда працює над вирішенням завдання, але всі, кому цікаве вирішення завдання, не просто поставили його і розслабилися, а постійно «працюють» з командою, і ця робота не означає лише постійний контроль.
Основні терміни, що використовуються в методології Scrum:
Власник продукту (Product Owner) — це особа, яка має прямий інтерес до якісного кінцевого продукту і розуміє, яким чином цей продукт має виглядати/працювати. Ця особа не працює в команді, вона працює на боці замовника/клієнта (це може бути як інша компанія, так і інший відділ), але вона співпрацює з командою. Власник продукту встановлює пріоритети для завдань.
Скрам-майстер (Scrum Master) — це особа, яку можна назвати керівником проекту, хоча це не повністю відображає його роль. Головне, це людина, яка «заражена скрам-бактерією» настільки, що передає це як своїй команді, так і замовнику, і відповідає за те, щоб принципи Scrum дотримувалися.
Скрам-команда (Scrum Team) — це команда, яка приймає всі принципи Scrum і готова працювати з ними.
Спринт (Sprint) — це період часу, призначений для виконання певного (обмеженого) списку завдань. Рекомендується вибирати тривалість спринта від 2 до 4 тижнів (конкретна тривалість визначається командою один раз).
Беклог (Backlog) — це список всіх робіт. Можна сказати, що це загальний щоденник. Розрізняють 2 види беклогів: Product-беклог і спринт-беклог.
Product-беклог — це повний список усіх робіт, виконання яких дозволить нам отримати кінцевий продукт.
Спринт-беклог — це список робіт, який команда визначила і погодила з Власником продукту на найближчий звітний період (спринт). Завдання зі спринт-беклогу вибираються з product-беклогу.
Планування спринта — це зустріч, на якій присутні всі (команда, Скрам-мастер, Власник продукту). Протягом цієї зустрічі Власник продукту визначає пріоритети завдань, які він хотів би бачити виконаними до кінця спринта. Команда оцінює, скільки часу їм знадобиться для виконання бажаного. В результаті отримується список завдань, який не може змінюватися протягом спринта і повинен бути повністю виконаним до кінця спринта.
Приклад роботи PR-агентства, якщо вони працюють за методологією Scrum, може мати такий вигляд:
Компанія-клієнт «Ікс» бажає провести великомасштабну подію для своїх партнерів і журналістів через 2 місяці. Вона замовила послуги агентства «T» для організації цієї події. Компанію «Ікс» представляє PR-менеджер, який відповідає за організацію події з боку клієнта. У термінології Scrum цю роль називають Власником продукту. З боку агентства за організацію події відповідає аккаунт-менеджер (Scrum-мастер), якому підпорядковується команда (Scrum-команда). На спільному засіданні (плануванні спринта) компанія і агентство вирішили, що вони будуть звітувати і планувати кожні 2 тижні (тривалість спринта). На перші 2 тижні вони спланували список завдань (спринт-беклог), але команда оцінила, що вони не зможуть виконати все з цього списку. Тоді PR-менеджер (Власник продукту) вказує, які завдання з цього списку є найбільш пріоритетними на наступні 2 тижні, після чого команда береться за їх виконання. Однак, слід врахувати, що на момент планування першого спринта повинен бути спланований весь список завдань на 2 місяці (product-беклог), щоб уникнути ситуації, коли до моменту проведення події щось залишиться невиконаним.
Життєвий цикл спринту
Планування спринту
На початку кожного спринта проводиться планування спринта. У цьому плануванні беруть участь замовники, користувачі, керівництво, Власник продукту, Скрам Мастер і команда.
Планування спринта складається з двох послідовних зустрічей.
Перше планування спринта
Учасники: команда, Product Owner, Scrum Master, користувачі, менеджмент
Ціль: Визначити мету спринта (Sprint Goal) і Sprint Backlog — функціональність, яка буде розроблена протягом наступного спринта для досягнення цілі спринта.
Артефакт: Список задач спринта (Sprint Backlog)
Друге планування спринта
Учасники: Scrum Master, команда
Ціль: визначити, як саме буде розроблятися певна функціональність, щоб досягти цілі спринту. Для кожного елементу списку задач спринта (Sprint Backlog) визначаються конкретні завдання і оцінюється їх тривалість.
Артефакт: у списку задач спринта (Sprint Backlog) з’являються конкретні завдання.
Якщо під час спринту виявляється, що команда не зможе виконати заплановані роботи, то Скрам Мастер, Product Owner і команда зустрічаються, щоб визначити, як можна скоротити обсяг робіт (scope) і, при цьому, досягти цілі спринту.
Зупинка спринта (Sprint Abnormal Termination)
Зупинка спринта відбувається в виняткових випадках. Спринт може бути зупинений до того, як минуть відведені 30 днів. Команда може зупинити спринт, якщо вона розуміє, що не зможе досягти цілі спринта у відведений час. Product Owner також може зупинити спринт, якщо зникла необхідності досягнення цілі спринта.
Після зупинки спринта відбувається зустріч з командою, на якій обговорюються причини зупинки спринта. Після цього розпочинається новий спринт: проводиться його планування і починаються роботи.
Щоденна зустріч Scrum (Daily Scrum)
Ця зустріч проводиться щоранку на початку робочого дня. Вона призначена для того, щоб усі члени команди знали, хто чим займається в проєкті. Тривалість цієї зустрічі суворо обмежена і не повинна перевищувати 15 хвилин. Мета зустрічі — обмінюватися інформацією. Вона не призначена для вирішення проблем у проєкті. Будь-які питання, які потребують спеціального обговорення, повинні бути винесені за межі зустрічі.
Скрам-митинг проводить Скрам-майстер. Він по черзі задає запитання кожному члену команди:
— Що було зроблено вчора?
— Що буде зроблено сьогодні?
— З якими проблемами зіткнувся?
Скрам-мастер збирає всі відкриті для обговорення питання у вигляді елементів дій (Action Items) у форматі що/хто/коли, наприклад:
— Обговорити проблему з відображенням елемента керування
— Петя і Вася
— Відразу після скрам-мітингу
Діаграма згоряння задач (Burndown chart)
Графік, що демонструє кількість виконаної та залишеної роботи. Його оновлюють щодня для простого відображення прогресу роботи над спринтом. Графік повинен бути доступним для всіх.
Існують різні типи діаграм:
• діаграма спалювання робіт для спринту — відображає, скільки задач вже виконано і скільки ще залишилося виконати в поточному спринті.
• діаграма спалювання робіт для релізу проекту — відображає, скільки задач вже виконано і скільки ще залишилося до випуску продукту (зазвичай побудована на основі кількох спринтів).
Ретроспектива
У кінці кожного спринту Скрам-команда збирається на Ретроспективу. Мета Ретроспективи — переглянути якість існуючих процесів, взаємини між людьми та застосовувані інструменти. Команда визначає, що пройшло добре, а що — не дуже, а також виявляє потенційні можливості для поліпшень. Вони розробляють план поліпшень на майбутнє.
Канбан
Термін Канбан має прямий переклад: «Кан» означає видимий, візуальний, а «бан» означає картка або дошка.На заводах Toyota картки Канбан широко використовуються, щоб не завантажувати склади та робочі місця заздалегідь виготовленими запчастинами. Наприклад, уявіть собі, що ви встановлюєте двері на Toyota Corolla. У вас біля робочого місця знаходиться пачка з 10 дверима. Ви розміщуєте їх по одній на нові автомобілі, і коли залишається 5 дверей у пачці, ви розумієте, що час замовляти нові двері. Ви берете карточку Канбан, записуєте на ній замовлення на 10 дверей і відносите її до того, хто виготовляє двері. Ви знаєте, що він виготовить їх саме в той момент, коли у вас залишаться останні 5 дверей. І саме так і відбувається — коли ви ставите останню дверку, прибуває пачка з 10 новими дверима. І так постійно — ви замовляєте нові двері лише тоді, коли вони вам потрібні.
А тепер уявіть собі, що така система діє на всьому заводі. Ніде немає складів, де запчастини лежать тижнями і місяцями. Усі працюють лише за запитом і виробляють саме стільки запчастин, скільки замовлено. Якщо раптом замовлень стало більше або менше — система легко сама пристосовується до змін.
Основним завданням карт Канбан у цій системі є зменшення кількості «робіт, що виконуються в даний момент» (work in progress).
Наприклад, на всю виробничу лінію може бути виділено рівно 10 карток для дверей. Це означає, що в будь-який момент часу на лінії не буде більше 10 готових дверей. Коли замовляти нові двері і яка їх кількість — це завдання для того, хто встановлює їх. Тільки він знає свої потреби і тільки він може розміщувати замовлення виробнику дверей, але він завжди обмежений кількістю 10.
Цей метод Бережливого виробництва (Lean manufacturing) був розроблений в Тойоті, і тепер багато виробничих компаній по всьому світу впроваджують його або вже впровадили.
Але це все стосується виробництва, а не розробки програмного забезпечення.
А що ж таке Канбан розробка відносно до ПЗ та чим вона відрізняєтсья від інших гнучких методологій, таких як SCRUM чи XP?
По-перше, потрібно відразу зрозуміти, що Канбан — це не конкретний процес, а система цінностей. Так само як SCRUM та XP. Це означає, що ніхто не скаже вам, що і як робити крок за кроком.
По-друге, весь Канбан можна описати однією простою фразою — «Зменшення роботи, яка виконується в даний момент (work in progress)».
Втретє, Канбан є ще більш «гнучкою» методологією, ніж SCRUM і XP. Це означає, що вона не підходить для всіх команд і всіх проектів. І це також означає, що команда повинна бути ще більш готовою до гнучкої роботи, ніж команди, які використовують SCRUM і XP.
Різниця між Канбан та SCRUM:
— У Канбан немає таймбоксів ні на що (ні на завдання, ні на спринти).
— У Канбан задачі більше і їх менше.
— У Канбан оцінки термінів для завдання є необов’язковими або зовсім їх немає.
— У Канбан «швидкість роботи команди» відсутня, і враховується лише середній час на повну реалізацію завдання.
Канбан і SCRUM суттєво відрізняються у своїй орієнтації на розробку. Якщо в SCRUM основна увага команди приділяється успішному виконанню спринтів (і це слід визнати), то в Канбан на першому місці стоять завдання.
У Канбан відсутні будь-які спринти, команда працює над завданням з самого початку до його завершення. Розгортання завдання відбувається, коли воно готове. Презентація виконаної роботи також відбувається відповідно до готовності. Команда не повинна оцінювати час виконання завдання, оскільки це має мало сенсу і майже завжди є помилковим на початку процесу.
Якщо менеджер вірить команді, то нащо потрібна оцінка часу? Завдання менеджера — створити пріоритетний пул завдань, а завдання команди — виконати якомога більше завдань з цього пулу. Все. Немає потреби в контролі. Все, що потрібно від менеджера — це додавати завдання до цього пулу або змінювати їх пріоритет. Саме так він керує проєктом.
Команда для роботи використовує Канбан-дошку. Наприклад, вона може виглядати так:
Стовпці зліва направо:
Цілі проекту:
Необов’язковий, але корисний стовпчик. Сюди можна помістити високорівневі цілі проекту, щоб команда їх бачила і всі про них знали. Наприклад, «Збільшити швидкість роботи на 20%» або «Додати підтримку Windows 7».
Черга завдань:
Тут зберігаються завдання, які готові бути розпочатими. Завжди для виконання вибирається верхнє, найпріоритетніше завдання, і його картка переміщується до наступного стовпчика.
Розробка дизайну:
Цей та інші стовпці до «Закінчено» можуть змінюватися, оскільки саме команда вирішує, які кроки проходить завдання до стану «Закінчено».
Наприклад, в цьому стовпці можуть знаходитися завдання, для яких дизайн коду або інтерфейсу ще не визначені і обговорюються. Коли обговорення завершені, завдання переміщується до наступного стовпця.
Розробка:
Тут завдання знаходиться до тих пір, поки розробка фічі не буде завершена. Після завершення воно переміщується до наступного стовпця.
Або, якщо архітектура неправильна або недостатньо точна, завдання можна повернути до попереднього стовпця.
Тестування:
У цьому стовпчику завдання знаходиться, поки воно проходить тестування. Якщо знайдено помилки, воно повертається до Розробки. Якщо немає помилок, воно переходить далі.
Деплоймент:
У кожного проекту свій спосіб деплойменту. Для деяких це означає розміщення нової версії продукту на сервері, а для інших це просто коміт коду до репозиторію.
Закінчено:
Сюди картка потрапляє тільки тоді, коли всі роботи з завданням повністю завершені.
А тепер найважливіше. Бачите цифри під кожним стовпцем? Це число завдань, які можуть одночасно перебувати у цих стовпцях. Ці числа вибираються експериментальним шляхом, але вважається, що вони повинні залежати від кількості розробників у команді.
Наприклад, якщо у вашій команді є 8 програмістів, то у рядок «Розробка» ви можете помістити цифру 4. Це означає, що програмісти одночасно будуть виконувати не більше 4 завдань, що в свою чергу забезпечить їм багато причин для спілкування та обміну досвідом. Якщо ви встановите цифру 2, то 8 програмістів, які займаються двома задачами, можуть нудьгувати або витрачати занадто багато часу на обговорення. Якщо встановити 8, то кожен програміст буде займатися своєю задачею, і деякі задачі можуть тривати довго на дошці, адже головна мета Канбан — зменшення часу проходження завдання від початку до етапу готовності.
Ніхто не може дати точну відповідь на питання, якими повинні бути ці обмеження. Але можна спробувати спочатку розділити кількість розробників на 2 і побачити, як це працює у вашій команді. Потім ці числа можна підлаштувати під вашу команду.
Під «розробниками» я розумію не тільки програмістів, а й інших спеціалістів. Наприклад, для стовпчика «Тестування» розробники — це тестувальники, оскільки тестування — це їх обов’язок.
Каскадна модель (waterfall)
— високий рівень формалізації процесів;
— велика кількість документації;
— жорстка послідовність етапів життєвого циклу без можливості повернення до попереднього етапу.
Недоліки
• Каскадний проект повинен постійно мати актуальну документацію. Обов’язкове оновлення проектної документації. Надлишкова документація.
• Дуже негнучка методологія.
• Може створити хибне враження про роботу над проектом (наприклад, фраза «45% виконано» не несе корисної інформації, а є просто інструментом для керівника проекту).
• Замовник не має можливості заздалегідь ознайомитися з системою навіть з прототипом системи.
• Користувач не має можливості поступово звикати до продукту.
• Всі вимоги повинні бути відомі на початку життєвого циклу проекту.
• Виникає потреба в жорсткому управлінні і регулярному контролі, інакше проект швидко виходить з графіків.
• Відсутня можливість врахувати переробку, весь проект реалізується за один раз.
Переваги
• Висока прозорість розробки і фаз проєкту.
• Чітка послідовність.
• Стабільність вимог.
• Суворий контроль менеджменту проекту.
• Сприяє складанню плану проекту та формуванню проектної команди.
• Добре визначає процедуру контролю якості.
«Водоворот» або каскадна модель з проміжним контролем
У цій моделі передбачений проміжний контроль за допомогою зворотного зв’язку. Але це перевага також призводить до недоліків. Витрати на реалізацію проєкту в такому підході збільшуються практично в 10 разів. Ця модель, як ви вже зрозуміли, є незначною модифікацією попередньої і належить до першої групи.При реальній роботі з моделлю, що дозволяє рухатися лише в одному напрямку, зазвичай виникають проблеми з виявленням недоліків і помилок, зроблених на ранніх етапах. Але ще складніше мати справу з змінами в середовищі, в якому розробляється програмне забезпечення (це можуть бути зміни вимог, зміна підрядників, зміни політик розробляючої або експлуатуючої організації, зміни галузевих стандартів, поява конкуруючих продуктів і т.д.).
Ітеративна модель
Ітеративні або інкрементальні моделі (існує кілька таких моделей) передбачають розбиття створюваної системи на набір частин, які розробляються за допомогою кількох послідовних прогонів всіх робіт або їх частин.Каскадна модель з можливістю повернення до попереднього кроку при потребі переглянути його результати стає ітеративною.
Ітеративний процес передбачає, що різні види діяльності не є жорстко прив’язаними до певних етапів розробки, а виконуються за потреби, іноді повторюються, до тих пір, поки не буде досягнутий потрібний результат.
Разом з гнучкістю і можливістю швидко реагувати на зміни, ітеративні моделі вносять додаткові складнощі в управління проєктом і відстеження його прогресу. При використанні ітеративного підходу значно складніше адекватно оцінити поточний стан проєкту і спланувати довгостроковий розвиток подій, а також передбачити терміни і ресурси, необхідні для забезпечення певної якості результату.
Спіральна модель життєвого циклу програмного забезпечення
Дана модель чудово поєднує в собі поетапне прототипування і проєктування. Вона бере найкраще з висхідної та низхідної концепцій, поєднуючи їх в одну модель.Переваги моделі:
1. Результат досягається в найкоротший термін.
2. Конкурентоспроможність є достатньо високою.
3. При зміні вимог не доведеться починати все з «нуля».
Проте у цій моделі є один суттєвий недолік: неможливість регламентування етапів виконання.
V модель — розробка через тестування
Ця модель має більш сучасний алгоритм, близький до сучасних методів, але все ще має деякі недоліки. Вона є одним із основних практик екстремального програмування і передбачає регулярне тестування продукту під час розробки.
• Мінімізація ризиків:
• Підвищення та гарантування якості: Модель V є стандартизованою моделлю розробки, що дозволяє досягти бажаних якісних результатів від проекту. Проміжні результати можуть бути перевірені на ранніх етапах. Універсальна документація полегшує зрозумілість та перевірку.
• Зниження загальної вартості проекту: Ресурси для розробки, виробництва, управління та підтримки можуть бути заздалегідь розраховані та контрольовані. Отримані результати також є універсальними та легко прогнозованими. Це зменшує витрати на наступні етапи та проекти.
• Підвищення якості комунікації між учасниками проекту: Універсальний опис всіх елементів та умов сприяє взаєморозумінню всіх учасників проекту. Таким чином, зменшуються неточності у розумінні між користувачем, замовником, постачальником та розробником.
Модель на основі розробки прототипу
Дана модель базується на розробці прототипів та прототипуванні продукту і відноситься до другої групи.Прототипування використовується на ранніх етапах життєвого циклу програмного забезпечення:
— Уточнити незрозумілі вимоги (прототип UI)
— Обрати один з ряду концептуальних рішень (реалізація сценаріїв)
— Проаналызувати здыйсненнысть проэкту
Класифікація прототипів:
— Горизонтальні прототипи — моделюють виключно інтерфейс користувача, не зачіпаючи логіку обробки та базу даних.
— Вертикальні прототипи — перевірка архітектурних рішень.
— Одноразові прототипи — для швидкої розробки.
— Еволюційні прототипи — перше наближення до еволюційної системи.
Модель Хаосу
Вкратце Стратегия хаоса — это стратегия разработки программного обеспечения основанная на модели хаоса. Главное правило — это,всегда решать наиболее важную задачу первой.Экстримальне програмування (XP)
Дванадцять основних прийомів екстремального програмування (за першим виданням книги «Extreme programming explained») можна об’єднати в чотири групи:• Короткий цикл зворотного зв’язку (Fine-scale feedback)
• Розробка через тестування (Test-driven development)
• Гра в планування (Planning game)
• Замовник завжди поруч (Whole team, Onsite customer)
• Парне програмування (Pair programming)
• Безперервний, а не пакетний процес
• Безперервна інтеграція (Continuous integration)
• Рефакторинг (Design improvement, Refactoring)
• Часті невеликі релізи (Small releases)
• Зрозуміння, яке спільне для всіх
• Простота (Simple design)
• Метафора системи (System metaphor)
• Колективна власність коду (Collective code ownership) або обраних шаблонів проектування (Collective patterns ownership)
• Стандарт кодування (Coding standard or Coding conventions)
• Соціальний захист програміста (Programmer welfare):
•
RATIONAL UNIFIED PROCESS (RUP)
— методологія розробки ПЗ, створена компанією Rational Software.В основі методології лежать 6 основних принципів:
• компонентна архітектура, яка реалізується і тестується на ранніх етапах проекту;
• робота над проектом у згуртованій команді, де ключова роль належить архітекторам;
• рання ідентифікація та безперервне усунення можливих ризиків;
• концентрація на виконанні вимог замовників до виконуваної програми;
• очікування змін у вимогах, проектних рішеннях та реалізації протягом процесу розробки;
• постійне забезпечення якості на всіх етапах розробки проекту.
Використання методології RUP спрямоване на ітеративну модель розробки. Особливістю методології є те, що ступінь формалізації може змінюватися в залежності від потреб проекту. Після завершення кожного етапу і кожної ітерації можна створювати всі необхідні документи і досягати максимального рівня формалізації. Також можна створювати лише ті документи, які необхідні для роботи, включно з можливістю їх повної відсутності. Завдяки такому підходу до формалізації процесів, методологія RUP є достатньо гнучкою і широко популярною. Ця методологія може бути застосована як у невеликих і швидких проектах, де за рахунок відсутності формалізації потрібно скоротити час виконання проекту та витрати, так і у великих і складних проектах, де потрібний високий рівень формалізму, наприклад, з метою подальшої сертифікації продукту. Ця перевага дає змогу використовувати одну і ту ж команду розробників для реалізації проектів різного обсягу та вимог.
MICROSOFT SOLUTIONS FRAMEWORK
— методологія розробки програмного забезпечення була запропонована корпорацією Microsoft і базується на практичному досвіді Microsoft і описує управління людьми та робочими процесами під час розробки рішень.Базові концепції та принципи моделі процесів MSF:
• управління компромісами — пошук компромісів між ресурсами проекту, календарним графіком та реалізовуваними можливостями;
• гнучкість — готовність до змінюються проектних умов;
• концентрація на бізнес-пріоритетах — фокус на тих користях і вигодах, які очікує отримати споживач рішення;
• сприяння вільному спілкуванню всередині проекту;
• створення базової версії — фіксація стану будь-якого проектного артефакту, включаючи програмний код, план проекту, посібник користувача, налаштування серверів, та подальше ефективне керування змінами, аналітика проекту.
MSF пропонує перевірені методики для планування, проектування, розробки та впровадження успішних ІТ-рішень. Завдяки своїй гнучкості, масштабованості та відсутності жорстких інструкцій MSF здатний задовольнити потреби організації або проектної групи будь-якого розміру.
Методологія MSF складається з принципів, моделей та дисциплін з управління персоналом, процесами, технологічними елементами та питаннями, пов’язаними з цими факторами, які є типовими для більшості проектів.
Джерела: youmanager.pro, fresh2l.com, ru.wikipedia.org, tim.com.ua (деякі ворожі джерела були видалені зі списку).
Nice to read: www.scrumalliance.org/...ns/Core-Scrum-Russian.pdf
48 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів