Come gestire un metodo non ancora implementato che verrà svolto da un co-programmatore?

45

Questa è una domanda su come lavorare in team.

Recentemente ho lavorato al mio primo progetto di programmazione più ampio (~ 80 classi, Java) con un team di 6 persone, sebbene solo 4 di noi stessero lavorando costantemente al codice. Abbiamo distribuito il lavoro da fare in anticipo e ad un certo punto ho dovuto chiamare un metodo che non era ancora stato implementato da uno dei miei co-programmatori. Come è il modo consigliato di affrontare questo?

Opzioni che ho visto, anche se non mi piacciono davvero nessuno di loro:

  1. Scrivimi un //TODO e rivisita questa riga di codice in un secondo momento per verificare se il metodo è stato implementato nel frattempo.

  2. Chiedere al membro del team corrispondente di implementare quel ora .

  3. Lancio di un runtimeException personalizzato con una descrizione chiara di ciò che non è ancora stato implementato. (Almeno non dobbiamo cercare molto tempo per scoprire cosa manca)

  4. Aggiungendo il metodo necessario alla classe loro e scrivendo loro una //TODO nel corpo del messaggio, è possibile inviare loro anche un messaggio rapido su tale modifica. (Ora non è più il mio problema, ma questo può causare fastidiosi conflitti di unione se stessero lavorando a questo metodo nel frattempo)

  5. Definire classi astratte o interfacce per tutto prima di scrivere effettivamente il codice che fa il lavoro. (Non ha funzionato molto bene perché queste interfacce sono state spesso cambiate)

posta lucidbrot 28.12.2017 - 18:18
fonte

3 risposte

5

È una domanda interessante e la risposta potrebbe essere più facile di quanto pensi.

In poche parole, scrivi test che convalidano le tue ipotesi. Non importa se fai l'implemenation oi tuoi colleghi programmatori

La lunga risposta.

Qualsiasi opzione elencata è in qualche modo passiva e richiede tu di tornare indietro e rivisitare il codice (se esiste) prima o poi.

  • Commenti devono essere letti e gestiti dalla controparte responsabile dell'implementazione. Il tuo codice non può essere compilato nel frattempo. Se controlli questo stato in un repository di codice, la tua pipeline di integrazione continua non funzionerà, ed è comunque una cattiva pratica ... mai controllare codice non funzionante
  • Le eccezioni di runtime sembrano migliori, ma sono comunque tossiche, perché il tuo programmatore potrebbe presumere che l'implementazione fosse già stata eseguita senza controllo, lasciando anche il sistema in uno stato instabile. Se il metodo viene attivato non così spesso, potrebbe portare a un codice di produzione interrotto ... anche le cattive pratiche ... non controllare mai le eccezioni "non implementate"
  • Aspettare i tuoi colleghi programmatori per l'implementazione dei metodi o di uno stub è anche scoraggiante. Rompe il tuo flusso di lavoro e il flusso di lavoro dei tuoi colleghi programmatori. Cosa succede se sono malati, in un meeting a g, in pausa caffè, vuoi passare il tempo ad aspettare? ... non aspettare qualcuno se non devi
  • implementare i metodi mancanti sicuramente il modo migliore per andare avanti. Ma cosa succede se la tua implementazione non soddisfa l'intero caso d'uso e i tuoi colleghi programmatori devono modificarlo o modificarlo? Come fai e loro si assicurano che sia ancora compatibile con il tuo intento? La risposta è di nuovo facile. Scrivi test che verificano, descrivono e documentano le tue intenzioni. Se i test si interrompono, è facile notare. Se è necessario apportare modifiche a tale metodo che interrompono la funzione ... la vedi immediatamente. Entrambi avete un motivo per comunicare e decidere cosa fare. Dividere la funzionalità? Cambia la tua implementazione, ecc ... mai verificare il codice che non è sufficientemente documentato dai test

Per raggiungere un livello sufficiente di test ti suggerirei di dare un'occhiata a due discipline.

  1. TDD - sviluppo basato sui test - questo assicurerà di descrivere il tuo intento e testarlo a sufficienza. Ti dà anche la possibilità di simulare o falsificare metodi e classi (anche utilizzando interfacce) che non sono ancora stati implementati. Il codice e i test continueranno a essere compilati e ti permetteranno di testare il tuo codice a prescindere dal codice dei tuoi colleghi programmatori. (vedi: link )

  2. ATDD - sviluppo basato su test di accettazione - questo creerà un loop esterno (attorno al loop TDD) che ti aiuta a testare la funzionalità nel suo complesso. Questi test diventeranno verdi solo quando verrà implementata l'intera funzionalità, dandoti quindi un indicatore automatico quando i tuoi compagni completeranno il loro lavoro. Abbastanza pulito se me lo chiedi.

Avvertenza: nel tuo caso, scriverò solo semplici test di accettazione e non cercherò di coinvolgere troppo il lato business, perché sarebbe troppo per cominciare. Scrivi semplici test di integrazione che riuniscano tutte le parti del sistema richieste dalla funzione. Questo è tutto ciò che è richiesto

Ciò consentirà di inserire il codice in una pipeline di Integrazione continua e di produrre un'implementazione altamente affidabile.

Se vuoi approfondire questo argomento controlla i seguenti link:

risposta data 30.12.2017 - 16:50
fonte
105

Richiedi stub.

O scrivili tu stesso. In entrambi i casi, tu ei tuoi colleghi dovete essere d'accordo sulle interfacce e su come devono essere utilizzate. Tale accordo deve essere relativamente solidificato in modo che possa svilupparsi contro gli stub - per non parlare, in modo da poter creare i propri mock per il test dell'unità ...

    
risposta data 28.12.2017 - 19:28
fonte
6

Nella tua situazione, parlerei con il membro del team che ha la responsabilità di quella funzione. Può darsi che siano nella posizione di dare la priorità allo sviluppo di quella funzione in modo da poter iniziare a usarlo prima.

Vorrei evitare la quarta opzione. Hai scritto tutto il tuo codice e, come dici tu, non consideri più il tuo problema. Il tuo collega scrive quindi l'implementazione della funzione e non considera più il problema. Chi sta per verificare che il codice che hai scritto funzioni correttamente?

    
risposta data 28.12.2017 - 18:34
fonte

Leggi altre domande sui tag