Phần mềm nguồn mở được thiết kế tốt / chất lượng cao [đã đóng]


32

Tôi đang tham gia một lớp thiết kế phần mềm nơi tôi nên chọn một phần mềm nguồn mở để phân tích theo quan điểm Thiết kế phần mềm.

Nó phải là một dự án lớn: không dưới 100.000 dòng mã.

Tôi thực sự muốn chọn một phần mềm được thiết kế và kiến ​​trúc rất tốt để có những hiểu biết tốt về thiết kế phần mềm tốt.

Theo thiết kế tốt, ý tôi là những thứ như các lớp và kiến ​​trúc có ý nghĩa, sử dụng tốt các mẫu (thiết kế), sử dụng tốt tính trừu tượng, tổ chức tốt các thành phần, độ gắn kết cao và độ khớp nối thấp giữa các thành phần, v.v ...

Bạn có phần mềm nào gợi ý cho tôi không?

Lưu ý rằng phần mềm chỉ cần có một thiết kế tốt, thiết kế không cần phải được ghi lại! :)

Nó không cần phải là một ứng dụng cho người dùng cuối ... Nó cũng có thể là một thư viện, một công cụ, v.v ...


3
Tại sao hỏi chúng tôi? bạn hứng thú cái gì? Nếu tôi đề xuất một gói kế toán và bạn thấy kế toán nhàm chán, nó sẽ không phải là một câu trả lời tốt phải không? Những loại gói bạn quan tâm? Nhìn vào những cái đầu tiên, sau đó hỏi chúng tôi về các gói cụ thể mà bạn đã xem.
S.Lott

Cảm ơn đã chỉ ra điều đó. Tôi phải nói rằng các công cụ phát triển phần mềm sẽ được tôi quan tâm.
Andrea Zilio

Bất kỳ nền tảng cụ thể nào bạn muốn sử dụng?

3
Hãy xem Kiến trúc của các ứng dụng nguồn mở mô tả một số ứng dụng nguồn mở được thiết kế tốt.
Richard

Các dòng đo lường mã là mơ hồ. Kích thước của tệp thực thi và tất cả các dll mà nó phụ thuộc vào có thể cho bạn biết điều gì đó. nếu có một thư viện tốt ngoài kia, nó chỉ có ý nghĩa để sử dụng nó. Sau đó, tôi có đếm các dòng của thư viện như là một phần của tổng số LỘC của tôi hay không? Tôi có thể nói rằng nhiều khung (thư viện, API, SDK hoặc bất kỳ tên nào bạn thích) có xu hướng rất tốt (chúng bị ảnh hưởng rất nhiều từ mọi góc độ, vì vậy lỗi rất nhanh để tìm và nên nhanh chóng khắc phục). Vì các lập trình viên giỏi sẽ tận dụng các lib tốt khác, LỘC hành động không cần phải lớn đối với một ứng dụng phức tạp.
Công việc

Câu trả lời:


23

Theo thiết kế tốt, ý tôi là những thứ như các lớp và kiến ​​trúc có ý nghĩa, sử dụng tốt các mẫu thiết kế, sử dụng tốt sự trừu tượng, tổ chức tốt các thành phần, độ gắn kết cao và độ khớp nối thấp giữa các thành phần

Đầu tiên, một phần mềm, tốt hay xấu, không sống trong sự cô độc - nó mô hình hóa một kịch bản trong thế giới thực mà con người quan niệm là một vấn đề và do đó luôn gắn liền với một thứ gọi là "miền ứng dụng". Vì vậy, bất cứ khi nào bạn nói về phần mềm, trước tiên hãy biết và nghiên cứu tên miền - chỉ sau đó bạn mới có thể đạt được sự quyết định tốt và xấu.

  • git - không chỉ tốt, mà là một thiết kế tuyệt vời. Nó không phải là một điều khiển phiên bản ở cốt lõi của nó, chỉ là một hệ thống tập tin. Một veneer mỏng chức năng trên đầu lõi làm cho nó một hệ thống kiểm soát phiên bản. Nhận biết nội bộ của git, và ý thức của bạn về thiết kế phần mềm sẽ được khai sáng.

  • jQuery - không phải là một thư viện tài liệu rất tốt (nội bộ), nhưng là một nguồn cảm hứng cho thấy cách mã JavaScript phía máy khách có thể làm nên điều kỳ diệu.

  • NodeJS - nếu bạn tham gia vào việc tạo máy chủ, dự án này có những ý tưởng và mô hình mới để cung cấp.

  • v8 - mã C ++ rất tốt, thư viện tuyệt vời để tìm hiểu / nghiên cứu triển khai máy ảo.

  • Các dự án NoQuery - Couch, Mongo, Redis, Cassandra - những dự án này thể hiện những cách thông minh để giải quyết các vấn đề dai dẳng. Ngoài ra họ nắm lấy ý tưởng của sự kiên trì polyglot.

  • Thư viện Boost - liều tốt của C ++.

  • OpenStack - các dự án rất tốt về điện toán đám mây và ảo hóa.

  • Quỹ phần mềm Apache - Chọn bất kỳ dự án nào của họ và nghiên cứu nó. Cấu trúc mô đun của HTTPd là một nguồn tuyệt vời nếu bạn muốn xem các thành phần kết hợp với nhau như thế nào. APR (apache xách tay thời gian chạy) - một lib thực sự tốt cũng có.

  • mod_wsgi - một trong những chương trình C tốt nhất tôi từng gặp.

"sử dụng tốt các mẫu thiết kế" - điều quan trọng là mã không tương ứng với mẫu thiết kế nổi tiếng - điều quan trọng hơn là nó giải quyết vấn đề "một cách thông minh" - rằng nó có thể duy trì, có thể tái sử dụng và có thể đọc được. Nếu mã được nhồi nhét vào một "hình dạng" cụ thể - chỉ để tuân thủ một mẫu thiết kế - đó có thể là mã xấu.

"không ít hơn 100.000 dòng mã" - từ khi nào số lượng dòng trở thành một thước đo có chất lượng tốt - nhận được một "phần mềm được thiết kế / kiến ​​trúc tốt" không đòi hỏi nó phải LỚN.

Một lần nữa, hãy nhớ nghiên cứu bản chất và sắc thái của miền vấn đề trước, sau đó đi sâu vào đọc mã.

CẬP NHẬT: Tháng 10 năm 2015

InfluxDB - https://influxdb.com/ Dự án Go này đang được phát triển tích cực và vẫn KHÔNG phức tạp lắm. Vì vậy, bạn có thể bắt đầu với việc đào sâu vào mã tương đối dễ dàng hơn so với một cái gì đó như OpenStack.


13

Tung đồng xu. Tất cả các dự án nguồn mở lớn phải rực rỡ để tồn tại. Các dự án Apache, Linux, GNU đều tuyệt vời.


4
Tất cả các dự án OSS lớn do cộng đồng điều hành phải ít nhất là tốt để tồn tại. Sẽ không nói xuất sắc. Đối với những điều chủ yếu nói, các dự án của chính phủ được thực hiện bởi nhân viên, chất lượng mã không phải luôn là điều cao nhất trong danh sách ưu tiên. Nhưng +1 cho ví dụ của bạn.
TZHX

8
Wordpress có rực rỡ không?
vẽ

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

2
Bạn có chắc rằng Firefox không bị vấy bẩn bởi những đoạn mã bị đình trệ được viết vào đầu những năm 90? Đó dường như không phải là một đoạn mã tốt để nghiên cứu các thực hành mã hóa hiện đại
TheLQ

3
Mã nguồn cho Firefox và MySQL là những thứ nhảm nhí khủng khiếp không bao giờ được sử dụng làm ví dụ về thiết kế phần mềm tốt.
Jordan

7

Con trăn. Cụ thể, CPython, việc thực hiện chính. Đối với phiên bản 3.2, trình thông dịch chạy khoảng 50 nghìn mã C, thư viện chuẩn trên 400 nghìn mã Python. Với chất lượng ngôn ngữ cực kỳ cao và sự khuyến khích của nó về các nguyên tắc dễ đọc và thiết kế tốt, tôi sẽ nghĩ rằng tất cả các mã này sẽ khá tốt.


4

TeX cùng với MetaFont thực sự đáng để nghiên cứu: http://www.tug.org/

Thư viện địa phương của bạn có thể giúp bạn với các phiên bản in của các nguồn.


3

Tôi khuyên bạn nên đọc cuốn sách sau trước khi chọn một dự án nguồn mở. Điều này sẽ cung cấp cho bạn cái nhìn sâu sắc về những gì có thể được coi là mã tốt / xấu.

Greg Wilson
Làm phần mềm Những gì thực sự hoạt động và tại sao chúng tôi tin
Kiến trúc của các ứng dụng nguồn mở

Đây cũng là cuộc phỏng vấn trao đổi ngăn xếp Blog của anh ấy nếu bạn muốn nghe tác giả trước khi xem
http://blog.stackoverflow.com/2011/06/se-podcast-09/

Nhìn chung những gì được coi là phần mềm chất lượng cao? Câu hỏi tự nó rất chủ quan. Người dùng có số đo khác nhau về chất lượng. Một người dùng có thể coi gói phần mềm có chất lượng cao tùy thuộc vào giá trị kỹ thuật. Trường hợp người dùng khác có thể đánh giá chất lượng dựa trên tính thẩm mỹ của giao diện người dùng và trải nghiệm người dùng tổng thể.

Từ góc độ kinh doanh, họ thường đo lường chất lượng phần mềm tùy thuộc vào việc nó đáp ứng mong đợi của khách hàng hay họ đang đáp ứng các nghĩa vụ theo hợp đồng của khách hàng. Cũng có hành vi chuyên nghiệp nhưng điều đó phụ thuộc vào phía nào của hàng rào bạn xem nó từ.

Từ quan điểm của các lập trình viên, thiết kế và cấu trúc của API thanh lịch như thế nào tại thời điểm phần mềm được tạo ra. Thiết kế hoặc tiêu chuẩn mã tương tự có thể được coi là không chuyên nghiệp khi thái độ và quan điểm của các lập trình viên thay đổi theo thời gian.


2

Tôi sẽ đề xuất IntelliJ Community Edition vì bạn đề cập rằng bạn thích các công cụ phần mềm.

http://www.jetbrains.org/

Những gì tôi thích về nó:

  1. Nó là một công cụ làm một cái gì đó chứ không phải là một khung
  2. Họ làm những việc thực sự thú vị như phân tích mã tĩnh và phân tích luồng dữ liệu mà tôi thấy thực sự thú vị khi xem chi tiết.
  3. Một điều tuyệt vời là bạn có thể sử dụng nó để thực hiện nghiên cứu của mình vì nó cũng có khả năng tự chạy tất cả các phân tích mã.

(phải thừa nhận tôi là fanboy của JetBrains)


2

Tôi đã tự mình tìm kiếm một dự án như vậy và giải quyết CLang.

  • Nó tương đối mới (con đẻ của LLVM chỉ mới 10 tuổi), vì vậy không có (hoặc không phải là tôi đã thấy) mã cũ
  • Một thiết kế mô-đun (như LLVM), được suy nghĩ rất tốt, mà tôi nghĩ là rất quan trọng hiện nay
  • Mã rất sạch sẽ, được nhận xét tốt (bạn thường thấy các trích dẫn từ Tiêu chuẩn để giải thích mọi thứ)
  • Một bộ thử nghiệm / môi trường thử nghiệm được thiết kế rất độc đáo

Không có nhiều Mẫu thiết kế ở đó, một vài Khách truy cập ở đây và ở đó nhưng đó là về nó. Hệ thống phân cấp lớp rất đơn giản và dễ hiểu ... Thật ra, tôi nghĩ sự đơn giản là mục tiêu, dường như không có bất kỳ kỹ thuật quá mức nào đang diễn ra.

Điều đó nói rằng, là hiệu suất quan trọng, một số quyết định thiết kế có vẻ không rõ ràng (tránh các chức năng ảo cho nhiều đối tượng, biên dịch mà không có RTTI / ngoại lệ), vì vậy không phải mọi thứ đều có thể áp dụng cho phần mềm hàng ngày.




0

Vì vậy, chỉ là một biến thể khác - Thế còn ngôn ngữ lập trình Nemerle thì sao?

Nó không quá phổ biến (nhưng GitHub chỉ thêm phần tô sáng cho Nemerle) và bạn có thể tìm thấy nhiều điểm tốt ở đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.