Prototipazione e refactoring rapidi


9

A volte quando avvio un piccolo progetto (come un'app Android), non so quale approccio funzionerà alla fine, e vado solo per un approccio e provo. Ma se non ho mai usato questo approccio prima (per una sorta di applicazione che non avevo mai programmato prima) è come entrare in un terreno sconosciuto. Non so quali librerie usare (forse dovrei provare diverse librerie) e ci sono così tanti inediti (come: come ottenere dati audio grezzi in Android)

Quindi il mio processo di sviluppo procede in questo modo:

  • Scrivi un pezzo di codice per vedere se l'approccio ha una possibilità. (Più l'approccio è incerto, più il codice diventa brutto)
  • Se funziona, rifletti molto fino a quando non è bello

Penso che potrebbe essere una perdita di tempo se a questo punto pianificassi in dettaglio la progettazione del mio software, sarebbe come pianificare un viaggio senza una mappa.

Fa parte dello sviluppo degli aglie? Come gestite i terreni sconosciuti nello sviluppo del software?


Questo è menzionato in Clean Code 2 come mezzo di sviluppo iterativo ... se credi in quel libro o no dipende da te.
Rig

Risposte:


11

Ciò non ha nulla a che fare con l'agile, ma le persone pensano che lo faccia perché è quello che pensano che sia Agile; sviluppo di pollo senza testa in un comune hippy.

Quello che stai facendo è valutare le tecnologie perché al momento non hai abbastanza esperienza per formulare un giudizio. Questo è buono e non finisce mai perché nuove librerie, framework, lingue e piattaforme appaiono quasi quotidianamente.

Il modo in cui gestisci l'ignoto è davvero una buona domanda e si tratta di ricercare le alternative, valutarle e quindi selezionarne una.

Le competenze che tendono ad associarsi ad Agile che aiutano qui implicano la creazione di un codice che sia facile e sicuro da refactoring. TDD è un buon esempio. Ti incoraggia a considerare il tuo sviluppo in termini di risultati. "Questo codice dovrebbe produrre questo risultato" che focalizza la mente e riduce la quantità di codice che non contribuisce alla risoluzione dell'obiettivo.

Se scrivi il codice seguendo i principi del SOLID (Acronimo), in seguito sarai in una buona posizione per sostituire una libreria se hai fatto la scelta sbagliata o, come spesso accade, hai superato la tua scelta.

È bene che tu faccia questo tipo di domanda. Ci sono troppi sviluppatori che per vari motivi non rischieranno di apparire "ignoranti" prendendo il tempo per selezionare la tecnologia corretta. Fare errori all'inizio del progetto non in ritardo. La sperimentazione è la chiave non uno spreco, quindi penso che tu la stia affrontando nel modo giusto.


2

Fa parte dello sviluppo degli aglie? Come gestite i terreni sconosciuti nello sviluppo del software?

Quello che hai descritto non è Agile. Lo sviluppo Agile riguarda maggiormente la pianificazione adattiva, lo sviluppo evolutivo e la consegna con un approccio iterativo time-boxed. Agile incoraggia una risposta rapida e flessibile ai cambiamenti. Pertanto, il re-factoring del codice man mano che i progressi dello sviluppo contengono elementi della metodologia Agile.

La gestione di un pezzo sconosciuto del progetto inizia con la raccolta dei requisiti noti, con un design di alto livello. Una volta che avrai a portata di mano la maggior parte dei componenti, puoi cercare la soluzione giusta. Detto questo, la costruzione di piccole prove di concetto prima dello sviluppo completo è l'approccio seguito dal nostro team.

Esistono principi di sviluppo software chiamati SOLID . Nella mia esperienza, applicarli a problemi / problemi è sempre un passo avanti nel migliorare la base di codice del progetto.


2

Dipende dal progetto, se stai lavorando da solo su un piccolo progetto, potrebbe avere perfettamente senso svolgere la tua ricerca e indagine tecnologica come parte dello sviluppo. E sebbene non faccia parte di Agile, ovviamente una metodologia Agile potrebbe essere usata per aggiungere un certo controllo a questo. Tuttavia, ciò rende il processo molto difficile da prevedere / o time box. Potrebbe andare bene, anche più veloce, se lavori da solo su un piccolo progetto interamente tuo, lascia che i tuoi requisiti si svolgano mentre li impari. Usa i buoni principi lungo il cammino, sii coerente e non dovresti ricorrere a un nuovo fattore.

Al lavoro utilizziamo Kanban, Scrum e approcci a cascata più tradizionali. Dipende dal progetto, trovo che sviluppi complessi con requisiti iniziali ben definiti non siano più adatti all'agile, molti però non saranno d'accordo.

Prima di iniziare a lavorare anche su un progetto agile (tutto tranne il più semplice), creiamo della documentazione. Abbiamo un modello (se focalizzato), una serie di requisiti e una specifica funzionale.

Lo sviluppo verrà chiesto di creare le specifiche tecniche dalle specifiche funzionali e durante questo processo specificheremo la tecnologia ed eseguiremo tutte le ricerche iniziali di cui abbiamo bisogno. Questo processo mi sembra così importante, in quanto offre l'opportunità di vedere le lacune nei requisiti / specifiche funzionali - e dà le grandi decisioni tecnologiche davanti alle persone con l'esperienza e la conoscenza del sistema per prendere tali decisioni.

La cosa significativa, tuttavia, è che le specifiche funzionali potrebbero essere un elenco di punti elenco e le specifiche tecniche saranno di solito un modello, con alcuni punti elenco e direttori tecnologici, forse solo 3 o 4 pagine in alcuni casi.

Anche durante l'esecuzione di un progetto agile creiamo documentazione:

  • Tutta la documentazione ha un costo.
  • Lo sviluppo contro lo spostamento e la definizione errata di requisiti di alto livello ha un costo.
  • Il corretto equilibrio con quanto sopra dipende dal tuo progetto, dalla cultura e dalle persone.
  • Documentiamo Just in time, i documenti non sono aggiornati.
  • Documentiamo a malapena / quanto basta.
  • Non conserviamo o aggiorniamo questi documenti, non ci impegniamo molto. Sono piccoli. Ci aspettiamo di buttarli via.
  • Risolviamo le grandi incognite come decisioni tecnologiche, requisiti confusi e architettura in prima fila.
  • Sappiamo cosa stiamo sviluppando prima di iniziare.
  • Confidiamo che gli sviluppatori prendano decisioni informate sulla documentazione e discutano di eventuali problemi.
  • Apprezziamo la comunicazione sulla documentazione, in quanto tale ci aspettiamo che tutte le persone coinvolte comunichino spesso.
  • Documentiamo i sistemi (panoramica) dopo lo sviluppo, non durante, non prima.

Vedi che c'è una piccola cascata nel nostro processo agile.

Se lavori da solo, crea un modello iniziale (diagramma!) E gioca con e scegli la tecnologia, quindi quando hai questo concetto di requisiti di alto livello, corri avanti e sviluppi in modo agile iterativo, ma considera buoni principi e coerenza man mano che procedi e dovrai ripensare di meno, più ripensare man mano che procedi.

Ma in generale, se c'è un costo reale (non un hobby), sai cosa stai sviluppando prima di scrivere il codice, ma non perdere troppo tempo a scrivere documentazione che diventerà ridondante in fretta poiché cambierai idea e dovresti cambia idea durante lo sviluppo man mano che ti informi meglio. E il tuo progetto potrebbe cambiare enormemente rotta, ma iniziare da una base valida e ben definita.


1

Questo è approssimativamente il modo in cui inizio nuovi progetti e ha funzionato abbastanza bene, supponendo che stiamo parlando di progetti di piccole dimensioni. Ad esempio, non seguirei questa strada se stessi scrivendo un ORM o qualcosa del genere. Occasionalmente ricorrere a ricerche più formali quando sono davvero sopra la mia testa. Ma per la maggior parte ho appena iniziato a scrivere codice e vedere cosa succede. Tuttavia, devi essere pronto a buttare via molto codice quando lo fai.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.