Ha bisogno di un approccio dividi e conquista per riscrivere le piccole utility open source [duplicate]

1

Preambolo (Salta se non ti piace leggere)

Ho studiato C / C ++ a scuola per un anno e tutti i compiti del libro, dopo aver letto i capitoli, non erano troppo difficili da implementare. Alcuni esempi di programmi che ho scritto sono tipi di dati astratti come alberi binari, code, stack, elenchi e altri tipi di programmi: ricerca palindromo, crittografia e decrittografia di file e altri programmi simili del primo anno. Come ho detto, dopo aver letto i capitoli, sono stato facilmente in grado di implementare e comprendere gli algoritmi utilizzati per risolvere molti dei problemi. Quindi mi sento a mio agio con la sintassi e la logica di questi piccoli problemi gestibili.

Sfondo (puoi saltare questa parte)

In preparazione per il mio trasferimento a UCSD in autunno, ho installato Linux sulla mia macchina e sono passato a usare Vi - decisamente un cambiamento da Visual Studio. Per mantenere la mia mente nitida e avventurarmi in programmi del mondo reale, ho deciso di scaricare il sorgente per una famosa utility per console Linux chiamata Wget ( link ), con l'intento di riscrivere il programma come una versione orientata agli oggetti in C ++. La sfida che sto affrontando è che il programma, pur essendo una semplice utility single-purpose, è ancora abbastanza enorme quando si fissa il codice.

... La domanda (NON puoi saltare questa parte)

Come si inizia a guardare un programma che non hanno scritto e studiato per cercare di riscriverlo, modificarlo, ecc.? Immagino di cercare consigli / guida su un approccio di tipo divide et impera per studiare un programma scritto da altre persone per cercare di riscriverlo. Capisco che programmi voluminosi come OpenOffice, il kernel Linux, Gnome, ecc. Non rientrino in questo tipo di "Pensi che li scriverò di nuovo". Ma piccole utility che immagino fare.

    
posta gnat 29.05.2012 - 17:18
fonte

2 risposte

1

Penso che un buon approccio sia quello di studiare qualsiasi unit test che si trova nel sistema. I test unitari, per definizione, si concentrano solo su una sezione (di solito piccola) del codice in isolamento . Ciò significa che puoi lavorare attraverso le suite di test unitarie e capire il codice un modulo alla volta.

Se non ci sono test (o non abbastanza), puoi provare a scriverli da solo. Questo è un modo ancora migliore per imparare il codice base dal momento che devi utilizzarlo direttamente. Ancora una volta, poiché si tratta di test unitari, ti stai davvero concentrando su una piccola unità di codice, che aiuta a compartimentare lo studio del codice sorgente.

    
risposta data 29.05.2012 - 17:21
fonte
0

Non chiamerei wget una piccola utility. Può comunicare su diversi protocolli, ha numerose opzioni da riga di comando, funzioni di gestione degli errori molto robuste (e regolabili), ecc. Sembra solo semplice, perché i progettisti devono aver riflettuto molto e renderlo facile da usare.

Per quanto riguarda il tuo problema di comprensione di un progetto, impara ad apprezzare find e grep . Inoltre, ho scoperto che posso capire cosa sta facendo un programma semplicemente eseguendolo attraverso strace e (occasionalmente) ltrace . Se vuoi davvero sporcarti le mani, guarda i registri di commit nel controllo di versione, ma è un po 'estremo.

    
risposta data 29.05.2012 - 17:43
fonte

Leggi altre domande sui tag