Rapid prototyping e refactoring

9

A volte quando avvio un piccolo progetto (come un'app per Android), non so quale approccio si risolverà alla fine, e cerco solo un approccio e provarlo. Ma se non ho mai usato questo approccio prima (per una specie di applicazione che non ho mai programmato prima) è come calpestare un terreno sconosciuto. Non so quali librerie usare (forse devo provare diverse librerie) e ci sono così tanti sconsiderati (come: come ottenere dati audio grezzi in Android)

Quindi il mio processo di sviluppo va così:

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

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

Questa parte dello sviluppo degli aglie? Come gestisci il terreno sconosciuto nello sviluppo del software?

    
posta Puckl 14.10.2012 - 01:34
fonte

4 risposte

11

Questo non ha nulla a che fare con l'agile, ma la gente pensa che lo faccia perché è quello che pensano sia Agile; sviluppo di pollo senza testa in una comune hippy.

Quello che stai facendo è valutare le tecnologie perché attualmente non hai abbastanza esperienza per formulare una sentenza. Questo è buono e non finisce mai perché nuove librerie, framework, linguaggi e piattaforme appaiono quasi quotidianamente.

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

Le abilità che tendono ad essere associate con Agile che aiutano qui implicano la creazione di 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 SOLID (Acronimo), ti troverai in una buona posizione in seguito per sostituire una libreria se hai fatto la scelta sbagliata, o, come spesso accade, sei troppo grande per la tua scelta.

È positivo che tu faccia questo tipo di domande. Ci sono troppi sviluppatori che per vari motivi non rischiano di apparire "ignoranti" prendendo tempo per selezionare la tecnologia corretta. Commettere errori all'inizio del progetto non in ritardo La sperimentazione è la chiave non è uno spreco, quindi penso che stai andando nel modo giusto.

    
risposta data 14.10.2012 - 01:54
fonte
2

Is this part of aglie development? How do you deal with unknown terrain in software development?

Quello che hai descritto non è Agile. Lo sviluppo Agile è più sulla promozione della pianificazione adattiva, dello sviluppo evolutivo e della consegna con un approccio iterativo time-box. Agile incoraggia una risposta rapida e flessibile al cambiamento. Pertanto, il ri-factoring del tuo codice man mano che i progressi di sviluppo hanno parti di metodologia Agile in esso.

Affrontare parte non conosciuta del progetto inizia con la raccolta dei requisiti noti, con un design di alto livello. Una volta che hai a portata di mano la maggior parte dei componenti, puoi cercare la soluzione giusta. Detto questo, la creazione di una piccola prova di concetto prima dello sviluppo completo è l'approccio seguito dal nostro team.

Esiste un principio di sviluppo del software chiamato SOLID . Nella mia esperienza, applicarli su problemi / problemi è sempre un passo avanti per migliorare la base di codice del tuo progetto.

    
risposta data 14.10.2012 - 05:24
fonte
2

Dipende dal progetto, se lavori da solo su un piccolo progetto, potrebbe essere perfettamente logico eseguire la tua ricerca e indagine tecnologica come parte dello sviluppo. E anche se non fa parte di Agile, ovviamente è possibile utilizzare una metodologia Agile per aggiungere un controllo a questo. Tuttavia, ciò rende molto difficile prevedere il processo o il time box. Potrebbe andare bene, anche più velocemente, se lavori da solo su un piccolo progetto che è interamente tuo, lascia che le tue esigenze si spieghino man mano che le impari. Usa buoni principi lungo la strada, ed essere coerente e non dovresti aver bisogno di ridimensionare troppo.

Al lavoro usiamo metodi Kanban, Scrum e più tradizionali a cascata. Dipende dal progetto, trovo che gli sviluppi complessi con requisiti ben definiti non siano i più adatti per l'agilità, molti però non saranno d'accordo.

Prima di iniziare a lavorare anche su un progetto agile (tutto tranne il più semplice), creiamo dei documenti. Abbiamo un mock up (se sei focalizzato), una serie di requisiti e una specifica funzionale.

Si chiederà allo sviluppo di creare le specifiche tecniche dalle specifiche funzionali, e durante questo processo specificheremo la tecnologia e svolgiamo qualsiasi ricerca iniziale di cui abbiamo bisogno. Questo processo mi sembra così importante, in quanto offre l'opportunità di vedere lacune nei requisiti / specifiche funzionali e offre le grandi decisioni tecnologiche in anticipo alle persone con esperienza e conoscenza del sistema per prendere tali decisioni.

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

Anche quando si esegue un progetto agile creiamo la documentazione:

  • Tutta la documentazione ha un costo.
  • Lo sviluppo contro i requisiti di alto livello in movimento e mal definiti ha un costo.
  • Il corretto equilibrio rispetto a quanto sopra dipende dal tuo progetto, dalla cultura e dalle persone.
  • Documentiamo Just in time, i documenti non sono aggiornati.
  • Documentiamo abbastanza a sufficienza / appena sufficiente.
  • Non conserviamo o aggiorniamo questi documenti, non ci impegniamo molto. Sono piccoli. Ci aspettiamo di buttarli via.
  • Appianiamo le grandi incognite come le decisioni relative alle tecnologie, i requisiti nebulosi e l'architettura all'avanguardia.
  • Sappiamo cosa stiamo sviluppando prima di iniziare.
  • Crediamo che gli sviluppatori debbano prendere decisioni informate sulla documentazione e discutere di eventuali problemi.
  • Apprezziamo la comunicazione sulla documentazione, in quanto tale ci aspettiamo che tutti i soggetti coinvolti comunichino spesso.
  • Documentiamo i sistemi (panoramica) dopo lo sviluppo, non durante, non prima.

Si vede 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, e poi quando hai questo concetto dei requisiti di alto livello, vai avanti e sviluppa in modo iterativo agile, ma considera buoni principi e coerenza come si va e sarà necessario ri-fattorizzare meno, più ri-fattore come si va.

Ma in generale, se c'è un costo reale coinvolto (non un hobby), sai cosa stai sviluppando prima di scrivere il codice, ma non sprecare troppo tempo a scrivere documentazione che diventerà ridondante velocemente mentre cambierai idea e dovresti cambiare idea durante lo sviluppo man mano che diventi più informato. E il tuo progetto potrebbe cambiare radicalmente, ma partire da una base ben definita e ben definita.

    
risposta data 14.10.2012 - 11:45
fonte
1

Questo è all'incirca il modo in cui inizio nuovi progetti e ha funzionato abbastanza bene, assumendo che stiamo parlando di progetti piccoli. Per esempio, non andrei su questa strada se stessimo scrivendo un ORM o qualcosa del genere. Occasionalmente ricorro a ricerche più formali quando sono davvero fuori di testa. Ma per la maggior parte ho appena iniziato a scrivere codice e vedere cosa succede. Devi essere preparato a buttare via molto codice quando lo fai comunque.

    
risposta data 15.10.2012 - 21:03
fonte

Leggi altre domande sui tag