Test e progettazione dell'ambiente di distribuzione per piccoli team

0

La domanda riguarda l'organizzazione dell'ambiente di sviluppo per lo sviluppo web.

  1. Ci sono 2 cose da implementare: sito web e schema del database
  2. Usiamo SVN per tenere traccia del codice sorgente
  3. Utilizziamo gli strumenti RedGate per generare SQL di migrazione e schema del database di controllo delle versioni.
  4. È importante disporre di una nuova copia dei dati nel nostro ambiente di sviluppo.

In un primo momento, abbiamo lavorato su ciascun database personale. Ora il nostro team si sta ingrandendo, quindi abbiamo server di sviluppo con database condiviso.

Per i clienti, abbiamo creato il sito Web "test" che eseguiamo sul nostro server. E punta al nostro database di sviluppo.

Per i dati - portiamo una nuova copia del database settimanalmente, quindi è solo un'altra PITA perché lo facciamo per backup / ripristino e ovviamente schema diverso quando lo riportiamo.

Dove ora abbiamo un problema è quando rilasciamo qualcosa da testare per il cliente. Controllano, potrebbe volerci del tempo. Nel momento in cui controllano, potremmo già avere altre nuove funzionalità aggiunte al sito TEST. Ora, diciamo che mancano le funzioni A, B e C. Il cliente ha provato A, ma B e C devono essere testati o modificati. Un bisogno di andare a rilasciare.

Nelle grandi aziende dove lavoravo c'erano gli ambienti DEV, TEST e PROD. Quasi tutto il TEST DEV > non è andato a meno che non si sia verificato TEST- > PROD. Ciò ha causato solo perdite di tempo (realisticamente). Ora non possiamo permetterci semplicemente di stare seduti, quindi come facciamo a lavorare in modo veloce con questo minimo con hickups.

Ora, poiché aspettiamo ancora da un cliente il feedback su "A", abbiamo già "dimenticato" cos'altro abbiamo aggiunto. Con molte persone è solo più complesso.

Quindi, suppongo che la domanda sia: come gestire il controllo della versione DB / Code e la pubblicazione separata delle funzionalità in tale ambiente? Con minima burocrazia.

    
posta katit 22.04.2015 - 03:52
fonte

2 risposte

0

Questo è un problema difficile.

Puoi provare a risolvere questo problema utilizzando la funzione di ramificazione: ogni nuova funzionalità viene sviluppata nel proprio ramo indipendentemente dalle altre funzionalità. È quindi possibile avere un ramo "test" in cui tutte queste filiali di funzionalità vengono unite in modo che il cliente possa testare tutte le funzionalità contemporaneamente. Quando la funzione A è pronta, ma B e C non lo sono, puoi creare una build solo da feature pronte, in questo caso A perché è indipendente dalle altre funzionalità.

Quindi questa è teoria, ma in pratica non funziona così bene. Il problema più piccolo è che si usa SVN che supporta la ramificazione, ma lavorare con loro in SVN è una specie di PITA. Alcuni VCS distribuiti sarebbero migliori (Git, Mercurial, ...). Il problema più grande è che le funzionalità spesso non sono indipendenti l'una dall'altra (potrebbero esserci alcune dipendenze tra di loro, diverse funzionalità toccano lo stesso codice ecc.) E non è possibile implementare solo la caratteristica A, specialmente senza test specifici per questa build - anche anche se A ha lavorato sul ramo con tutte le branch feature unite, esso (A) non deve necessariamente funzionare se distribuito in isolamento ...

Altre possibilità sono non tecniche - hanno un ciclo di sviluppo / rilascio - ad es. SCRUM richiede che dopo ogni sprint sia disponibile un prodotto potenzialmente consegnabile. Lavorare anche a stretto contatto con il cliente (proprietario del prodotto) per i test, assicurandosi che comprenda come lavori in modo da potersi allineare al processo di sviluppo per ottenere un guadagno maggiore ...

    
risposta data 26.04.2015 - 13:45
fonte
0

Come hai anche detto, è improbabile che l'efficienza del team venga migliorata se si dispone solo di un ambiente TEST, in cui tutti gli sviluppatori lavorano. Penso che questo sia il principale collo di bottiglia nel tuo processo di sviluppo.

Ogni sviluppatore dovrebbe avere il proprio ambiente DEV nel proprio computer locale, con un proprio database (forse un clone recente dall'ambiente TEST). Quindi, ogni sviluppatore può lavorare indipendentemente sulla propria funzione. Quando ciascuna funzione ha superato la fase DEV con test locale da parte del team DEV, deve essere confermata nel sistema di controllo della versione che si utilizza e quindi deve essere distribuita nell'ambiente TEST per essere visualizzata dal client.

Negli aspetti del controllo delle versioni, la migliore pratica è che ogni sviluppatore crea un nuovo ramo per ogni nuova funzione e quando la funzione deve essere distribuita in TEST, il ramo viene unito nel tronco. Quindi, tutti i conflitti tra le diverse funzionalità saranno facilmente osservabili e osservando la cronologia delle versioni, le funzioni aggiunte a ogni passaggio saranno facilmente notate, poiché dovrai solo cercare i rami uniti

    
risposta data 22.04.2015 - 09:28
fonte

Leggi altre domande sui tag