Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Курсова робота
з дисципліни «Основи автоматизованого проектування складних об’єктів і систем»
на тему «Дослідження принципів побудови та функціонування гнучкої методології АППУ на Java»
Зміст
Методологія гнучкої розробки програмних ужитків
Концепція гнучкої розробки програмних ужитків
Інструменти інфраструктурної підтримки гнучкого проекту
Інструменти гнучкої розробки програмних продуктів на Java
Вступ
На сьогодні, більшість компаній, які займаються розробкою програмних ужитків використовують такі методології розробки, як Scrum, XP (eXtreme Programming), Lean та інші гнучкі методології. Отже, цікавим питанням для дослідження постає питання що являє собою гнучка методологія, як її організувати та якими інструментами скористатись.
У цій роботі, я дослідив основні питання, які стосуються Agile методології, описав її основні принципи та продемонстрував приклад ітеративної моделі гнучкої методології XP (eXtreme Programming). Також, я оглянув необхідні інструменти для організації роботи над гнучким проектом без яких не може існувати жодна розробка.
Для того щоб показати більш детальніший приклад застосування інструментів АППУ у agile методологіях, я обрав мову програмування Java. Мова Java є об’єктно-орієнтованою мовою, яка може працювати незалежно від комп’ютерної архітектури. Дата офіційного народження цієї мови програмування – 23 травня 1995 року [6]. Однак вона й досі займає чільне місце серед мов програмування. Популярність Java серед українських розробників можна продемонструвати цьогорічним рейтингом мов програмування в Україні, складеним IT-порталом dou.ua у січні [5]:
/
Рис. 1 Розподіл мов програмування за використанням на робочих проектах в Україні на 01.2013
Отже застосування інструментів АППУ у гнучкій методології розробки програмних продуктів на Java є актуальної темою на даний час.
Методологія гнучкої розробки програмних ужитків
Гнучка розробка програмного забезпечення (Agile software development) – клас методологій розробки програмного забезпечення, що базується на ітеративній розробці, в якій вимоги та розв’язки еволюціонують через співпрацю між само-організовуваними, багатофункціональними командами [9].
Отже, під гнучкою методологією розуміють не конкретний метод або засіб, а лише набір рекомендацій, які можуть привнести «гнучкість» у процес розробки. Ці рекомендації реалізуються практичними методологіями, такими як XP (eXtreme Programming), Lean, Scrum та інші. Кожна така методологія вирізняється з поміж інших своїми ознаками, однак всі вони належать до одного класу «гнучких» методологій.
Відмінною рисою XP є висока дисципліна, Lean робить акцент на понятті цінності продукту, а Scrum перш за все передбачає якісний контроль [3].
Об’єднує ж всі практичні методології маніфест гнучкої розробки програмних ужитків (Manifesto for Agile Software Development). У ньому вказані принципи, які повинні реалізувати всі гнучкі методології. Із них можна виділити такі основні [4]:
Люди та співпраця важливіші за процеси та інструменти
Працюючий продукт важливіший за вичерпну документацію
Співпраця із замовником важливіша за обслуговування умов контракту
Готовність до змін важливіша за дотримання плану
Проаналізувавши основні принципи Manifesto for Agile можна відмітити, що гнучка методологія ставить у центрі процесу розробки людину, а не сам процес. Також варто зазначити, що «гнучкість», перш за все, за цією методологією, полягає у готовності до змін.
Отже, можна зробити висновок, що гнучка розробка – це концептуальний каркас, світогляд і підхід до створення програм. Його знаковими рисами є економічність, швидкість і прагматизм. Гнучка методологія розробки нагадує нам про те, що, хоча комп’ютери виконують код, його написанням і підтримкою займаються все-таки люди [3].
Концепція гнучкої розробки програмних ужитків
Модель гнучкої розробки є неперервною моделлю, яка ґрунтується на ітераціях і релізах (випусках робочих версій продукту) на регулярній основі.
Концепцію гнучкої розробки програмних ужитків на прикладі методології XP можна зобразити наступною діаграмою (Рис. 2)
/
Рис. 2 Модель гнучкої методології розробки програмних ужитків на основі XP
На діаграмі показано 5 основних, логічно відокремлених рівнів: стратегія, реліз, ітерація, «щодня» та «неперервно».
Стратегія. Вона є початковим етапом на якому формується бачення та цілі майбутнього проекту, формується бюджет та визначаються основні цінності проекту.
Реліз. Етап на якому команда розробників реалізує версію системи. Він є одним з найважливіших етапів і потребує великої уваги. Він дозволяє команді розробників розробляти програмне забезпечення якомога швидше, зберігаючи цикл розробки якомога коротшим. На цьому етапі формується список задач, застосовується методологія BDD (Behavior-Driven-Development), розробляється дизайн проекту і проводиться оцінка релізу.
Ітерація. Дозволяє команді розробників створювати робочий, протестований, цінний програмний код наприкінці кожної ітерації (як правило впродовж 2-3 тижнів)
Щодня команда розробників проводить зібрання на якому проводить обговорення поточного стану ітерації, задачі, успіхи та невдачі.
Неперервно команда розробників працює підчас поточної ітерації. Розробники застосовують сукупність методик, інструментів та засобів для ефективної, гнучкої розробки програмного ужитку серед яких рефакторінг, парне програмування, TDD (Test-Driven-Development) та інші.
Варто зазначити, що набір методик та інструментів для гнучкої розробки є достатньо широким. Можливості таких засобів допомагають полегшити та автоматизувати кожен етап розробки програмного ужитку, тому їх застосування є необхідним для успішного завершення складного проекту.
Інструменти інфраструктурної підтримки гнучкого проекту
Agile модель, як зазначалось у попередньому розділі, є ітеративною. Підчас кожної ітерації реалізується певна підмножина функцій майбутнього продукту. Кожна функція проходить три етапи обробки перед тим, як стане програмою [3]:
Аналіз і проектування (підготовка до роботи)
Розробка (виконання роботи)
Тестування (перевірка роботи)
На кожному з цих етапів можна використовувати інструменти, які полегшать та автоматизують реалізацію цих функції. Крім цього, гнучка методологія вимагає згуртованої та злагодженої командної роботи, яка полягає у ефективному обміні інформації між розробниками.
Тому усі інструменти можна умовно поділити на 4 групи:
Інструменти для аналізу і проектування
Інструменти для розробки
Інструменти для тестування
Інструменти командної роботи
Деякі інструменти можуть відноситись одночасно до декількох груп, наприклад безліч інструментів для розробки вже передбачають деякою мірою елементи командної роботи. Однак, таке групування допомагає краще уявити процес гнучкої розробки програмного продукту.
На етапі аналізу та проектування застосовуються різноманітні блок-схеми, діаграми, моделі, тобто засоби наочного представлення. На даний час найбільш вживаним інструментом візуалізації на етапі аналізу і проектування є UML (Unified Modeling Language) – уніфікована мова моделювання, що тісно пов’язана з парадигмою об’єктно-орієнтованого програмування. На даний час є чинною версія UML 2.4.1, яка опублікована у серпні 2011 року. Вона містить три класи діаграм, а саме: Структурні діаграми, діаграми поведінки та діаграми співпраці. Структура діаграм UML 2.3 можна навести за допомогою діаграми класів UML (рис. 3) [7]
/
Рис. 3 Структура діаграм UML 2.3
На етапі розробки існує великий вибір інструментів, що автоматизують та полегшують її, іншими словами роблять її гнучкою. Гнучкі інструменти розробки мають якісно підтримувати такі аспекти розробки, як рефакторінг (Refactoring), виявлення помилок, контроль версій, документування, робота з фреймворками (Framework), SDK (Software Development Kit) та API (Application Programming Interface). Значну роль на етапі розробки відіграє IDE (Integrated Development Environment) – інтегрована система розробки, що представляє один програмний комплекс. Як правило, сучасні IDE включають у себе [8]:
Текстовий редактор
Компілятор
Засоби автоматизованої збірки
Відлагоджувач
Однак IDE, які нас цікавлять, містять у собі також гнучкі інструменти розробки та дозволять інтегрувати у себе плагіни (plugin), що дозволяють розширювати можливості IDE для своїх потреб.
Сучасні тенденції створення програмних ужитків тісно пов’язують розробку системи та її тестування. У гнучких проектах часто застосовують техніку TDD (Test Driven Development) – розробка через тестування. Зокрема TDD дуже часто використовується у XP. Інструментами тестування виступають різноманітні фреймворки, розроблені під конкретні мови програмування.
Інструменти командної роботи так чи інакше присутні у кожному етапі створення системи. Вони включають у себе інструменти контролю версій, репозиторії програмного коду, засоби зв’язку на відстані (відео та аудіо зв’язок) та інші.
Інструменти гнучкої розробки програмних продуктів на Java
Огляд інструментів розробки програмних ужитків під Java, я розпочну з IDE середовищ, оскільки вони здатні охопити в собі більшість інструментів з кожної групи.
IDE інструменти
Провівши аналіз IDE, які най частіше використовуються програмістами Java, я прийшов до висновку, що найпопулярнішими є Eclipse IDE та NetBeans IDE. Ключовими чинниками успіху цих продуктів є їх безплатність та велике співтовариство, яке займається їх розвитком. Однак Eclipse на даний час є більш розвинутим – створена програмістами IBM у 2001 році, ця платформа завоювала симпатії багатьох розробників. Для неї написано безліч плагінів, які розширюють її базову функціональність, вона підтримується потужним співтовариством користувачів і постійно розвивається. Крім того Eclipse підтримує можливість розробки під Android та мобільні платформи на Java.
Завітавши на сайт www.eclipse.org можна знайти багато статей про Eclipse та отримати підтримку у реальному часі на он-лайн форумі.
У розділі завантажень можна поглянути на значний список уже зібраних під конкретні потреби програмістів версій цієї IDE (рис. 4)
/
Рис. 4Список збірок Eclipse Juno
Отже Eclipse пропонує набір уже готових рішень для конкретної задачі, що забезпечують базову функціональність одразу після інсталяції.
Головним критерієм вибору цієї IDE у якості гнучкого інструменту АППУ у Java служить наявність значної кількості плагінів для неї та можливості повної настройки цього середовища під потреби конкретної задачі.
/
Рис. 5 Робоча область IDE Eclipse Juno
UML інструментарій
Провівши аналіз наявного інструментарію для побудови UML діаграм у IDE Eclipse, я виявив декілька інструментів, що мене зацікавили, а саме:
UML designer
ObjectAid UML Diagram
UML2 tools
MDT
Кожен з цих плагінів дозволяє автоматизовано будувати UML діаграми різних типів. Також варто відмітити, що більшість з них є безплатними або існують безплатні їх версії. Розглянемо перші два з них.
ObjectAid UML Diagram є відносно простим інструментом UML. Він підтримує побудову двох типів діаграм: Class Diagram (діаграма класів) та Sequence Diagram (діаграма послідовностей).
/
Рис. 6 Приклад діаграми класів побудованої у ObjectAid UML Diagram
Головною перевагою цього інструменту є простота у використанні та можливість швидкої візуалізації структури класів системи.
UML designer є більш комплексним за продуктом та підтримує такі діаграми UML 2.0:
Package Hierarchy
Class Diagram
Component Diagram
Object Diagram
Composite Structure
Use Case Diagram
Activity Diagram
State Machine
Sequence Diagram
Даний пагін володіє зручним графічним інтерфейсом, що надає простоти та гнучкості у побудові UML моделей. Для користування можливостями цього інструменту слід відкрити перспективу Modeling у Eclipse (Window -> Open Perspective > Modeling). Інструмент надає широкі можливості для редагування параметрів кожного об’єкта моделі (у вікні Properties) та дозволяє створювати нові об’єкти моделі виділяючи їх у палітрі (вікно Palette) та малюючи їх у робочій області (рис. 7). Також можна скористатись, при редагуванні параметрів, спливаючим меню, яке з’являється при наведені та утриманні курсору мишки на об’єкті протягом деякого часу. Цей інструмент здатен формувати ієрархії моделей, групуючи діаграми у спеціальних об’єктах <Model>.
/
Рис. 7 Приклад Use Case діаграми побудованої у UML Designer
Недоліком даного плагіну є відсутність можливості генерації Java коду на основі UML моделі. Однак існує її вирішення, а саме зв’язка UML Designer з плагіном UML to Java Generator.
Інструменти розробки
До інструментів розробки входить IDE Eclipse, основне призначення якої – написання коду. Eclipse володіє широкими можливостями по використанню SDK, API та рефакторінгу. Головною перевагою її є велике різноманіття плагінів та можливість написання своїх доповнень, які інтегруються в IDE та спеціалізовано розширюють функціональність.
Дане середовище може підтримувати декілька версій API та SDK – інсталяція та налаштування відбуваються дуже просто, а переключення між ними здійснюється просто та не займає багато часу. Список інстальованих API та SDK можна знайти у пункті головного меню Window -> Preferences -> Installed JREs (рис. 8)
/
Рис. 8 Список інстальованих JRE
У під категорії Java можна знайти також багато інших налаштувань середовища, які полегшать життя розробнику, а саме: налаштування візуального оформлення коду, налаштування стилю форматування, налаштування шляхів та вказівок компілятору, налаштування вбудованої системи допомоги та документації Java.
Як зазначалось раніше – велику роль у підтримці та розвитку коду відіграє рефакторінг. Рефакторінг – це перетворення програмного коду, зміна внутрішньої структури програмного забезпечення для полегшення розуміння коду та легшого внесення подальших змін без зміни зовнішньої поведінки самої системи [10]. Рефакторінг в більшості випадків – це річ яку розробник повинен робити сам. Однак можна спонукати розробника проводити системний рефакторінг або автоматизувати рутинні дії при написанні коду за допомогою різних інструментів. У IDE Eclipse вбудовані інструменти для полегшення супроводу коду, наприклад це авто генерація стандартних, шаблонних фрагментів коду, що дозволяє запобігти порушенню встановлених норм написання коду. Більш докладніше прочитати про IDE Eclipse та її інтегрування в гнучку розробку можна прочитати в [2]. Ознайомитись зі всіма можливостями IDE Eclipse можна на сайті з її документацією: www.eclipse.org/documentation
Не можна оминути в нинішній час інструменти для гнучкої розробки web-частини проекту на Java. Провівши аналіз існуючих інструментів, я обрав IDE Aptana Studio. Визначальним критерієм у виборі даної IDE стало те що вона є безплатною та побудована на основі середовища Eclipse. Aptana Studio надає широкі можливості у написанні, редагуванні, відлагодженню та запуску HTML, CSS та JavaScript веб-ужитків з використанням PHP та Ruby on Rails.
Це середовище володіє усією гнучкістю у налаштуванні та роботі, яку воно унаслідувало від Eclipse (рис. 9). Ще однією перевагою використання Aptana Studio для розробників на Java є звичність інтерфейсу та принципів роботи порівняно з IDE Eclipse.
/
Рис. 9 Aptana Studio 3
Вичерпну документацію по даному середовищі можна знайти на сайті www.aptana.com/support
Інструменти тестування
На сьогодні існує безліч фреймворків для тестування, але провідним фреймворком для unit(модульного) тестування є xUnit. Різновиди цього інструменту існують для багатьох мов програмування – C#, Delphi, C++, Java і т.д. Отже інструментом тестування модулів я обрав JUnit.
Актуальною на даний момент є 4-та версія JUnit. Цей інструмент уже є присутній у багатьох версіях IDE Eclipse, однак його інсталяція не викликає проблем.
Для демонстрації роботи з цим інструментом, я напишу простий клас для знаходження факторіала числа та протестую його за допомогою JUnit.
Розроблений клас містить 3 відкритих методи та одне закрите поле. Метод setVariable призначений для задавання значення для якого потрібно знайти факторіал, метод getVariable призначений для одержання заданого значення для якого потрібно знайти факторіал, а метод factorial повертає факторіал заданого числа. Закрите поле variable містить значення для якого потрібно знайти факторіал (рис. 10).
/
Рис. 10 Код класу Factorial
Створимо клас-тест для нашого класу. Для цього скористаємося шаблоном створення класу, який надає JUnit (рис. 11).
/
Рис. 11 Створення класу JUnit
Задамо ім’я тестового класу – FactorialTest. Підчас слідування інструкціям майстра створення тестового класу можна задати безліч готових налаштувань, які позбавляють рутинної роботи, зокрема одразу можна задати для яких методів ми будемо створювати тести (рис. 12) і JUnit створить сигнатури тестових методів за нас.
/
Рис. 12 Діалог створення тестового класу
Розроблений тестовий клас містить три тести для встановлення, одержання значення для якого потрібно знайти факторіал та тест для знаходження факторіалу цього числа (рис. 13). Тестовий клас потрібно унаслідувати від TestCase класу, який надає JUnit. Також потрібно передати батьківському конструктору TestCase ім’я тесту, що робиться у конструкторі тестового класу.
/
Рис. 13 Тестовий клас
Тепер залишається тільки написати клас main у якому будуть запускатись тести. Код класу main:
/
Запустивши тести отримуємо повідомлення в консолі про їх успішність або ж невдачу.
Отже, тестування на основі JUnit можна звести до послідовності таких дій:
Створити тестовий клас користуючись майстром або ж вручну.
Унаслідувати створений клас від TestCase.
Створити тестові методи. Хороший стиль програмування передбачає, що тестовий метод буде помічений анотацією @Test та міститиме у назві слово test.
Створити екземпляри класу що тестується у тесті та викликати метод, який треба протестувати. Перевірити результат на правильність методом assertTrue. Крім цього метода також можна скористатись assertEquals, assertFalse, assertNull, assertNotNull, assertSame логіку роботи яких можна можна зрозуміти скориставшись документацією JUnit.
Створити клас main у якому запустити тести за допомогою класів JUnit,а саме TestRunner та TestSuite.
Докладніше дізнатись про можливості jUnit зокрема, та модульного тестування загалом можна в [1].
Інструменти командної роботи
Сучасний процес гнучкої розробки не може обійтись без системи контролю версій. Система контролю версій – це інструмент, що полегшує роботу з інформацією що змінюється. Цей інструмент дозволяє зберігати декілька версій тексту програми або ж будь-якого іншого документу і при необхідності повертатись до старої версії документу, виявляти хто вніс ті чи інші зміни та інше. Головною її цінністю у командній розробці є можливість роботи над одним проектом членів команди, які географічно віддалені один від одного.
Провівши аналіз існуючих систем контролю версій, я виявив, що найбільш уживаними на даний час є: Subversion, GitHub та Mercurian. Усі ці інструменти розповсюджуються на безплатній основі. Слід відмітити що Subversion є централізованою системою контролю версій, а GitHub та Mercurian – децентралізованими. Відмінність централізованої системи від децентралізованої полягає у тому, що перша реалізована на основі клієнт-серверної архітектури, а друга – на основі децентралізованої. З вище сказаного можна зробити висновок, що централізована система контролю версій зберігає всі документи в одному сховищі, в той час як децентралізована на усіх локальних комп’ютерах, які беруть участь у розробці проекту.
Розглянемо у якості системи контролю версій у гнучкому проекті систему Subversion. Для організації роботи з Subversion (SVN) необхідний svn-сервер на якому буде зберігатись репозиторій коду. Під платформу Windows я знайшов безплатний та легкий у використанні сервер VisualSVN, який має графічний інтерфейс (рис. 14).
Налаштування даного сервера є достатньо простою задачею та не займає багато часу. Сервер дозволяє, як підключення по протоколу http та і по https. У папці Users можна створити користувачів даного репозиторію та надати їм відповідні права доступу. Для групових операцій передбачена папка Groups.
/
Рис. 14 Сервер VisualSVN
Для взаємодії з svn-сервером через IDE Eclipse я використав плагін Subclipse. Цей плагін є безплатним та простим у використанні – взаємодію з сервером можна налагодити в дуже короткий час та почати працювати над проектом. Плагін надає всі можливості клієнта Subversion – завантаження, вивантаження файлів, внесення змін у файли, навігація по структурі проекту та інші.
Для роботи з svn-сервером через Eclipse достатньо створити нову перспективу через Window -> Open Perspective -> SVN Repository Exploring, після чого можна розпочати роботу (рис 15).
Розміщення проекту через середовище Eclipse здійснюється шляхом виклику контекстного меню проекту у вкладці відображення ієрархіє проекту та переходу по пунктах Team -> Share Project, після чого слід вибрати SVN та пройти декілька діалогових вікон для встановлення з’єднання з потрібним сервером та репозиторієм на ньому.
/
Рис. 15 Eclipse з відкритою перспективою SVN Repository Exploring з підключеним репозиторієм Test
У командній роботі також важливий зв'язок між членами команди – чи то вони знаходяться в одному офісі на різних поверхах чи в різних відділеннях одної компанії. Найкращими способами зв’язку на даний момент є Skype, email, ICQ та інші. Не можна також оминути увагою мобільний зв'язок та SMS.
З розвитком всесвітньої мережі та браузер них технологій почали з’являтись нові інструменти командної взаємодії. Одним з таких сервісів є realtimeboard.com –сервіс-віртуальна дошка (рис 16). Даний сервіс можна використати на усіх етапах роботи команди над проектом – від аналізу і проектування, закінчуючи координацією і узгодженням роботи. Сервіс надає змогу створювати декілька робочих областей з різним контентом, підключати до робочої області обраних користувачів та здійснювати взаємодію у реальному часі. На робочій області можна створювати діаграми, пов’язувати їх зв’язками, прикріпляти зображення, малювати, залишати нотатки, спілкуватись в онлайн чаті з іншими членами команди та багато іншого.
/
Рис. 16 Сервіс realtimeboard з прикладом простої схеми розпорядку роботи
Висновок
У цій розрахунково-графічній роботі я коротко розглянув основні концепції та принципи роботи Agile (гнучкої) методології розробки програмного забезпечення. Оскільки гнучка методологія є лише своєрідним набором рекомендацій які дозволяють досягти гнучкості її реалізацію було розглянуто на основі eXtreme Programming (XP) (рис. 2).
Аналіз інструментів інфраструктурної підтримки гнучкого проекту було проведено на основі таких методологій, як XP, Scrum та Lean. Я умовно поділив усі інструменти на чотири групи, а саме:
Інструменти для аналізу і проектування
Інструменти для розробки
Інструменти для тестування
Інструменти командної роботи
Деякі інструменти можуть входити одночасно до декількох груп, що робить такий поділ умовним, але допомагає повніше усвідомити концепцію гнучкої розробки.
Через загальність теми не вдалося описати усі можливі інструменти, що зроблять проект гнучким, однак я розглянув ті з них без котрих команда розробників не зможе працювати ефективно. Серед таких інструментів я виділив IDE для розробки на Java та IDE для розробки веб складової, UML інструменти, фреймворк тестування JUnit, систему контролю версій Subversion та сервер депозиторіїв VisualSVN та інші інструменти командної роботи.
Увагою я оминув такі необхідні інструменти, як Spring Framework (безплатна заміна Enterprise JavaBeans), Hibernate Framework (безплатний фреймворк для відображення об’єктно-орієнтованої моделі даних в традиційних базах даних). Ці інструменти дозволяють створювати продукти корпоративного рівня (J2EE специфікації) на безплатній основі. Дізнатись більше про них можна в [2].
Література
Andy Hunt, Dave Thomas. Pragmatic Unit Testing in Java with JUnit – The Pragmatic Bookshelf, 2003
Анил Хемраджани. Гибкая разработка приложений на Java с помощью Spring, Hibernate и Eclipse. :Пер. с англ. – М.: ООО «И.Д. Вильямс», 2008
Джонатан Расмуссон. Гибкое управление IT-проектами. Руководство для настоящих самураев. – СПб.: Питер , 2012
agilemanifesto.org
dou.ua/lenta/articles/language-rating-jan-2013
ru.wikipedia.org/wiki/Java
ru.wikipedia.org/wiki/UML
ru.wikipedia.org/wiki/Интегрированая_среда_разработки
uk.wikipedia.org/wiki/Гнучка_розробка_програмного_забезпечення
10. uk.wikipedia.org/wiki/Рефакторінг