Quale metodologia software dovrei seguire quando effettuo delle ricerche?

9

Di solito analizzo i dati degli esperimenti e anche se ho uno schema generale dei passaggi che devo fare, potrei aver bisogno di adattarlo alle specifiche degli esperimenti o alle domande che stanno dietro. Di solito sono l'unico codice.

Ho guardato wikipedia ma non sono sicuro di quale metodologia posso usare, parzialmente perché non ne ho mai seguito nessuno, e in parte perché a volte esploro i dati, per vedere come sono, e altre volte voglio solo una risposta. (E perché non mi aspetto molto per testare o avere una certa qualità sul mio codice)

Mi è stato chiesto di fare questa domanda dopo un'ora o due scoprendo che la funzione r table si basa sull'ordine dei vettori e non sul nome degli elementi per confrontarli. Poi ho pensato che avrei dovuto testare il comportamento e le funzioni in cui l'ho usato con alcuni dati falsi. Ma ho usato una tabella dopo che altre analisi hanno portato alla mancanza di informazioni, quindi non avrei potuto seguire la metodologia di sviluppo basata sui test (se ho capito bene). Tuttavia, ritengo che con qualche miglioramento nel modo in cui affronto il progetto, potrei essere più efficiente, oltre a rilevare gli errori prima, ma anche come e cosa cercare nel caso in cui dubito di un risultato, quindi per favore non concentrarti solo questo errore di esempio.

Quale metodologia software si adatta meglio alla ricerca?

In sostanza, sto chiedendo come garantire la qualità e il progresso nel tempo, oltre a mantenere la specificità della ricerca.

Esempio di come lavoro:

Un biologo ha in mente una domanda e sa che fare un esperimento porterà ad avere dati di interesse (cioè livelli di espressione genica in due condizioni), quindi imposta l'esperimento e raccoglie campioni da 10 persone / topi / ratti ... Ora devo analizzare quei dati per quei 10 campioni usando librerie e test esistenti (o implementando nuovi test) ma tenendo conto della domanda che il biologo aveva in mente (cioè quali geni sono più espressi in una condizione che in un'altra) . La struttura è la stessa degli esperimenti precedenti (che ha coinvolto 6 condizioni e un altro animale) ma il test statistico, le normalizzazioni, la struttura dei dati possono cambiare. Quindi di solito copio una versione precedente e la adeguo alle esigenze attuali.

    
posta llrs 08.06.2016 - 10:46
fonte

3 risposte

6

Ciò che è necessario forse non è una metodologia software, ma un cambiamento politico nel mondo accademico che risolve il problema della mancanza di riconoscimento del ruolo svolto dallo sviluppo del software nella scienza.

Il Software Sustainability Institute (Regno Unito) è l'organizzazione più vicina a ciò che stai cercando: come argomentare più coscienzioso uso della programmazione informatica nella ricerca scientifica.

Fornisce inoltre indicatori di informazioni per coloro che sono interessati alle metodologie di sviluppo del software.

Tuttavia, devo sottolineare che le metodologie di solito governano team di programmatori di software, con iterazioni e graduale affinamento degli obiettivi del progetto, e funzionano con basi di codici stabili che durano a lungo. Sono per progetti che sono ordini di grandezza più complessi di quello che stai facendo.

Per quanto riguarda il motivo per cui questa cosa molto evidentemente corretta (uso più coscienzioso della programmazione dei computer nella ricerca scientifica) non è stata realizzata e sempre rispettata, ecco la scomoda verità: negli ambienti amministrativi accademici, gli scienziati possono essere visti a degradare l'importanza interpretato dalla programmazione del computer. A volte possono essere visti riunirsi per negare il riconoscimento dei contributi delle persone coinvolte nel software, anche se la natura di tale contributo si adatta alla disciplina scientifica.

Sul posto di lavoro, ci sono cose che mancavano e cose che puoi fare.

Cose che mancavano:

  • Mancanza di linee guida
  • Mancanza di supervisione o persona per porre domande
  • Mancanza di mentori o programmatori di computer che siano a conoscenza degli strumenti che utilizzi (ad es. R)
  • Mancanza di riutilizzo del software, archiviazione, controllo della versione o documentazione di software precedentemente sviluppati, a fini di ripetibilità e apprendimento

In breve, la cultura generale è che le persone coinvolte non sono realmente interessate a ... hai indovinato ... un uso più coscienzioso della programmazione dei computer nella ricerca scientifica.

Cose che puoi fare:

  • Dedicare più tempo all'apprendimento dei tuoi strumenti.
    • Dedica più tempo a leggere la documentazione e gli esempi di codice per i tuoi linguaggi di programmazione
    • Dovrai imparare ad amare gli strumenti che usi.
  • Prova a scrivere qualcosa, a beneficio del prossimo programmatore di computer che sarà ridotto in schiavitù allo stesso gruppo di persone per i prossimi due anni
    • Un wiki sarà eccellente.
  • Prova ad impostare il controllo della versione di origine
    • Essere in grado di recuperare frammenti di codice comunemente riutilizzati
    • Essere in grado di salvare un'istantanea del codice utilizzato in un particolare esperimento

Per gli sviluppatori di software per la carriera, le linee guida di questo tipo sono disponibili in:

Questi sono considerati i requisiti di base per l'esecuzione di un'attività di sviluppo software. Tuttavia, quando stai combattendo una guerra di apatia, da solo, devi dare la priorità. Migliorare gli strumenti, scrivere e conservare le informazioni, mantenere le versioni del codice sorgente è il minimo indispensabile per un unico ambiente.

    
risposta data 27.07.2016 - 14:51
fonte
2

Non preoccuparti troppo della metodologia, ma cerca di concentrarti maggiormente su ciò di cui hai bisogno per tenere traccia delle tue esigenze, per lo sviluppo del software stesso.

Avendo fatto una breve permanenza in una posizione relativamente simile alla tua, ecco cosa posso estrarre dalla mia esperienza personale.

Esattezza algoritmica

Probabilmente l'aspetto più importante, dovresti essere in grado di dimostrare che il tuo software fa ciò che è stato progettato per fare. Qui i test automatici sono il tuo miglior alleato. Mi rendo conto che può essere difficile fare a meno di un set di dati adeguato, ma in realtà dovresti prendere l'abitudine di creare i tuoi set di dati personali. Il loro scopo è comunque un po 'diverso, non stai cercando di estrarre la tendenza dai dati, ma assicurati che il software produca risultati prevedibili e corretti da un set di dati conosciuto. Quindi, per il riconoscimento di modelli, ad esempio, non è necessario un trucco genetico multi-gig, solo poche righe di testo potrebbero essere sufficienti a garantire che l'algoritmo rilevi il pattern.

Ho usato i miei dati per rappresentare casi d'angolo, casi impossibili. Tendevo a concentrarmi maggiormente sugli estremi che sulla norma prevista. Molte volte posso ricordare di testare qualcosa di impossibile solo per vedere questa situazione nascere nel set di dati effettivo. Se non l'avessi testato, non avrei messo in atto i rilevamenti degli errori e la registrazione necessari per identificare potenziali errori o corruzioni nel set di dati. TDD è adatto per questa parte, anche se la creazione di un buon set di test è a mio avviso più importante, indipendentemente dal fatto che lo si faccia prima o dopo il codice effettivo.

Versioning

Troppo spesso questa parte è tralasciata. Un buon schema di versioning per il tuo codice e pacchetti / eseguibili prodotti ti aiuterà immensamente a mantenere i tuoi progressi in ordine. Per essere in grado di recuperare esattamente il codice utilizzato per creare risultati ottenuti in precedenza può essere d'aiuto quando si rintracciano bug o discrepanze. La ramificazione può aiutare anche quando si sperimentano approcci o algoritmi diversi.

Assicurati di taggare il codice utilizzato nei calcoli effettivi, controlla versioning semantico se hai bisogno di aiuto per nominare le versioni.

Creazione automatica

Un corollario al punto sopra. Assicurati di automatizzare il più possibile il processo di costruzione e confezionamento del software. Non è necessario andare a pieno titolo, quanto basta per rendere banale la creazione del sistema finale dalla fonte e dalle dipendenze. L'obiettivo qui è quello di farti risparmiare tempo ma anche di avere un mezzo riproducibile per ricreare il software dal sorgente, incluse le dipendenze e altri aspetti esterni. Groovy, Maven, ant, Scons, cmake, sono solo un piccolo esempio di strumenti di automazione di build e sistemi di scripting che possono aiutare.

Se vuoi fare il massimo, installa Jenkins o teamcity o qualsiasi altro sistema di integrazione continua. Aggiunto bonus se devi gestire più server o lavoratori per l'elaborazione distribuita. La maggior parte di questi sistemi avrà mezzi per aiutare nella manutenzione. Inoltre, sarai in grado di automatizzare completamente le esecuzioni di test in modo da non dover attendere i risultati prima di continuare, basta eseguire il commit e ricevere una mail in seguito. Ho avuto un sistema che ha impiegato ore per superare i test set. Mettere su questa automazione è stato il miglior investimento del mio tempo. Soprattutto se hai già gli script in atto per creare tutto.

Isolamento dell'ambiente

Il ricercatore impiega una quantità eccessiva di tempo isolando un singolo o un piccolo insieme di variabili di interesse da sistemi complessi attraverso i loro protocolli. Questo dovrebbe anche essere esteso alle tue pratiche di sviluppo del software. Puoi anche verificare la containerizzazione con Docker o Vagrant. Ti darà un controllo migliore sull'ambiente in cui viene eseguito il software.

Non è necessario avere una grande squadra prima che questo ripaghi, sono rimasto solo per la maggior parte del tempo, ma ne ho beneficiato enormemente. La pace della mente e il tempo che ci sono stati risparmiati hanno superato di gran lunga le spese generali che mi costavano fare questo.

    
risposta data 27.07.2016 - 15:49
fonte
0
  1. Puoi usare R? Ecco a cosa serve.

  2. Mantieni il tuo semplice . Vai alla leggibilità e non preoccuparti delle prestazioni a meno che non sia un problema. Esistono metodologie per cercare di impedire ai team di programmatori di inserire bug nel codice degli altri, anche se il team è di una sola persona.

  3. Detto questo, la codifica della disciplina è molto importante. Ho visto codice di scienziati e matematici avanzati altamente qualificati ed è orribile . Ignorano totalmente la formattazione. Strigliano insieme il codice come se fosse vuoto. I loro nomi variabili sono totalmente mistificanti. Non scrivono commenti, o scrivono commenti imperscrutabili, oi commenti dicono una cosa mentre il codice ne dice un'altra. Non fare quelle cose. Pensa sempre in anticipo ai cambiamenti futuri che tu o altri dovreste fare.

risposta data 27.07.2016 - 15:08
fonte

Leggi altre domande sui tag