잘 설계된 / 고품질 오픈 소스 소프트웨어 [닫기]


32

소프트웨어 디자인 관점에서 분석 할 오픈 소스 소프트웨어를 선택해야하는 소프트웨어 디자인 클래스를 사용하고 있습니다.

100,000 줄 이상의 코드와 같은 큰 프로젝트 여야합니다.

저는 훌륭한 소프트웨어 디자인에 대한 통찰력을 갖도록 매우 잘 설계되고 설계된 소프트웨어를 선택하고 싶습니다.

좋은 디자인이란 의미있는 클래스와 아키텍처, (디자인) 패턴의 좋은 사용, 추상화의 좋은 사용, 좋은 구성 요소의 구성, 높은 응집력 및 구성 요소 간의 낮은 결합 등과 같은 것을 의미합니다.

나에게 제안 할 소프트웨어가 있습니까?

소프트웨어는 단지 좋은 디자인을 가져야하며 디자인을 문서화 할 필요는 없습니다. :)

최종 사용자를위한 응용 프로그램 일 필요는 없습니다. 또한 라이브러리, 도구 등일 수도 있습니다.


3
왜 우리에게 물어? 어떤 관심사? 회계 패키지를 제안하고 회계 지루한 것을 발견하면 좋은 대답이 아닐까요? 어떤 종류의 패키지에 관심이 있습니까? 먼저 그것들 을보고 당신이 본 특정 패키지 에 대해 문의하십시오 .
S.Lott

지적 해 주셔서 감사합니다. 소프트웨어 개발 툴에 관심이 있다고 말해야합니다.
Andrea Zilio

사용하려는 특정 플랫폼이 있습니까?

3
잘 설계된 여러 오픈 소스 응용 프로그램 을 설명하는 오픈 소스 응용 프로그램 아키텍처를 살펴보십시오 .
Richard

코드 측정 라인이 모호합니다. 실행 파일의 크기와이 파일이 의존하는 모든 dll이 무언가를 말해 줄 수 있습니다. 좋은 라이브러리가 있다면 그것을 사용하는 것이 합리적입니다. 그런 다음 총 LOC 수의 일부로 라이브러리 라인을 계산합니까? 필자는 많은 프레임 워크 (라이브러리, API, SDK 또는 원하는 이름)가 매우 좋은 경향이 있다고 말합니다. 좋은 코더는 다른 좋은 라이브러리를 활용할 것이기 때문에 복잡한 LOC는 복잡한 응용 프로그램을 위해 클 필요는 없습니다.
Job

답변:


23

좋은 디자인이란 의미있는 클래스와 아키텍처, 디자인 패턴의 좋은 사용, 추상화의 좋은 활용, 좋은 구성 요소의 구성, 높은 응집력 및 구성 요소 간의 낮은 결합과 같은 것을 의미합니다.

첫째, 좋든 나쁘 든 소프트웨어는 고독한 생활을하지 않습니다. 인간이 문제로 생각하는 실제 시나리오를 모델링하여 항상 "응용 프로그램 도메인"과 밀접한 관련이 있습니다. 따라서 소프트웨어에 대해 이야기 할 때마다 먼저 도메인을 알고 연구하십시오. 그러면 오직 선과 악의 재량을 얻을 수 있습니다.

  • git – 단지 좋은 것이 아니라 놀라운 디자인. 핵심은 버전 제어가 아니라 파일 시스템입니다. 핵심 위에 기능이 얇아져 버전 관리 시스템이됩니다. git의 내부를 배우면 소프트웨어 디자인 감각이 향상됩니다.

  • jQuery – 매우 내부적으로 문서화 된 라이브러리는 아니지만 클라이언트 측 JavaScript 코드가 어떻게 놀라운지를 보여주는 영감을주는 소스입니다.

  • NodeJS – 서버를 만드는 중이 라면이 프로젝트는 새로운 아이디어와 패턴을 제공합니다.

  • v8 – 아주 좋은 C ++ 코드, 가상 머신 구현을 배우고 연구하는 환상적인 라이브러리.

  • NoSQL 프로젝트 – Couch, Mongo, Redis, Cassandra –이 프로젝트는 지속성 문제를 해결하는 현명한 방법을 보여줍니다. 또한 그들은 polyglot persistence라는 아이디어를 받아들입니다.

  • 라이브러리를 향상 – C ++의 좋은 복용량.

  • OpenStack – 클라우드 컴퓨팅 및 가상화에 대한 훌륭한 프로젝트.

  • Apache Software Foundation – 프로젝트를 선택하고 연구하십시오. HTTPd의 모듈 구조는 구성 요소가 어떻게 결합되는지 확인하려는 경우 훌륭한 소스입니다. APR (apache portable runtime) – 정말 좋은 라이브러리이기도합니다.

  • mod_wsgi – 내가 본 최고의 C 프로그램 중 하나입니다.

"디자인 패턴의 올바른 사용"– 코드가 잘 알려진 디자인 패턴과 일치하는 것은 중요하지 않습니다. 문제를 "똑똑하게"해결하는 것이 더 중요합니다. 유지 관리 가능하고 재사용 가능하며 읽을 수 있어야합니다. 디자인 패턴을 준수하기 위해 코드가 특정 "모양"으로 밀려 들어가면 코드가 잘못 될 수 있습니다.

"10 만 줄 이상의 코드"– 언제 줄 수가 좋은 품질의 지표가 되었기 때문에 "잘 설계된 / 아키텍처 소프트웨어"를 맛 보려면 BIG 일 필요가 없습니다.

다시 말하지만, 문제 영역의 본질과 뉘앙스를 먼저 연구 한 다음 코드를 읽으십시오.

업데이트 : 2015 년 10 월

InfluxDB- https: //influxdb.com/ 이 Go 프로젝트는 현재 개발 중이며 여전히 그리 복잡하지 않습니다. 따라서 OpenStack과 같은 코드보다 비교적 쉽게 코드를 파고 시작할 수 있습니다.


13

동전을 던지세요. 모든 대형 오픈 소스 프로젝트는 살아 남기 위해 훌륭해야합니다. 아파치, 리눅스, GNU 프로젝트는 모두 훌륭합니다.


4
모든 대규모 커뮤니티 운영 OSS 프로젝트는 살아 남기 위해 최소한 괜찮아 야합니다. 화려한 말을하지 않습니다. 주로 직원들이 독점적으로 수행하는 정부 프로젝트의 경우 코드 품질이 항상 우선 순위 목록에서 가장 높은 것은 아닙니다. 그러나 귀하의 예는 +1입니다.
TZHX

8
워드 프레스는 훌륭합니까?
Drew

9
  • 크롬
  • Firefox
  • 아파치
  • MySQL
  • PostgreSQL
  • 리눅스
  • 암소 비슷한 일종의 영양

2
Firefox가 90 년대 초에 작성된 정체 된 코드 조각으로 가득 차 있지 않습니까? 그것은 현대적인 코딩 관행을 연구하기위한 좋은 코드가 아닌 것 같습니다
TheLQ

3
Firefox와 MySQL의 소스 코드는 훌륭한 소프트웨어 디자인의 예로 사용해서는 안되는 끔찍한 쓰레기입니다.
Jordan

7

파이썬. 특히 CPython은 기본 구현입니다. 버전 3.2의 경우, 인터프리터는 약 50k 슬로 C 코드, 400k 슬로 파이썬 코드의 표준 라이브러리를 실행합니다. 언어의 품질이 매우 우수하고 가독성과 디자인의 원칙에 대한 격려가 주어지면이 코드가 모두 훌륭하다고 생각합니다.


4

MetaFont와 함께 TeX는 실제로 연구 할 가치가 있습니다 : http://www.tug.org/

지역 도서관은 인쇄본의 소스를 도와 줄 수 있습니다.


3

오픈 소스 프로젝트를 선택하기 전에 다음 책을 읽는 것이 좋습니다. 이렇게하면 좋은 / 나쁜 코드로 간주 될 수있는 것에 대한 통찰력을 얻을 수 있습니다.

Greg Wilson
소프트웨어
의 실질적인 기능과 오픈 소스 애플리케이션의 아키텍처를 믿는 이유

그의 http://blog.stackoverflow.com/2011/06/se-podcast-09/를보기 전에 저자의 의견을 듣고 싶다면 그의 블로그 스택 교환 인터뷰도 있습니다.

전반적으로 고품질 소프트웨어로 간주되는 것은 무엇입니까? 질문 자체는 매우 주관적입니다. 사용자는 품질을 다르게 측정합니다. 한 사용자는 기술적 장점에 따라 소프트웨어 패키지가 고품질이라고 생각할 수 있습니다. 다른 사용자가 사용자 인터페이스의 미학과 전체 사용자 경험을 기반으로 품질을 측정 할 수있는 경우.

비즈니스 관점에서 이들은 일반적으로 고객의 기대에 부응하는지 또는 고객의 계약 의무를 충족하는지에 따라 소프트웨어 품질을 측정합니다. 전문적인 행동도 있지만 울타리의 어느 쪽에서 보느냐에 달려 있습니다.

프로그래머의 관점에서 볼 때 소프트웨어가 생성 될 당시 API의 디자인과 구성은 얼마나 우아합니다. 프로그래머의 태도와 시각이 시간이 지남에 따라 변할 때 동일한 디자인 또는 코드 표준이 전문가가 아닌 것으로 간주 될 수 있습니다.


2

소프트웨어 도구를 좋아한다고 언급 한 후 IntelliJ Community Edition을 제안합니다.

http://www.jetbrains.org/

내가 좋아하는 것 :

  1. 프레임 워크가 아닌 무언가를하는 도구입니다
  2. 정적 코드 분석 및 데이터 흐름 분석과 같은 흥미로운 내용을 자세히 볼 수 있습니다.
  3. 좋은 점은 모든 코드 분석 자체를 실행할 수 있기 때문에 연구를 수행하는 데 사용할 수 있다는 것입니다.

(분명히 나는 ​​JetBrains 팬보이입니다)


2

나는 그런 프로젝트를 직접 찾고 있었고 정착했다 CLang.

  • 비교적 새로운 (LLVM의 후손이 10 살)이므로 오래된 코드는 없습니다 (또는 보지 못했습니다)
  • LLVM과 같은 모듈 식 디자인으로, 현재 매우 중요하다고 생각합니다.
  • 매우 깨끗한 코드, 잘 주석 처리됨 (표준을 인용하여 내용을 설명하는 경우가 종종 있음)
  • 매우 훌륭하게 설계된 테스트 스위트 / 테스트 환경

거기에는 디자인 패턴이 많지 않으며 여기저기서 몇 명의 방문자가 있지만 그게 전부입니다. 클래스 계층 구조는 간단하고 간단합니다. 사실, 단순성 이 목표 라고 생각 합니다. 과도한 엔지니어링은 진행되지 않는 것 같습니다.

즉, 성능이 중요하기 때문에 많은 디자인 결정이 모호한 것처럼 보일 수 있습니다 (RTTI / 예외없이 컴파일하는 수많은 객체에 대한 가상 기능 피하기). 모든 것이 일상적인 소프트웨어에 적용되는 것은 아닙니다.




0

그래서 또 다른 변형 -Nemerle 프로그래밍 언어는 어떻습니까?

그것은 인기가 없지만 (GitHub는 Nemerle을 위해 강조 표시를 추가했습니다) 많은 좋은 점을 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.