適切に設計された/高品質のオープンソースソフトウェア[非公開]


32

私は、ソフトウェアデザインの観点から分析するオープンソースソフトウェアを選択する必要があるソフトウェアデザインクラスを受講しています。

それは大きなプロジェクトでなければなりません:100,000行以上のコード。

優れたソフトウェア設計に関する優れた洞察を得るために、非常によく設計され、設計されたソフトウェアを選択したいと考えています。

良い設計とは、意味のあるクラスとアーキテクチャ、(設計)パターンの適切な使用、抽象化の適切な使用、コンポーネントの適切な編成、コンポーネント間の高い凝集性と低い結合などを意味します。

私に提案するソフトウェアはありますか?

ソフトウェアには適切な設計が必要なだけで、設計を文書化する必要はありません。:)

エンドユーザー用のアプリケーションである必要はありません...また、ライブラリ、ツールなどにすることもできます...


3
なぜ私たちに尋ねますか?何に興味がありますか?会計パッケージを提案し、会計が退屈だと思ったら、それは良い答えではないでしょうか?どのようなパッケージに興味がありますか?最初にそれらを見てから、調べた特定のパッケージについてお問い合わせください。
-S.Lott

それを指摘してくれてありがとう。私は、ソフトウェア開発ツールが私にとって興味があると言わなければなりません。
アンドレアジリオ

使用したい特定のプラットフォームはありますか?

3
多くの適切に設計されたオープンソースアプリケーションについて説明している「オープンソースアプリケーションのアーキテクチャ」をご覧ください。
リチャード

コードメジャーの行はあいまいです。実行可能ファイルのサイズと、実行可能ファイルが依存するすべてのdllから、何かがわかります。優れたライブラリが存在する場合は、それを使用するだけの意味があります。次に、合計LOCカウントの一部としてライブラリの行をカウントしますか?多くのフレームワーク(ライブラリ、API、SDK、または任意の名前)は非常に優れている傾向があると言えます(あらゆる角度から多くのヒットが発生するため、バグはすぐに見つかり、すぐに修正する必要があります)。優れたコーダーは他の優れたライブラリを活用するため、複雑なアプリケーションの場合、実際のLOCを大きくする必要はありません。
ジョブ

回答:


23

適切な設計とは、意味のあるクラスとアーキテクチャ、設計パターンの適切な使用、抽象化の適切な使用、コンポーネントの適切な編成、コンポーネント間の高い結合性と低い結合などを意味します。

第一に、善悪を問わずソフトウェアは孤独ではありません。人間が問題と考えている現実世界のシナリオをモデル化しているため、常に「アプリケーションドメイン」と呼ばれるものと密接に関連しています。したがって、ソフトウェアについて話すときはいつでも、最初にドメインを知って研究してください。その場合にのみ、善と悪の裁量を達成できます。

  • git –良いだけでなく、素晴らしいデザイン。コアのバージョン管理ではなく、単なるファイルシステムです。コアの上部にある機能の薄いベニアにより、バージョン管理システムになります。gitの内部を知ると、ソフトウェア設計の感覚が啓発されます。

  • jQuery –非常に(内部的に)文書化されたライブラリではありませんが、クライアント側のJavaScriptコードが驚くべきことを行う方法を示す刺激的なソースです。

  • NodeJS –サーバーの作成に興味がある場合、このプロジェクトには新しいアイデアやパターンがあります。

  • v8 –非常に優れたC ++コード、仮想マシンの実装を学習/研究するための素晴らしいライブラリ。

  • NoSQLプロジェクト – Couch、Mongo、Redis、Cassandra –これらのプロジェクトは、永続性の問題を解決するスマートな方法を示しています。また、ポリグロットの持続性の考え方も取り入れています。

  • ライブラリのブースト – C ++の適量。

  • OpenStack –クラウドコンピューティングと仮想化に関する非常に優れたプロジェクト。

  • Apache Software Foundation –プロジェクトを選択して研究します。HTTPdのモジュール構造は、コンポーネントがどのように組み合わされるかを知りたい場合に最適なソースです。APR(Apache Portable Runtime)–非常に優れたライブラリでもあります。

  • mod_wsgi –私が出会った中で最高のCプログラムの1つ。

「デザインパターンの適切な使用」-コードが既知のデザインパターンに対応することは重要ではありません-「スマートに」問題を解決することがより重要です-保守可能で、再利用可能で、読みやすいことです。コードが特定の「形状」に詰め込まれている場合(設計パターンに準拠するためだけ)、それは悪いコードになる可能性があります。

「100,000行以上」のコード-行数が高品質のメトリックになったのはいつか-「適切に設計/構築されたソフトウェア」を味わうために、BIGである必要はありません。

繰り返しますが、最初に問題領域の性質とニュアンスを研究し、次にコードを読むことを忘れないでください。

更新:2015年10月

InfluxDB- https: //influxdb.com/ このGoプロジェクトは活発に開発中であり、まだそれほど複雑ではありません。そのため、OpenStackのようなものよりも比較的簡単にコードを掘り始めることができます。


13

コインを投げます。大規模なオープンソースプロジェクトはすべて、生き残るために素晴らしいものでなければなりません。Apache、Linux、GNUプロジェクトはすべて素晴らしいです。


4
コミュニティが運営する大規模なOSSプロジェクトはすべて、少なくとも生き残るためにはまともでなければなりません。素晴らしいとは言いません。政府のプロジェクトが従業員のみによって行われていると言われている場合、コードの品質は常に優先順位リストの最高のものとは限りません。しかし、あなたの例では+1。
TZHX

8
Wordpressは素晴らしいですか?
ドリュー

9
  • クロム
  • Firefox
  • アパッチ
  • MySQL
  • PostgreSQL
  • Linux
  • GNU

2
Firefoxには90年代前半に書かれた停滞したコードが散らばっていませんか?近代的なコーディングプラクティスを勉強のためのコードの良い作品であるように思わないこと
TheLQ

3
FirefoxとMySQLのソースコードは恐ろしいがらくたの断片であり、優れたソフトウェア設計の例として決して使用すべきではありません。
ヨルダン

7

Python。具体的には、主要な実装であるCPython。バージョン3.2の場合、インタープリターは約50k slocのCコード、400k slocのPythonコードを超える標準ライブラリを実行します。言語の品質が非常に高く、可読性と優れた設計の原則が奨励されていることを考えると、このコードはすべて非常に優れていると思います。


4

TeXとMetaFontは、研究する価値がありますhttp : //www.tug.org/

ローカルライブラリは、ソースの印刷版を支援します。


3

オープンソースプロジェクトを選ぶ前に、次の本を読むことをお勧めします。これにより、良い/悪いコードと見なされるものについての洞察が得られます。

Greg Wilsonが
ソフトウェアを実際に機能させるものと
、オープンソースアプリケーションのアーキテクチャを信じる理由

http://blog.stackoverflow.com/2011/06/se-podcast-09/を見る前に著者の話を聞くことに興味がある場合は、ブログスタック交換インタビューも
ご覧ください。

全体として、高品質のソフトウェアと見なされるものは何ですか?質問自体は非常に主観的です。ユーザーは品質の異なる測定値を持っています。1人のユーザーは、技術的なメリットに応じて、ソフトウェアパッケージを高品質と見なす場合があります。別のユーザーが、ユーザーインターフェイスの外観と全体的なユーザーエクスペリエンスに基づいて品質を評価する場合。

通常、ビジネスの観点からは、クライアントの期待に応えるか、クライアントの契約上の義務を満たしているかに応じて、ソフトウェアの品質を測定します。専門的な行為もありますが、それはフェンスのどちら側から見るかによって異なります。

プログラマーの観点から見ると、ソフトウェアが作成された時点でのAPIの設計と構成はどれほどエレガントでしたか。同じデザインまたはコード標準は、プログラマーの態度や見解が時間とともに変化する場合、専門的でないと見なされる場合があります。


2

ソフトウェアツールが好きだと言っているので、IntelliJ Community Editionをお勧めします。

http://www.jetbrains.org/

私がそれについて好きなもの:

  1. フレームワークではなく何かを行うツールです
  2. 静的コード分析やデータフロー分析など、非常に興味深いことを行っており、詳細を見るのが本当に楽しいと感じています。
  3. 良い点は、それ自体ですべてのコード分析を実行する機能があるため、それを使用して研究を実行できることです。

(確かに私はJetBrainsのファンです)


2

私はそのようなプロジェクトを自分で探していて、に落ち着きましたCLang

  • 比較的新しい(わずか10歳のLLVMの子孫)ので、古いコードはありません(または私が見たことがない)
  • 非常によく考え抜かれたモジュール設計(LLVMとして)、これは最近非常に重要だと思います
  • 非常にきれいなコード、よくコメントされています(物事を説明するために標準から引用符がよく見られます)
  • 非常にうまく設計されたテストスイート/テスト環境

そこには多くのデザインパターンはなく、あちこちに数人の訪問者がいますが、それはそれについてです。クラス階層は単純で、簡単です...実際、単純さが目標であり、過剰なエンジニアリングは行われていないようです。

とはいえ、パフォーマンスが重要であるため、多くの設計上の決定は疑わしい(多数のオブジェクトの仮想関数を避け、RTTI /例外なしでコンパイルする)ので、すべてが日常のソフトウェアに適用できるわけではありません。




0

それでは、もう1つのバリアント-Nemerleプログラミング言語はどうでしょうか?

人気はあまりありませんが(GitHubはNemerleの強調表示を追加したばかりです)、多くの優れた点を見つけることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.