Перезапис програмного забезпечення з використанням методів Agile


13

Припустимо, вам доведеться переписати цілу програму за допомогою методів Agile, як би це зробити?

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

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


4
Переписування всієї програми ніколи не є хорошою ідеєю. Див. Перезапис Netscape . Багато чого втрачається при переписуванні всієї заяви. Знання кодифікуються в першоджерелі, і їх доведеться повторно розкрити у перезаписі. Легко прийти до коду та заявити "Чому вони зробили це так?" Я можу це зробити краще і менше рядків! Значну частину часу, потрапляючи в код, розробник розуміє, чому раніше це було написано таким чином. Code Simplicity розмовляє з
Чак Конвей

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

Ви не думаєте, що нові вимоги будуть створені протягом усього цього процесу відновлення?
JeffO

перехресне повідомлення від SO: stackoverflow.com/questions/13168314/…
gnat

Чи не було б переписання всієї програми дуже непридатною?
Пітер Б

Відповіді:


15

Розбийте його на епоси високого рівня. Візьміть кожну функціональну область програми, покроково.

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

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

Після того, як ви випустили один компонент у виробництво, перейдіть до наступного.


Що сказав @pdr
KodeKreachor

3
Під час періодів випуску не виробництв, додаток, навіть якщо він знаходиться у вітрині, має відчуття для використання та повноти, оскільки всі вимоги відомі наперед та, швидше за все, є важливим доменом / BI в команді розробників.
JustinC

10

ми щойно пережили такий досвід (мене, як власника продукту scrum). Нам знадобилося два роки, щоб дістатись до чогось звільного. Але все-таки спритний приніс нам багато користі.

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

Тоді дійсно, ви починаєте із зворотного журналу, який охоплює всі відповідні випадки використання існуючого продукту. Але будь ласка, не підходьте до цього як до написання специфікацій. Це було б занадто багато деталей. Він повинен бути повним (інакше планувати випуск не можна). І це не повинно бути надто детальним (інакше ви пишете специфікації вперед). Ось як ми підійшли до цього:

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

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

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

  • коли у вас 20-50 епосів, попросіть команду оцінити їх.

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

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


4
A total rewrite is by nature not agile at all. You should instead consider refactoring the existing product piece by piece.Правдивішого слова ніколи не говорили.
maple_shaft

4

Відпустіть зараз, якщо зможете

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

Рим (і Agile) не були побудовані за день

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

Будьте завантажувачем повторного використання

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

Чому випускати достроково і часто?

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

Попередній випуск неприродний

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

Не критикуйте попередню команду

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

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

Ви забули ще одне. Стара команда ставила очікування клієнтів. Ви повинні скинути їх, зробивши це набагато краще, або робити речі точно так само. Скільки натискає Windows 8 за відсутність кнопки «Пуск», але iOS та Android ніколи не робили цього і ніхто не думав згадувати про це.
mattnz

2

Запропоновані коментарями @Chuck та посиланнями на Netscape, по суті кажучи, не переписуйте, а вагомі відповіді, що підтверджують, що він OP не запитує, чи варто. - По-справжньому спритний цикл розробки програмного забезпечення виключає перезапис. Переписування майже завжди порушує багато принципів Agile. Використовуючи поточне програмне забезпечення як базовий рядок, ці принципи Agile (від Agile Manifesto ) не можуть бути задоволені перезаписом.

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

"Припустимо, вам доведеться переписати цілу програму за допомогою методів Agile. Як би це зробити?"

Питання ґрунтується на помилковій передумові - про те, що перезапис можна вважати спритним.


2

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

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

Настільні програми можуть бути складнішими, але це часто буде можливо.

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

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

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


1

Agile каже, що ми повинні випускати достроково і часто, але це не має сенсу випускати до завершення перезапису.

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

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

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

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