Швидке прототипування та рефакторинг


9

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

Тоді процес мого розвитку проходить так:

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

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

Чи є це частиною розвитку aglie? Як ви маєте справу з невідомим місцевістю в розробці програмного забезпечення?


Це згадується в Чистому кодексі 2 як засобі ітеративного розвитку ... чи вірите ви в цю книгу чи ні.
Ріг

Відповіді:


11

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

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

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

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

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

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


2

Чи є це частиною розвитку aglie? Як ви маєте справу з невідомим місцевістю в розробці програмного забезпечення?

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

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

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


2

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

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

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

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

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

Навіть під час виконання спритного проекту ми створюємо документацію:

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

Ви бачите, що в нашому спритному процесі є невеликий водоспад.

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

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


1

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

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