Software open source ben progettato / di alta qualità [chiuso]


32

Sto prendendo una classe di progettazione software in cui dovrei scegliere un software open source da analizzare dal punto di vista della progettazione software.

Deve essere un grande progetto: non meno di 100.000 righe di codice.

Vorrei davvero scegliere un software molto ben progettato e progettato per avere buone conoscenze sulla buona progettazione del software.

Per buona progettazione intendo cose come classi e architettura significative, buon uso di modelli (di progettazione), buon uso dell'astrazione, buona organizzazione dei componenti, elevata coesione e basso accoppiamento tra componenti, ecc ...

Hai qualche software da suggerirmi?

Si noti che il software deve solo avere un buon design, il design non ha bisogno di essere documentato! :)

Non deve essere un'applicazione per l'utente finale ... Può anche essere una libreria, uno strumento, ecc ...


3
Perché chiederci cosa ti interessa? Se ti suggerissi un pacchetto di contabilità e ritieni che la contabilità sia noiosa, non sarebbe una buona risposta, vero? Che tipo di pacchetto ti interessa? Guarda prima quelli, poi chiedici dei pacchetti specifici che hai guardato.
S.Lott

Grazie per segnalarlo. Devo dire che gli strumenti di sviluppo software mi interesserebbero.
Andrea Zilio,

Qualche piattaforma particolare che vorresti usare?

3
Dai un'occhiata a The Architecture of Open Source Applications che descrive una serie di applicazioni open source ben progettate.
Richard,

Le linee di misura del codice sono ambigue. La dimensione dell'eseguibile e tutte le DLL da cui dipende potrebbe dirti qualcosa. se c'è una buona biblioteca là fuori, ha senso solo usarla. Quindi, conto le righe della libreria come parte del mio conteggio LOC totale o no? Direi che molti dei framework (librerie, API, SDK o qualsiasi nome tu preferisca) tendono ad essere molto buoni (vengono colpiti molto da ogni angolo, quindi i bug sono facili da trovare e dovrebbero essere rapidi da correggere). Dato che i buoni programmatori faranno leva su altre librerie valide, il LOC effettivo non deve essere grande per un'applicazione complessa.
Giobbe

Risposte:


23

Per buona progettazione intendo cose come classi e architettura significative, buon uso dei modelli di progettazione, buon uso dell'astrazione, buona organizzazione dei componenti, elevata coesione e basso accoppiamento tra i componenti

In primo luogo, un software, buono o cattivo, non vive in solitudine: modella uno scenario del mondo reale che gli esseri umani concepiscono come un problema e quindi è sempre associato da vicino a qualcosa chiamato "dominio dell'applicazione". Quindi, ogni volta che parli di software, prima conosci e studia il dominio, perché solo allora puoi ottenere la discrezione del bene e del male.

  • git - non solo buono, ma un design straordinario. Non è un controllo di versione al suo interno, solo un file system. Una sottile impiallacciatura di funzionalità sulla parte superiore del nucleo lo rende un sistema di controllo della versione. Conosci gli interni di Git e il tuo senso del design del software sarà illuminato.

  • jQuery - non una libreria ben documentata (internamente), ma una fonte stimolante che dimostra come il codice JavaScript lato client può fare miracoli.

  • NodeJS - se stai realizzando server questo progetto ha idee e modelli rinfrescanti da offrire.

  • v8 - ottimo codice C ++, libreria fantastica per apprendere / studiare implementazioni di macchine virtuali.

  • Progetti NoSQL - Couch, Mongo, Redis, Cassandra - questi progetti dimostrano modi intelligenti per risolvere i problemi di persistenza. Inoltre abbracciano l'idea della persistenza dei poliglotti.

  • Potenzia le librerie - buona dose di C ++.

  • OpenStack - ottimi progetti su cloud computing e virtualizzazione.

  • Apache Software Foundation : scegli uno dei suoi progetti e studiali. La struttura modulare di HTTPd è un'ottima fonte se vuoi vedere come i componenti si uniscono. APR (apache portable runtime) - anche una lib davvero buona.

  • mod_wsgi - uno dei migliori programmi in C che abbia mai incontrato.

"buon uso dei modelli di progettazione" - NON è importante che il codice corrisponda a un modello di progettazione noto - è più importante che risolva il problema "in modo intelligente" - che sia mantenibile, riutilizzabile e leggibile. Se il codice è stipato in una particolare "forma" - solo per aderire a un modello di progettazione - può essere un codice errato.

"non meno di 100.000 righe di codice" - da quando il numero di righe è diventato una metrica di buona qualità - avere un assaggio di "software ben progettato / progettato" non richiede che sia GRANDE.

Ancora una volta, ricorda di studiare prima la natura e le sfumature del dominio problematico, quindi approfondisci la lettura del codice.

AGGIORNAMENTO: ottobre 2015

InfluxDB - https://influxdb.com/ Questo progetto Go è in fase di sviluppo attivo e NON è ancora molto complesso. Quindi puoi iniziare a scavare nel codice relativamente facilmente rispetto a qualcosa come OpenStack.


13

Lancia una moneta. Tutti i grandi progetti Open Source devono essere geniali per sopravvivere. I progetti Apache, Linux, GNU sono tutti geniali.


4
Tutti i grandi progetti OSS gestiti dalla comunità devono essere almeno decenti per sopravvivere. Non direi brillante. Per quanto si dice, progetti governativi realizzati esclusivamente da dipendenti, la qualità del codice non è sempre la cosa più alta in un elenco di priorità. Ma +1 per i tuoi esempi.
TZHX

8
Wordpress è geniale?
Estratto il

9
  • Cromo
  • Firefox
  • Apache
  • MySQL
  • PostgreSQL
  • Linux
  • GNU

2
Sei sicuro che Firefox non sia pieno di parti stagnanti di codice scritte all'inizio degli anni '90? Questo non sembra essere un buon pezzo di codice per studiare le moderne pratiche di codifica
TheLQ

3
Il codice sorgente per Firefox e MySQL sono orribili pezzi di merda che non dovrebbero mai essere usati come esempi di un buon design del software.
Giordania,

7

Pitone. In particolare, CPython, l'implementazione primaria. Per la versione 3.2, l'interprete esegue circa 50k sloc di codice C, libreria standard su 400k sloc di codice Python. Data l'altissima qualità del linguaggio e il suo incoraggiamento ai principi di leggibilità e buon design, penso che tutto questo codice sarebbe abbastanza buono.


4

TeX e MetaFont meritano davvero uno studio: http://www.tug.org/

La tua biblioteca locale può aiutarti con le versioni stampate delle fonti.


3

Consiglierei di leggere il seguente libro prima di scegliere un progetto open source. Questo ti darà un'idea di ciò che può essere considerato un codice buono / cattivo.

Greg Wilson
Creazione di software Cosa funziona davvero e perché crediamo
nell'architettura delle applicazioni open source

Ecco anche la sua intervista di scambio di stack di blog se sei interessato ad ascoltare l'autore prima di guardare nel suo
http://blog.stackoverflow.com/2011/06/se-podcast-09/

Nel complesso, cosa è considerato un software di alta qualità? La domanda in sé è molto soggettiva. Gli utenti hanno una diversa misurazione della qualità. Un utente può considerare il pacchetto software di alta qualità a seconda dei meriti tecnici. Laddove un altro utente può valutare la qualità in base all'estetica dell'interfaccia utente e all'esperienza complessiva dell'utente.

Dal punto di vista aziendale in genere misurano la qualità del software a seconda che soddisfi le aspettative del cliente o che soddisfino gli obblighi contrattuali di un cliente. Esiste anche una condotta professionale, ma dipende da quale lato del recinto lo si vede.

Dal punto di vista dei programmatori, quanto è elegante il design e i costrutti dell'API al momento della creazione del software. Lo stesso design o codice standard può essere considerato non professionale quando gli atteggiamenti e le opinioni dei programmatori cambiano nel tempo.


2

Suggerirò la IntelliJ Community Edition poiché dici che ti piacciono gli strumenti software.

http://www.jetbrains.org/

Cosa mi piace al riguardo:

  1. È uno strumento che fa qualcosa piuttosto che un quadro
  2. Fanno cose davvero interessanti come l'analisi del codice statico e l'analisi del flusso di dati che trovo davvero piacevole vedere i dettagli di.
  3. Una cosa bella è che puoi usarlo per eseguire il tuo studio poiché ha la capacità di eseguire anche tutta l'analisi del codice su se stesso.

(devo ammettere che sono un fan di JetBrains)


2

Ho cercato anch'io un progetto del genere e mi sono accontentato CLang.

  • È relativamente nuovo (progenie di LLVM che ha solo 10 anni), quindi nessun codice stantio (o non ho visto)
  • Un design modulare (come LLVM), estremamente ben pensato, che penso sia molto importante al giorno d'oggi
  • Codice molto pulito, ben commentato (vedi spesso citazioni dallo standard per spiegare le cose)
  • Una suite di test / ambiente di test ben progettato

Non ci sono molti modelli di design lì, alcuni visitatori qua e là ma questo è tutto. Le gerarchie di classi sono semplici e dirette ... In realtà, penso l'obiettivo sia la semplicità , non sembra esserci alcun eccesso di ingegneria.

Detto questo, essendo critici in termini di prestazioni, una serie di decisioni di progettazione potrebbe sembrare dubbia (evitando le funzioni virtuali per numerosi oggetti, compilando senza RTTI / eccezioni), quindi non tutto è applicabile al software di tutti i giorni.




Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.