Як ти маєш справу з дизайном у Scrum?


26

Як ти маєш справу з дизайном у Scrum? Ви все ще маєте добре написані проектні документи для кожної ітерації scrum? Ви просто робите дизайнерські примітки із діаграмами UML? Або у вас просто добре прокоментований код?

Кожна ітерація може включати в себе зміну дизайну, тому я просто хотів дізнатися, як люди захоплюють це, тому нові розробники мають просту роботу з розумінням домену та якомога швидше отримувати на борту.


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

Відповіді:


11

тільки тому, що це scrum, не означає, що все змінює кожен спринт!

Scrum - це робити те, що потрібно (але не більше) . Вам ще потрібно зробити дизайн, і вам ще потрібно документувати. Його сума просто не визначена, як це зробити.

Частина планування кожного спринту визначає, що потрібно зробити. Якщо щось у відставанні потрібно спроектувати, оскільки воно впливає на інші речі, то вам потрібно додати певне завдання для процесів проектування та зробити це перед завданням із реалізації.


9

Я маю багато сказати на цю тему. Я бачив багато випадків, коли компанії / команди / люди кажуть, що вони застосовують Agile підхід до програмного забезпечення, але насправді вони хочуть отримати нагороди, які обіцяють методи Agile, не дотримуючись принципів.

Щоб швидка ітерація працювала, вам слід зробити тест-розробку (я перестала говорити, що вам потрібно робити TDD неохоче). У TDD ваші тести виражають дизайн та наміри коду (коли вони говорять «код - це документація», те, що вони повинні говорити, «тести - це документація»). Складаючи одиничні тести, які виражають ваше розуміння функції, ви чітко заявляєте, що ви вважаєте, що код повинен зробити. Потім ви пишете код, який це робить. Потім ви рефактор цього коду, щоб він відповідав принципам архітектури "Red-Green-Refactor".

Запуск тестів на одиницях із кожною реєстрацією (або навіть перед кожною реєстрацією) підтверджує, що написаний вами новий код не порушує очікувану функціональність у якійсь іншій області програми. Це забезпечує мережу безпеки, яка дозволяє змінювати код при безвідмовній відмові. У міру того, як ваше розуміння необхідних вимог зростає, ви можете модифікувати тест, щоб відображати ці нові знання. Справжня конструкція полягає в тестах Unit. Все інше (включаючи код, який не охоплюється) - брехня.

Ось кілька рекомендованих для читання

Це гарні місця, щоб почати шукати, щоб навчитися по-справжньому підходити до спритного розвитку.


4
@Murph: Ідея полягає в тому, що архітектура виникає, і вам слід знайти її шляхом тестування, а не визначення її наперед.
Мартін Вікман

5
@Martin Я щось бачу - але все ще є жахливі питання масштабу. Мені це подобається до певного рівня, але поза цим ... ну, мабуть, ви, мабуть, мали би це зробити (або, принаймні, отримати початкову структуру), перш ніж дійти до рівня розробки (де можна очікувати команда для вдосконалення та розвитку архітектури високого рівня, а також низького).
Мерф

2
@Murph: Так, завантажувальна проблема - це проблема. Вам потрібно вибрати щонайменше мову програмування. Нефункціональні вимоги, такі як масштабованість та продуктивність, дуже впливають на архітектуру і повинні враховувати якнайшвидше. Але крім цього мені подобається починати якомога простіше, а потім поступово і ітеративно додавати робочі функції (ягні) по шматочку. Зосередьтеся на рефакторингу, щоб зберегти чисту базу коду та витягти речі, поки не з’явиться дизайн.
Мартін Вікман

1
Причина, чому Scrum є ітераційним, полягає в тому, що сама природа програмного забезпечення означає, що ми ніколи не отримуємо це правильно з першого разу. У багатьох випадках зацікавлені сторони не знають, чого вони насправді хочуть, поки у них є щось перед собою. Що краще: витратити години на створення дизайну функції (яку потрібно буде доопрацювати або, швидше за все, викинути, коли гума потрапить на тротуар) та донести цей дизайн до виконавця; або витратити ці години на реалізацію першого проходження функції та вдосконалення її за допомогою тестів та рефакторингу.
Майкл Браун

3
До речі, ви ніколи не усвідомлите справжнє значення TDD, поки у вас не буде тест НЕОБХІДНО червоніти. Це був мій великий "ага" момент з TDD. Дивлячись на тест, який щойно став червоним, я зрозумів, що без тесту помилку було б дуже важко відстежити після того, як код опинився в руках тестерів. Якщо вам потрібно переглянути архітектуру високого рівня зверху вниз, існує безліч інструментів, які можуть генерувати діаграми послідовності та класу з вашого коду. Використовуйте їх для отримання звіту про знімки та розпорядження ними, оскільки це не є законом.
Майкл Браун

2

Scrum - методологія управління проектами, а не методологія розробки програмного забезпечення. Scrum зазвичай використовується в поєднанні з методологією Agile. У цьому криється ваша відповідь.


4
Scrum - це гнучка методологія, і вона орієнтована на команду розробників та власників акцій та отримує ітеративні поставки робочого коду. Управління проектами згори вниз та Scrum - це як нафта та вода.
Майкл Браун

1
@ Майк погодився, але я завжди вважав, що Scrum - це гнучка методологія керівника проекту, тоді як Extreme Programming - це гнучка методологія розробника. Це означає, що я бачив, як Scrum застосовувався до багатьох інших проектів, крім програмного забезпечення. Цікаво, що Вікіпедія надає таке визначення Scrum: Scrum - це ітеративна, поступова методологія управління проектами, яка часто спостерігається при спритній розробці програмного забезпечення, типу програмної інженерії: en.wikipedia.org/wiki/Scrum_(development) .
ahsteele

2
Щойно зрозумів, що я випадково спростував ваш коментар ... не мав на увазі. Вони не дозволять мені зняти це голосування, якщо ви не зробите незначну редакцію. Я ніколи раніше не бачив, щоб Scrum описувався як метод управління проектами. Цікаво. Зважаючи на це, я думаю, що очікувати, що Scrum працюватиме на програмне забезпечення без застосування TDD, тому багато спроб "зробити спритний" провалюються.
Майкл Браун

1

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

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


1
Я б не сказав, що вимоги постійно змінюються. Інфакт під час спринту вимоги є статичними та незмінними. Після кожного спринту пріоритет вимог можна переоцінювати. Купіть загальну мету не зміниться.
Мартін Йорк

@Martin хороший момент. Я думаю, я повинен перефразувати, що вони змінюються від scrum до scrum.
Вадим

1

Scrum - ітеративна та додаткова модель, заснована на гнучких значеннях . Це означає, що у вас немає окремої фази проектування. Ідея полягає в тому, що вам слід постійно займатися дизайном, так само як ви постійно займаєтесь аналізом, реалізацією, тестуванням та інтеграцією протягом всього проекту.

Вам потрібно трохи планувати, щоб це працювало. Введіть зустріч з планування спринту , де команда оцінює завдання на спринт, що випереджає. Більшість людей не усвідомлюють, що це не лише зустріч з оцінкою, а й проектні зусилля. Наприклад, завданням може бути "Додати код нової моделі автомобіля". Ви ще не можете цього оцінити, вам потрібно знати трохи більше. Тож команда обговорює дизайн та придумує широке рішення ("Автоклас підкласу?") І додає це як нагадування до завдання. Ви рідко потребуєте більшої формальності, ніж це. Тепер у вас є ідея, як вирішити проблему. У вас ще немає всіх деталей, і це нормально, ви знаєте достатньо дизайну, щоб можна було зробити зручну оцінку. Без необхідності створювати будь-які діаграми взагалі (в цей момент).

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

Зауважте, що всі діаграми створюються після фактичної реалізації. Це відповідає «робочому програмному забезпеченню над всеосяжною документацією» та точно вчасно розробленим дизайном.

І так, читабельний код - це безумовно документація.


1

Загальна архітектура проекту та дизайн на високому рівні виконали б поза командами scrum, коли власники проекту створюють історії.

Потрібно вистачити загального дизайну, записаного в будь-якій формі, щоб допомогти побачити взаємозв’язок між історіями та очікуваннями замовника.

Частина дизайну, необхідного для кожної історії, буде виконана при плануванні та переговорах з власником продукту під час планування.

Основна частина дизайнерських зусиль для розповіді буде зроблена у спринті.

Якщо історія недостатньо визначена для оцінки, то в поточному спринті може бути відкладено часовий вік, щоб виконати достатньо проектних робіт, щоб відповідна історія могла бути створена для подальшого спринту.


0

Наскільки я розумію, ви робите дизайн більш високого рівня з вимогами, які ви збираєтеся на початку проекту. Ви добре документуєте цей дизайн.

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

Ну ось так мені це все-таки пояснили п'ять хвилин тому ...


0

Сьогодні існує розкол всередині спільноти Eclipse між традиційними інструментами UML, орієнтованими на MDD, в яких модель керує кодом / розробкою, і Omondo, який вважає, що ітерації повинні керувати процесом розробки та, звичайно, не лише моделлю.

Я погоджуюся з ними, оскільки MDD - це лайно, а UML - це справді відмінний спосіб, оскільки стандартизується для спілкування з іншими членами команди. alt текст

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.