Software de código aberto bem projetado / de alta qualidade [fechado]

32

Estou participando de uma aula de design de software na qual devo escolher um software de código aberto para analisar do ponto de vista de design de software.

Tem que ser um grande projeto: não menos que 100.000 linhas de código.

Eu realmente gostaria de escolher um software muito bem projetado e arquitetado para ter boas idéias sobre o bom design de software.

Por bom design, quero dizer coisas como classes e arquitetura significativas, bom uso de padrões (de design), bom uso de abstração, boa organização de componentes, alta coesão e baixo acoplamento entre componentes, etc.

Você tem algum software para me sugerir?

Observe que o software só precisa ter um bom design, o design não precisa ser documentado! :)

Não precisa ser um aplicativo para o usuário final ... Também pode ser uma biblioteca, uma ferramenta, etc ...

Andrea Zilio
fonte
3
Por que nos perguntar? O que te interessa? Se eu sugerisse um pacote contábil e você considerasse chato, não seria uma boa resposta, seria? Que tipo de pacote lhe interessa? Veja-os primeiro e depois pergunte-nos sobre pacotes específicos que você consultou.
31511 S.Lott
Obrigado por apontar isso. Devo dizer que as ferramentas de desenvolvimento de software seriam do meu interesse.
Andrea Zilio 31/03
Alguma plataforma específica que você gostaria de usar?
3
Dê uma olhada na Arquitetura de aplicativos de código aberto, que descreve vários aplicativos de código aberto bem projetados.
Richard
As linhas de medida do código são ambíguas. O tamanho do executável e todas as DLLs de que depende podem lhe dizer uma coisa. se houver uma boa biblioteca por aí, faz sentido usá-la. Então, conto as linhas da biblioteca como parte da minha contagem total de LOC ou não? Eu diria que muitas das estruturas (bibliotecas, APIs, SDKs ou qualquer nome que você preferir) tendem a ser muito boas (elas são atingidas muito de todos os ângulos, por isso os bugs são rápidos de encontrar e devem ser rápidos de corrigir). Como bons codificadores aproveitarão outras boas bibliotecas, o LOC atuarial não precisa ser grande para uma aplicação complexa.
Job

Respostas:

23

Por bom design, quero dizer coisas como arquitetura e classes significativas, bom uso de padrões de design, bom uso de abstração, boa organização de componentes, alta coesão e baixo acoplamento entre componentes.

Primeiro, um software, bom ou ruim, não vive na solidão - ele modela um cenário do mundo real que os humanos concebem como um problema e, portanto, está sempre associado intimamente a algo chamado "domínio de aplicativo". Portanto, sempre que você falar sobre software, primeiro conheça e estude o domínio - pois somente então você poderá atingir o discernimento de bom e ruim.

  • git - não apenas bom, mas um design incrível. Não é um controle de versão em sua essência, apenas um sistema de arquivos. Uma fina camada de funcionalidade no topo do núcleo faz dele um sistema de controle de versão. Conheça os aspectos internos do git, e seu senso de design de software será esclarecido.

  • jQuery - não uma biblioteca documentada muito bem (internamente), mas uma fonte inspiradora que demonstra como o código JavaScript do lado do cliente pode fazer maravilhas.

  • NodeJS - se você gosta de criar servidores, este projeto tem idéias e padrões novos e refrescantes para oferecer.

  • v8 - código C ++ muito bom, biblioteca fantástica para aprender / estudar implementações de máquinas virtuais.

  • Projetos NoSQL - Couch, Mongo, Redis, Cassandra - esses projetos demonstram maneiras inteligentes de resolver problemas de persistência. Eles também abraçam a idéia de persistência poliglota.

  • Impulsionar bibliotecas - boa dose de C ++.

  • Pilha aberta - projetos muito bons em computação em nuvem e virtualização.

  • Fundação Apache Software - Escolha um de seus projetos e estude-o. A estrutura modular do HTTPd é uma excelente fonte, se você quiser ver como os componentes se reúnem. APR (apache portable runtime) - uma lib realmente boa também.

  • mod_wsgi - um dos melhores programas em C que eu já encontrei.

"bom uso de padrões de design" - NÃO é importante que o código corresponda a um padrão de design conhecido - é mais importante que ele resolva o problema "de maneira inteligente" - que seja sustentável, reutilizável e legível. Se o código estiver repleto de uma "forma" específica - apenas para aderir a um padrão de design - pode ser um código incorreto.

"não menos que 100.000 linhas de código" - desde quando o número de linhas se tornou uma métrica de boa qualidade - obter uma amostra de "software bem projetado / arquitetado" não exige que seja GRANDE.

Novamente, lembre-se de estudar a natureza e as nuances do domínio do problema primeiro e depois mergulhe na leitura do código.

ATUALIZAÇÃO: Oct. 2015

InfluxDB - https://influxdb.com/ Este projeto Go está em desenvolvimento ativo e ainda NÃO é muito complexo. Assim, você pode começar a digitar códigos com relativa facilidade do que algo como o OpenStack.

codificador de árvore
fonte
13

Atirar uma moeda. Todos os grandes projetos de código aberto precisam ser brilhantes para sobreviver. Os projetos Apache, Linux e GNU são todos brilhantes.

S.Lott
fonte
4
Todos os grandes projetos OSS administrados pela comunidade devem ser pelo menos decentes para sobreviver. Não diria brilhante. No que diz respeito principalmente aos projetos governamentais desenvolvidos exclusivamente por funcionários, a qualidade do código nem sempre é a coisa mais alta em uma lista de prioridades. Mas marque +1 nos seus exemplos.
TZHX 31/03
8
Wordpress é brilhante?
Tirou
9
  • cromada
  • Raposa de fogo
  • Apache
  • MySQL
  • PostgreSQL
  • Linux
  • GNU
Michael JV
fonte
2
Você tem certeza de que o Firefox não está repleto de partes estagnadas de código escritas no início dos anos 90? Isso não parece ser um bom pedaço de código para estudar práticas de codificação modernas
TheLQ
3
O código fonte do Firefox e MySQL são horríveis pedaços de porcaria que nunca devem ser usados ​​como exemplos de bom design de software.
Jordan
7

Python. Especificamente, CPython, a principal implementação. Para a versão 3.2, o intérprete executa cerca de 50k sloc de código C, biblioteca padrão mais de 400k sloc de código Python. Dada a qualidade extremamente alta da linguagem e seu incentivo aos princípios de legibilidade e bom design, eu pensaria que todo esse código seria muito bom.

Tom Zych
fonte
4

O TeX e o MetaFont realmente valem um estudo: http://www.tug.org/

Sua biblioteca local pode ajudá-lo com versões impressas das fontes.


fonte
3

Eu recomendaria ler o livro a seguir antes de escolher um projeto de código aberto. Isso fornecerá informações sobre o que pode ser considerado código bom / ruim.

Greg Wilson
Tornando o software o que realmente funciona e por que acreditamos na
arquitetura de aplicativos de código aberto

Aqui também está a entrevista de troca de pilhas do seu blog, se você estiver interessado em ouvir o autor antes de consultar o
http://blog.stackoverflow.com/2011/06/se-podcast-09/

No geral, o que é considerado software de alta qualidade? A questão em si é muito subjetiva. Os usuários têm diferentes medidas de qualidade. Um usuário pode considerar que o pacote de software é de alta qualidade, dependendo dos méritos técnicos. Onde outros usuários podem avaliar a qualidade com base na estética da interface do usuário e na experiência geral do usuário.

Da perspectiva dos negócios, eles geralmente medem a qualidade do software, dependendo se ele atende às expectativas do cliente ou se está cumprindo as obrigações contratuais de um cliente. Também há conduta profissional, mas isso depende de qual lado da cerca você a vê.

Do ponto de vista dos programadores, quão elegante é o design e as construções da API no momento em que o software foi criado. O mesmo padrão de design ou código pode ser considerado não profissional quando as atitudes e visões dos programadores mudam com o tempo.

Chade
fonte
2

Vou sugerir a IntelliJ Community Edition desde que você mencione que gosta de ferramentas de software.

http://www.jetbrains.org/

O que eu gosto sobre isso:

  1. É uma ferramenta que faz algo e não uma estrutura
  2. Eles fazem coisas realmente interessantes, como análise de código estático e análise de fluxo de dados, das quais acho realmente agradável ver os detalhes.
  3. Uma coisa boa é que você pode usá-lo para realizar seu estudo, pois ele também pode executar toda a análise de código.

(é certo que eu sou um fã do JetBrains)

sylvanaar
fonte
2

Eu mesmo tenho procurado por esse projeto e resolvi CLang.

  • É relativamente novo (descendência do LLVM, que tem apenas 10 anos), então nenhum código (ou não que eu tenha visto) obsoleto
  • Um design modular (como LLVM), extremamente bem pensado, que eu acho muito importante hoje em dia
  • Código muito limpo, bem comentado (você costuma ver citações do Padrão para explicar as coisas)
  • Um conjunto de testes / ambiente de teste muito bem projetado

Não há muitos padrões de design por lá, alguns visitantes aqui e ali, mas é isso. As hierarquias de classe são simples e diretas ... Na verdade, acho que a simplicidade é o objetivo, não parece haver excesso de engenharia.

Dito isso, sendo crítico no desempenho, várias decisões de design podem parecer duvidosas (evitando funções virtuais para vários objetos, compilando sem RTTI / exceções); portanto, nem tudo é aplicável ao software cotidiano.

Matthieu M.
fonte
1

O Blender é bem estruturado e bem projetado.

dan_waterworth
fonte
0

Joomla, é muito bem feito. Mas não tenho certeza se suas 100.000 linhas

Imran Omar Bukhsh
fonte
5
Hahahaha mesmo?
Salman von Abbas
0

Então, apenas mais uma variante - e a linguagem de programação Nemerle ?

Não é tão popular (mas o GitHub acabou de destacar o Nemerle) e você pode encontrar muitos bons pontos por lá.

cnd
fonte