Logiciel open source bien conçu / de haute qualité [fermé]

32

Je prends un cours de conception de logiciels où je devrais choisir un logiciel open source à analyser du point de vue de la conception de logiciels.

Ce doit être un gros projet: pas moins de 100 000 lignes de code.

J'aimerais vraiment choisir un logiciel qui est très bien conçu et architecturé pour avoir de bonnes idées sur une bonne conception de logiciel.

Par bonne conception, je veux dire des choses comme des classes et une architecture significatives, une bonne utilisation des modèles (de conception), une bonne utilisation de l'abstraction, une bonne organisation des composants, une cohésion élevée et un faible couplage entre les composants, etc.

Avez-vous un logiciel à me proposer?

Notez que le logiciel doit simplement avoir une bonne conception, la conception n'a pas besoin d'être documentée! :)

Il n'a pas besoin d'être une application pour l'utilisateur final ... Il peut aussi s'agir d'une bibliothèque, d'un outil, etc ...

Andrea Zilio
la source
3
Pourquoi nous demander? Qu'est-ce qui vous intéresse? Si j'ai suggéré un progiciel de comptabilité et que vous trouvez la comptabilité ennuyeuse, ce ne serait pas une bonne réponse, n'est-ce pas? Quel type de package vous intéresse? Regardez-les d'abord, puis posez-nous des questions sur les packages spécifiques que vous avez consultés.
S.Lott
Merci de l'avoir signalé. Je dois dire que les outils de développement logiciel m'intéresseraient.
Andrea Zilio
Une plateforme particulière que vous aimeriez utiliser?
3
Jetez un œil à l'architecture des applications open source qui décrit un certain nombre d'applications open source bien conçues.
Richard
Les lignes de mesure de code sont ambiguës. La taille de l'exécutable et toutes les DLL dont il dépend peuvent vous dire quelque chose. s'il existe une bonne bibliothèque, cela n'a de sens que de l'utiliser. Ensuite, dois-je compter les lignes de la bibliothèque dans le cadre de mon nombre total de LOC ou non? Je dirais que de nombreux frameworks (bibliothèques, API, SDK ou quel que soit le nom que vous préférez) ont tendance à être très bons (ils sont souvent touchés sous tous les angles, donc les bogues sont rapides à trouver et devraient être rapides à corriger). Étant donné que les bons codeurs tireront parti d'autres bonnes bibliothèques, le LOC actif n'a pas besoin d'être grand pour une application complexe.
Job

Réponses:

23

Par bonne conception, je veux dire des choses comme des classes et une architecture significatives, une bonne utilisation des modèles de conception, une bonne utilisation de l'abstraction, une bonne organisation des composants, une cohésion élevée et un faible couplage entre les composants

Premièrement, un logiciel, bon ou mauvais, ne vit pas dans la solitude - il modélise un scénario du monde réel que les humains conçoivent comme un problème et est donc toujours étroitement associé à quelque chose appelé "domaine d'application". Ainsi, chaque fois que vous parlez de logiciel, commencez par connaître et étudier le domaine - car c'est seulement alors que vous pourrez atteindre la discrétion du bon et du mauvais.

  • git - pas seulement bon, mais un design incroyable. Ce n'est pas un contrôle de version à la base, juste un système de fichiers. Un mince placage de fonctionnalités sur le dessus du noyau en fait un système de contrôle de version. Apprenez à connaître les composants internes de git et votre sens de la conception de logiciels sera éclairé.

  • jQuery - pas une bibliothèque bien documentée (en interne), mais une source inspirante démontrant comment le code JavaScript côté client peut faire des merveilles.

  • NodeJS - si vous souhaitez créer des serveurs, ce projet a de nouvelles idées et modèles à offrir.

  • v8 - très bon code C ++, bibliothèque fantastique pour apprendre / étudier les implémentations de machines virtuelles.

  • Projets NoSQL - Couch, Mongo, Redis, Cassandra - ces projets présentent des façons intelligentes de résoudre les problèmes de persistance. Ils embrassent également l'idée de la persistance polyglotte.

  • Boost bibliothèques - bonne dose de C ++.

  • OpenStack - de très bons projets sur le cloud computing et la virtualisation.

  • The Apache Software Foundation - Choisissez l'un de leurs projets et étudiez-le. La structure modulaire de HTTPd est une excellente source si vous voulez voir comment les composants s'assemblent. APR (apache portable runtime) - une très bonne bibliothèque également.

  • mod_wsgi - l'un des meilleurs programmes C que j'ai rencontrés.

"bon usage des modèles de conception" - il N'EST PAS important que le code corresponde à un modèle de conception bien connu - il est plus important qu'il résout le problème "intelligemment" - qu'il soit maintenable, réutilisable et lisible. Si le code est entassé dans une "forme" particulière - juste pour adhérer à un modèle de conception - il peut s'agir d'un mauvais code.

"pas moins de 100 000 lignes de code" - depuis quand le nombre de lignes est-il devenu une mesure de bonne qualité - pour avoir un avant-goût de "logiciel bien conçu / architecturé", il n'est pas nécessaire qu'il soit GRAND.

Encore une fois, n'oubliez pas d'étudier d'abord la nature et les nuances du domaine problématique, puis de vous plonger dans la lecture du code.

MISE À JOUR: oct. 2015

InfluxDB - https://influxdb.com/ Ce projet Go est en développement actif et n'est PAS encore très complexe. Vous pouvez donc commencer à creuser dans le code relativement facilement que quelque chose comme OpenStack.

treecoder
la source
13

Un tirage au sort. Tous les grands projets Open Source doivent être brillants pour survivre. Les projets Apache, Linux, GNU sont tous brillants.

S.Lott
la source
4
Tous les grands projets OSS gérés par la communauté doivent être au moins décents pour survivre. Je ne dirais pas génial. Pour les choses qui sont le plus souvent dites, les projets gouvernementaux réalisés exclusivement par des employés, la qualité du code n'est pas toujours la chose la plus élevée sur une liste de priorités. Mais +1 pour vos exemples.
TZHX
8
Wordpress est-il génial?
Drew
9
  • Chrome
  • Firefox
  • Apache
  • MySQL
  • PostgreSQL
  • Linux
  • GNOU
Michael JV
la source
2
Êtes-vous sûr que Firefox n'est pas jonché de morceaux de code stagnants écrits au début des années 90? Cela ne semble pas être un bon morceau de code pour étudier les pratiques de codage modernes
TheLQ
3
Le code source de Firefox et MySQL sont des horribles morceaux de merde qui ne devraient jamais être utilisés comme exemples de bonne conception logicielle.
Jordan
7

Python. Plus précisément, CPython, l'implémentation principale. Pour la version 3.2, l'interpréteur exécute environ 50k sloc de code C, bibliothèque standard sur 400k sloc de code Python. Compte tenu de la qualité extrêmement élevée du langage et de son encouragement des principes de lisibilité et de bonne conception, je pense que tout ce code serait assez bon.

Tom Zych
la source
4

TeX et MetaFont méritent vraiment une étude: http://www.tug.org/

Votre bibliothèque locale peut vous aider avec les versions imprimées des sources.


la source
3

Je recommanderais de lire le livre suivant avant de choisir un projet open source. Cela vous donnera un aperçu de ce qui peut être considéré comme du bon / mauvais code.

Greg Wilson
Faire du logiciel ce qui fonctionne vraiment et pourquoi nous croyons à
l'architecture des applications open source

Voici également son interview d'échange de pile de blog si vous êtes intéressé à écouter l'auteur avant de consulter son
http://blog.stackoverflow.com/2011/06/se-podcast-09/

Dans l'ensemble, qu'est-ce qui est considéré comme un logiciel de haute qualité? La question elle-même est très subjective. Les utilisateurs ont différentes mesures de qualité. Un utilisateur peut considérer que le progiciel est de haute qualité en fonction des mérites techniques. Où un autre utilisateur peut évaluer la qualité en fonction de l'esthétique de l'interface utilisateur et de l'expérience utilisateur globale.

D'un point de vue commercial, ils mesurent généralement la qualité des logiciels selon qu'ils répondent aux attentes du client ou qu'ils respectent les obligations contractuelles d'un client. Il existe également une conduite professionnelle, mais cela dépend de quel côté de la clôture vous la voyez.

Du point de vue des programmeurs, quelle est l'élégance de la conception et des constructions de l'API au moment de la création du logiciel. La même conception ou norme de code peut être considérée comme non professionnelle lorsque les attitudes et les opinions des programmeurs changent au fil du temps.

Tchad
la source
2

Je proposerai l'édition IntelliJ Community puisque vous mentionnez que vous aimez les outils logiciels.

http://www.jetbrains.org/

Ce que j'aime:

  1. C'est un outil qui fait quelque chose plutôt qu'un cadre
  2. Ils font des choses vraiment intéressantes comme l'analyse de code statique et l'analyse de flux de données que je trouve vraiment agréable de voir les détails.
  3. Une bonne chose est que vous pouvez l'utiliser pour effectuer votre étude car il a également la possibilité d'exécuter toute l'analyse de code sur lui-même.

(certes, je suis un fanboy de JetBrains)

sylvanaar
la source
2

J'ai moi-même recherché un tel projet et je me suis installé CLang.

  • Il est relativement nouveau (progéniture de LLVM qui n'a que 10 ans), donc pas (ou pas que j'ai vu) de code périmé
  • Une conception modulaire (comme LLVM), extrêmement bien pensée, qui je pense est très importante de nos jours
  • Code très propre, bien commenté (vous voyez souvent des citations du Standard pour expliquer les choses)
  • Une suite de tests / environnement de test très bien conçu

Il n'y a pas beaucoup de motifs de conception là-bas, quelques visiteurs ici et là mais c'est à peu près tout. Les hiérarchies de classes sont simples et directes ... En fait, je pense que la simplicité est le but, il ne semble pas y avoir de suringénierie en cours.

Cela dit, étant des performances critiques, un certain nombre de décisions de conception peuvent sembler douteuses (éviter les fonctions virtuelles pour de nombreux objets, compiler sans RTTI / exceptions), donc tout n'est pas applicable aux logiciels de tous les jours.

Matthieu M.
la source
1

Le mélangeur est bien structuré et bien conçu.

dan_waterworth
la source
0

Joomla, c'est très bien fait. Mais je ne sais pas si ses 100 000 lignes

Imran Omar Bukhsh
la source
5
Hahahaha vraiment?
Salman von Abbas
0

Donc, juste une autre variante - Qu'en est-il du langage de programmation Nemerle ?

Ce n'est pas si populaire (mais GitHub vient d'ajouter une mise en évidence pour Nemerle) et vous pouvez y trouver de nombreux bons points.

cnd
la source