Як Agile можна застосувати до програм, що включають складну обробку?


12

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

Для цього типу додатків зв’язок між історіями користувачів (вимогами) та завданнями розвитку здебільшого простий: Просто розділіть історію користувача на кілька завдань.

Але є ще один тип додатків, коли більша частина коду має справу зі складною обробкою, яка безпосередньо не видна користувачеві. Прикладами можуть бути:

  • Компілятори
  • Системи аналізу зображень автомобілів, що керують самостійно
  • Системи моделювання потоку рідини

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


6
Не є прихильником, але я припускаю, що це тому, що питання ґрунтується на помилковій передумові. ІМО складні системи ще більш підходить для розробки Agile стилю, в силу того факту , що вони є більш складними. Чим складніша система, тим більше шансів на виникнення вимог. Agile SwDev був створений для кращого задоволення виникаючих вимог.
RubberDuck

4
@RubberDuck: "Я припускаю, що це тому, що питання ґрунтується на хибній передумові.": IMO, це мотивує відповідь, в якій пояснюється помилкова передумова, а не зворотне.
Джорджіо

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

2
"Більшість літератури про рухливу літературу, схоже, є упередженою щодо бізнес-додатків типу CRUD" - І більша частина літератури на Java схоже схильна до друку рядка "Hello World" на консолі (або альтернативного обчислення n-го числа Фібоначчі). Це не означає, що це єдине, для чого Java хороша. Причина однакова в обох випадках: важко пояснити реалістичні приклади в публікації блогу чи навчальному посібнику. [Примітка: це гіперболічний коментар, який намагається проілюструвати основу для помилкових передумов.]
Jörg W Mittag

1
Agile не вимагає завдань та розповідей користувачів. Ви можете використовувати будь-яку бажану форму. Вся справа в гнучкості.
Френк Хілеман

Відповіді:


9

Це виявилося довше, ніж я планував (це почалося як коментар), але я сподіваюся, що додаткова довжина / деталі корисні, і ви вважаєте їх виправданими.

Agile не характерний для програм CRUD

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

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

Історії користувачів! = Вимоги

Для цього типу додатків зв’язок між історіями користувачів (вимогами) та завданнями розвитку здебільшого простий: Просто розділіть історію користувача на кілька завдань.

Історія користувача не те саме, що вимога. Правда, може бути певне перекриття залежно від того, наскільки вимога "високого рівня", але, як правило, не однаково. У мене складається враження, що ти стикаєшся з тим самим підводним каменем, що впало багато моїх колишніх менеджерів: думати про історії користувачів просто як синоніми "вимог", що схоже на те, коли користувачі SVN намагаються перейти на Git, але тримай мислення з точки зору СВН. (Потім вони стикаються з проблемами через погані початкові припущення.)

ІМХО, ключова відмінність між вимогами та історіями користувачів полягає в тому, що вимоги детально визначають, як повинні поводитися певні компоненти системи; Це специфікації, які включають входи, виходи, припущення / передумови, можливі винятки, які виникають тощо. Вони зосереджені на тому, що робить система .

ОТОН, розповіді користувачів зосереджуються на очікуваному результаті для кінцевого споживача, не намагаючись створити детальну специфікацію поведінки для компонентів системи. Вони зосереджуються на очікуваному користуванні .

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

Приклад

Я приблизно згадую США, над яким працювали роки тому, коли користувачам потрібно було призначити тестові випадки, щоб усі в колективі знали, над якими ТС вони працюють, щоб уникнути дублювання зусиль; інтерфейс користувача був (n внутрішнім) веб-додатком. Користувач бачив лише кнопку, але історія була розділена на кілька завдань, які включали деякі деталі технічної реалізації тощо.

Видимість користувача

Але є ще один тип додатків, коли більша частина коду має справу зі складною обробкою, яка безпосередньо не видна користувачеві.

Чи можна зробити його видимим для користувача певним чином?

Розглянемо GPS. Якщо ви пропустили свою чергу, ви не побачите фактичний процес перерахунку маршруту, але користувач отримує корисні відгуки (наприклад, "Перерахунок ...").

Компілятори можуть відображати попередження або помилки або включати нові налаштування / параметри в графічний інтерфейс, щоб користувачі бачили, що додано щось нове. Я думаю, що користувачі компіляторів будуть програмістами, правда? Хіба вони не бачать підтримку нового стандарту?

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

Аналіз зображень на автомобілі можна сформулювати таким чином, що дає змогу користувачеві знати, що шанси потрапити в автомобільну катастрофу знижені. Наприклад:

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

Щоб США захоплювали на високому рівні речі, які вам зазвичай потрібно було б вказати, використовуючи поєднання функціональних та нефункціональних вимог - включаючи безпеку, безпеку тощо

Однак вимога може бути детальніше про систему; наприклад:

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

Для мене це може бути легким завданням, описаним вище, про історію користувача, яку я назвав: Знизити толерантність до функцій,A.abc а потім включити в неї інші відповідні деталі.

Для системи моделювання рідини ви можете навіть мати панель прогресу, яка надає відгуки про фонові завдання, які виконує система, якщо це має сенс. (Завжди є спосіб поінформувати користувача про щось, хоча, можливо, ви хочете, щоб не спам.)

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

Зв’язок між історіями та завданнями

Тут може бути по-справжньому складно співвідносити завдання та розповіді користувачів.

Наш підхід полягав у тому, щоб розповіді користувачів зосереджувались на тому, який запит був, чому він був зроблений та які речі повинні бути правдивими, щоб вважати США "виконаними". , Як завжди залишилося з США і зліва розробника (ів).

Розробники (і) розбили б проблему, описану в США, на набір завдань, над якими вони працюватимуть.

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

Залежно від того, що мені потрібно було зробити, я іноді використовував AJAX для показу простої "завантаження ..." анімації / gif, щоб користувач знав, що потрібно трохи почекати, щоб щось ще завершити, не отримуючи неправильного враження. Іноді це було так просто, як це. Завдання для цього було б доречним.

Різна парадигма, практика і досвід

Чи є прийоми подолання цього питання чи це просто щось, що ми маємо прийняти і зробити це найкращим?

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

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

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

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

Навчання зі своїх спринтів - ретроспектив

Що я не можу наголосити достатньо - це ретроспектива між Scrum Master та Developers в кінці кожного спринту. Саме там вони чесно / прозоро обговорюють речі, які "пройшли добре" або "не пішли добре", і які можливі зміни будуть впроваджені для наступного спринту для вирішення питань "не пішли добре" .

Це дозволило нам адаптуватися та навіть вчитися на досвіді один одного, і до того, як ми це зрозуміли, ми значно покращилися, виміряні загальною послідовністю швидкості нашої команди.


"Історії користувачів! = Вимоги": Я не хотів сказати, що ці два є синонімами. Не кожна вимога є історією користувача. Але я думаю, що всі історії користувачів - це вимоги. Я розглядаю вимоги як ієрархічну структуру, де розповіді користувачів - це один конкретний рівень деталізації. Чи погодились би ви?
Френк Пуффер

@FrankPuffer Я думаю, що перегляд історій користувачів так, ніби вони різного рівня в ієрархії вимог, це в основному змішування різних понять. З боку Agile ієрархія більше нагадує: теми >> Епоси >> Особливості >> Історії користувачів >> Завдання . Вимоги зазвичай поділяються на функціональні та нефункціональні вимоги у більш традиційному підході до водоспаду, але я не стикався з фактичною ієрархією; сказавши, я не здивуюся, якби хтось рекурсивно розбив вимогу на менші "під" вимоги. У будь-якому випадку ви змішуєте різні поняття.
code_dredd

Системи управління вимогами, такі як PTC Integrity, розглядають вимоги як ієрархію. Це може бути перевагою при зіставленні вимог до документа специфікації.
Френк Пуффер

@FrankPuffer Так, саме тому я сказав, що не здивуюсь. Це сказало, мені цікаво, що моя відповідь вам щось прояснила. Чи була корисна аналогія SVN vs Git? (Передбачається, що ви знайомі з обома системами, що здавалося розумним в контексті розробки програмного забезпечення.)
code_dredd

Гаразд, я неправильно прочитав "не", як "хотів би". І так, я вважаю вашу відповідь дуже корисною і, ймовірно, прийму її. Мені, мабуть, просто потрібен певний час, щоб звикнути до думки про те, що історії користувачів не розглядають як вимоги.
Френк Пуффер

4

Агільні принципи, безумовно, можуть бути застосовані в цих випадках. Як?

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

Вам не доведеться їсти всього слона за один шматочок. Agile просто просить показати вам, що ви очистили тарілку перед наступною подачею слона.


І все-таки я думаю, що залишиться одна або кілька історій користувачів, які потребують безлічі так званих базових функціональних можливостей. Вони часто не впишуться в єдиний спринт. Як з цим слід поводитися?
Френк Пуффер

1
Ви вимірюєте успішність за допомогою запущених програм, які клієнти можуть тестувати, бачити чи торкатися. Якщо це так, подаруйте їм іграшку, яка таким чином породжує відчуття прогресу. Наприклад, ви, мабуть, не можете випустити автомобіль, що керує самогубством, у першому спринті, але ви можете скласти демонстрацію того, як ваш альго реконструює людей. Пізніше, як це відтворює сигнали і тварин. Пізніше, як він вимірює відстані, розміри і т. Д. ... Автомобіль, що керує автомобілем, знаходиться далеко, далеко у віддаленому спринті, хто знає, чи відбудеться це коли-небудь.
Лаїв

2
@Laiv: Це було б добре, але я не впевнений, чи спрацює це. У parctice після декількох перших спринтів програмне забезпечення не зможе зробити нічого, до чого може звернутися клієнт. У вас буде технічний прогрес, але буде важко, якщо не неможливо, донести це до замовника.
Френк Пуффер

2
Чому? Тому що це було написано на камені хтось із ваших проектів? Я очікую, що Agile адаптується до моїх потреб, а не інакше. Якщо я скажу, що я можу навчити вас кататись на ковзанах за 4 тижні, а одного разу на 5-му ви все ще не зможете стояти, чи це означає, що ви не вчитеся кататися на ковзанах? Або просто це займе у вас трохи більше часу? Agile маніфест не був написаний на камені, а правила Scrum - це Заповіді Тренду.
Лаїв

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

1

Я вважаю, що люди, які суворо дотримуються історій користувачів, будуть або брати участь у дуже нерозумному вправі придумати далеко обдумані способи, в яких технічні зміни заднього кінця впливають на користувача (невідомо для користувача, звичайно, тому що вони просто наївні Користувач, і ви говорите про складні зміни вашої трубопроводу для аналізу даних або щось подібне), або вони просто втратять повну втрату, "як ми можемо організувати цю роботу!?!"

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

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

tl; dr не дозволяйте scrumnazi зробити ваше життя надзвичайно складним просто тому, що вони занадто багато площі для адаптації. Адаптивність - це головне поняття спритного. Суворе дотримання Scrum або Agile зазвичай летить в обличчя або прагматизм і практичність (що насправді працює найкраще).


Я все за те, щоб бути гнучким, але, чесно кажучи, користувач не особливо дбає про технічні деталі, доки їхні історії будуть задоволені. Щоб мати хороші вимоги, вам не потрібно бути "строгими спритними"; під хорошими вимогами я маю на увазі вимоги, які супроводжуються тестом на прийняття, що однозначно доводить, що ця вимога задоволена. Люди, які "займаються дуже дурними вправами", очевидно, роблять це неправильно, але це не означає, що вони слідують деякому поняттю "суворої сумови".
Роберт Харві

@RobertHarvey Я погоджуюся, що технічні деталі для користувача не мають ніякого значення, але моя думка полягає в тому, що артефакти, що містять історії користувачів, мають більш широку мету, ніж просто повідомляти про те, як справи працюють для користувача (або вони повинні принаймні). Як можна застосовувати вимоги, пов'язані з архітектурою, розширюваністю, продуктивністю тощо, якщо вони пишуть суто користувацькі історії? Прийняття чистого "підходу користувача" підштовхує розробників писати код низької якості. І це не користувачі, які читають "історії користувачів", це розробники і qa, нерозумно свідомо виключати відповідну інформацію, оскільки це технічна.
evanmcdonnal

0

Я думаю, що проблема полягає у наданні розповідям користувачів сенсу, якого вони не мають. Scrum використовує термін PBI або Product Backlog Item, що, на мою думку, нескінченно краще. PBIS буде часто слідувати формату розповідь користувача, наприклад, ви можете мати PBI як «Абоненти повинні мати можливість переглядати свої підписні дані», але ви також можете так само легко мати PBI як «Створити процедуру, що зберігається , щоб отримати детальну інформацію передплатника ".

Історії користувачів - це інструмент . Вони допомагають вам сформувати описи функцій та вимоги, засновані на тому, що ви ставите себе до взуття користувача. Але, так як гайковий ключ марний, коли вам потрібно повісити картину, бувають випадки, коли вам може не знадобитися історія користувача.

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


1
Я не згоден з цим, за винятком дуже дивних і рідкісних випадків. У Scrum HOW - це компетенція команди розробників, а не власника продукту. Але власник продукту повинен нести відповідальність за ІПВ. Таким чином, PBI типу "створити збережену процедуру" відбирає у команди розробників право вибору HOW. PBI, незалежно від того, користувацька історія чи ні, повинні пояснювати, яку ділову цінність має PBI. Створення збереженої процедури не має значення для бізнесу, це деталізація впровадження.
RibaldEddie

Це не суть. Це був лише приклад. Ви можете просто змінити "збережену процедуру" на щось загальне на зразок "спосіб". Справа в тому, що це не обов'язково має бути історією користувача.
Кріс Пратт

вся суть прикладу - бути зразком. Якщо ваш приклад "не суть", то в чому полягає приклад ??
RibaldEddie

-3

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

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

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


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

@FrankPuffer Для деяких із перерахованих вами систем, наприклад, для самостійного керування автомобілями, якщо експерт покидає команду, у якої ви перебуваєте в біді. Період. Хоча, мабуть, не так, що кодування має бути централізованим, також нерозумно вважати адекватне "поширення знань", щоб дозволити заміни експерта в будь-який досить короткий часовий масштаб. Це люди, які витратили понад десятиліття на дослідження проблеми і, ймовірно, знаходяться поблизу вершини своєї галузі. Можливо, вам буде потрібно кілька таких людей з різними наборами навичок. Такі проекти за своєю суттю ризиковані.
Дерек Елкінс покинув SE
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.