ซอฟต์แวร์โอเพนซอร์ซคุณภาพดีออกแบบมาอย่างดี [ปิด]


32

ฉันกำลังเรียนออกแบบซอฟต์แวร์ที่ฉันควรเลือกซอฟต์แวร์โอเพ่นซอร์สเพื่อวิเคราะห์จากมุมมองการออกแบบซอฟต์แวร์

มันจะต้องเป็นโครงการขนาดใหญ่: ไม่น้อยกว่า 100,000 บรรทัดของรหัส

ฉันอยากจะเลือกซอฟต์แวร์ที่ได้รับการออกแบบมาเป็นอย่างดีและออกแบบให้มีความเข้าใจในการออกแบบซอฟต์แวร์ที่ดี

โดยการออกแบบที่ดีฉันหมายถึงสิ่งต่าง ๆ เช่นคลาสที่มีความหมายและสถาปัตยกรรมการใช้รูปแบบ (การออกแบบ) ที่ดีการใช้สิ่งที่เป็นนามธรรมการจัดองค์ประกอบที่ดีการประสานที่สูง

คุณมีซอฟต์แวร์อะไรบ้างที่จะแนะนำฉัน

ทราบว่าซอฟต์แวร์เพียงแค่ต้องมีการออกแบบที่ดีการออกแบบไม่จำเป็นต้องมีเอกสาร! :)

มันไม่จำเป็นต้องเป็นแอปพลิเคชั่นสำหรับผู้ใช้ ... มันอาจจะเป็นห้องสมุดเครื่องมือ ฯลฯ ...


3
ทำไมถามเรา คุณสนใจอะไร ถ้าฉันแนะนำแพ็คเกจการบัญชีและคุณพบว่าการเบื่อบัญชีมันจะไม่เป็นคำตอบที่ดีใช่มั้ย แพ็คเกจแบบไหนที่คุณสนใจ? ดูที่แรกแล้วถามเราเกี่ยวกับแพคเกจเฉพาะที่คุณดู
S.Lott

ขอบคุณที่ชี้นำ ฉันต้องบอกว่าเครื่องมือในการพัฒนาซอฟต์แวร์น่าสนใจสำหรับฉัน
Andrea Zilio

แพลตฟอร์มใดที่คุณต้องการใช้?

3
ดูสถาปัตยกรรมของแอพพลิเคชั่นโอเพนซอร์ซซึ่งอธิบายแอพพลิเคชั่นโอเพนซอร์ซที่ได้รับการออกแบบมาอย่างดี
ริชาร์ด

บรรทัดของการวัดโค้ดนั้นไม่ชัดเจน ขนาดของไฟล์ที่เรียกทำงานได้และ dll ทั้งหมดที่ขึ้นอยู่กับมันอาจบอกอะไรคุณได้บ้าง ถ้ามีไลบรารี่ที่ดีมันก็สมเหตุสมผลดีที่จะใช้มัน จากนั้นฉันจะนับบรรทัดของห้องสมุดเป็นส่วนหนึ่งของจำนวน LOC ทั้งหมดของฉันหรือไม่ ฉันจะบอกว่ากรอบงานจำนวนมาก (ไลบรารี, APIs, SDK หรือชื่อใดก็ตามที่คุณต้องการ) มีแนวโน้มที่จะดีมาก (พวกเขาได้รับความนิยมอย่างมากจากทุกมุมดังนั้นข้อผิดพลาดจะหาได้ง่ายและควรแก้ไขได้อย่างรวดเร็ว) เนื่องจาก coders ที่ดีจะใช้ประโยชน์จาก libs ที่ดีอื่น ๆ LOC แบบ actial จึงไม่จำเป็นต้องมีขนาดใหญ่สำหรับแอปพลิเคชันที่ซับซ้อน
งาน

คำตอบ:


23

จากการออกแบบที่ดีฉันหมายถึงสิ่งต่าง ๆ เช่นคลาสที่มีความหมายและสถาปัตยกรรมการใช้รูปแบบการออกแบบที่ดีการใช้สิ่งที่เป็นนามธรรมการจัดองค์ประกอบที่ดีการประสานที่สูงและการมีเพศสัมพันธ์ต่ำระหว่างส่วนประกอบ

ประการแรกซอฟต์แวร์ไม่ว่าจะดีหรือไม่ดีมันไม่ได้อยู่ในความสันโดษ แต่เป็นแบบจำลองสถานการณ์จริงที่มนุษย์คิดว่าเป็นปัญหาและมักเกี่ยวข้องกับสิ่งที่เรียกว่า "โดเมนแอปพลิเคชัน" เสมอ ดังนั้นเมื่อใดก็ตามที่คุณพูดถึงซอฟต์แวร์อันดับแรกคุณควรศึกษาและทำความเข้าใจเกี่ยวกับโดเมนเพื่อที่คุณจะสามารถใช้วิจารณญาณของสิ่งที่ดีและไม่ดีได้

  • git - ไม่เพียง แต่ดี แต่เป็นการออกแบบที่น่าทึ่ง มันไม่ได้เป็นตัวควบคุมเวอร์ชันที่เป็นแกนหลัก แต่เป็นระบบไฟล์ แผ่นไม้อัดบางของฟังก์ชั่นด้านบนของแกนทำให้มันเป็นระบบควบคุมเวอร์ชัน ทำความรู้จักกับภายในของคอมไพล์และความรู้สึกของการออกแบบซอฟต์แวร์ของคุณจะถูกรู้แจ้ง

  • jQuery - ไม่ใช่ไลบรารีเอกสารที่ดี (ภายใน) แต่แหล่งข้อมูลที่สร้างแรงบันดาลใจแสดงให้เห็นว่าโค้ด JavaScript ฝั่งไคลเอ็นต์สามารถทำสิ่งมหัศจรรย์ได้อย่างไร

  • NodeJS - หากคุณกำลังสร้างเซิร์ฟเวอร์โครงการนี้มีแนวคิดและรูปแบบใหม่ที่จะนำเสนอ

  • v8 - รหัส C ++ ที่ดีมากห้องสมุดที่ยอดเยี่ยมในการเรียนรู้ / ศึกษาการใช้งานเครื่องเสมือน

  • โครงการ NoSQL - Couch, Mongo, Redis, Cassandra - โครงการเหล่านี้แสดงให้เห็นถึงวิธีการที่ชาญฉลาดในการแก้ปัญหาการคงอยู่ พวกเขายอมรับแนวคิดของการคงอยู่ของคนหลายภาษา

  • เพิ่มห้องสมุด - ปริมาณ C ++ ที่ดี

  • OpenStack - โครงการที่ดีมากเกี่ยวกับ cloud computing และ virtualization

  • มูลนิธิซอฟต์แวร์ Apache - เลือกโครงการใดโครงการหนึ่งของพวกเขาและศึกษา โครงสร้างแบบแยกส่วนของ HTTPd เป็นแหล่งข้อมูลชั้นเยี่ยมหากคุณต้องการดูว่าส่วนประกอบต่างๆมารวมกันอย่างไร APR (runtime แบบพกพา apache) - lib ที่ดีจริงๆ

  • mod_wsgi - หนึ่งในโปรแกรม C ที่ดีที่สุดที่ฉันเคยเจอ

"การใช้รูปแบบการออกแบบที่ดี" - มันไม่สำคัญสำหรับรหัสที่จะสอดคล้องกับรูปแบบการออกแบบที่รู้จักกันดี - มันสำคัญกว่าที่จะแก้ปัญหา "อย่างชาญฉลาด" - ซึ่งมันสามารถบำรุงรักษาได้นำมาใช้ใหม่และสามารถอ่านได้ หากรหัสถูกยัดเยียดให้เป็น "รูปร่าง" โดยเฉพาะ - เพียงเพื่อให้เป็นไปตามรูปแบบการออกแบบ - อาจเป็นรหัสที่ไม่ดี

"ไม่น้อยกว่า 100,000 บรรทัดของรหัส" - ตั้งแต่เมื่อใดจำนวนบรรทัดกลายเป็นตัวชี้วัดคุณภาพที่ดี - การได้รับรสชาติของ "ซอฟต์แวร์ที่ออกแบบมาอย่างดี / สถาปัตยกรรม" ไม่จำเป็นต้องเป็นเรื่องใหญ่

อีกครั้งอย่าลืมศึกษาธรรมชาติและความแตกต่างของโดเมนปัญหาก่อนจากนั้นจึงอ่านรหัส

อัปเดต: ต.ค. 2558

InfluxDB - https://influxdb.com/ โครงการ Go นี้อยู่ระหว่างการพัฒนาที่ใช้งานอยู่และยังไม่ซับซ้อนมาก ดังนั้นคุณสามารถเริ่มต้นด้วยการขุดเป็นรหัสได้ง่ายกว่า OpenStack


13

โยนเหรียญ โครงการโอเพนซอร์ซขนาดใหญ่ทุกโครงการต้องยอดเยี่ยมเพื่อความอยู่รอด โครงการ Apache, Linux, GNU นั้นยอดเยี่ยม


4
โครงการ OSS ที่ดำเนินการโดยชุมชนขนาดใหญ่ทั้งหมดต้องมีคุณสมบัติที่เหมาะสมเพื่อความอยู่รอด จะไม่พูดเก่ง สำหรับสิ่งที่กล่าวโดยส่วนใหญ่โครงการของรัฐบาลที่ทำโดยพนักงานโดยเฉพาะคุณภาพของรหัสนั้นไม่ใช่สิ่งที่สำคัญที่สุดในรายการที่มีความสำคัญ แต่ +1 สำหรับตัวอย่างของคุณ
TZHX

8
เป็น Wordpress ที่ยอดเยี่ยม?
ดึง

9
  • โครเมียม
  • Firefox
  • อาปาเช่
  • MySQL
  • PostgreSQL
  • ลินุกซ์
  • GNU

2
คุณแน่ใจหรือว่า Firefox ไม่เกลื่อนไปด้วยโค้ดที่เขียนในช่วงต้นยุค 90 ที่ซบเซา? ดูเหมือนจะไม่เป็นรหัสที่ดีสำหรับการศึกษาวิธีการเขียนโค้ดสมัยใหม่
TheLQ

3
ซอร์สโค้ดสำหรับ Firefox และ MySQL เป็นส่วนที่แย่มากที่ไม่ควรใช้เป็นตัวอย่างของการออกแบบซอฟต์แวร์ที่ดี
Jordan

7

หลาม โดยเฉพาะ 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/

โดยรวมแล้วซอฟต์แวร์ประเภทใดที่มีคุณภาพสูง คำถามตัวเองเป็นเรื่องส่วนตัวมาก ผู้ใช้มีการวัดคุณภาพที่แตกต่างกัน ผู้ใช้หนึ่งรายอาจพิจารณาว่าซอฟต์แวร์บรรจุภัณฑ์มีคุณภาพสูงขึ้นอยู่กับข้อดีทางเทคนิค ที่ซึ่งผู้ใช้รายอื่นอาจวัดคุณภาพตามความสวยงามของส่วนต่อประสานผู้ใช้และประสบการณ์การใช้งานโดยรวม

จากมุมมองทางธุรกิจพวกเขามักจะวัดคุณภาพซอฟต์แวร์ขึ้นอยู่กับว่ามันเป็นไปตามความคาดหวังของลูกค้าหรือพวกเขากำลังปฏิบัติตามภาระผูกพันตามสัญญาของลูกค้า นอกจากนี้ยังมีความเป็นมืออาชีพ แต่ขึ้นอยู่กับว่าคุณมองจากด้านใดของรั้ว

จากมุมมองของโปรแกรมเมอร์ความงดงามของการออกแบบและสร้างของ 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.