İyi tasarlanmış / yüksek kaliteli açık kaynaklı yazılım [kapalı]


32

Yazılım Tasarım bakış açısıyla analiz etmek için açık kaynaklı bir yazılım seçmem gereken bir yazılım tasarım dersi alıyorum.

Büyük bir proje olmalı: 100.000 kod satırından az değil.

Gerçekten iyi bir tasarım için iyi bir anlayışa sahip ve çok iyi tasarlanmış bir program seçmek istiyorum.

İyi tasarım, anlamlı sınıflar ve mimari, iyi (tasarım) desenleri kullanma, soyutlamanın iyi kullanımı, bileşenlerin iyi düzenlenmesi, yüksek uyum ve bileşenler arasında düşük bağlantı gibi şeyleri kastediyorum.

Bana önerecek herhangi bir yazılımınız var mı?

Yazılımın sadece iyi bir tasarıma sahip olması gerektiğini, tasarımın belgelenmesine gerek olmadığını unutmayın! :)

Son kullanıcı için bir uygulama olması gerekmez ... Aynı zamanda bir kütüphane, bir araç olabilir ...


3
Neden bize soruyorsun? Seni ne ilgilendirir? Bir muhasebe paketi önerirsem ve muhasebe sıkıcı bulursanız, iyi bir cevap olmaz mıydı? Ne tür bir paket sizi ilgilendiriyor? Önce bunlara bakın, sonra bize baktığınız belirli paketleri sorun.
S.Lott

Gösterdiğin için teşekkürler. Yazılım geliştirme araçlarının ilgimi çekeceğini söylemeliyim.
Andrea Zilio

Kullanmak istediğiniz herhangi bir platform var mı?

3
Bir dizi iyi tasarlanmış açık kaynak uygulamasını tanımlayan Açık Kaynak Uygulamaları Mimarisine bir göz atın .
Richard,

Kod ölçüsü çizgileri belirsizdir. Yürütülebilir dosyanın boyutu ve dayandığı tüm belgeler size bir şey söyleyebilir. Dışarıda güzel bir kütüphane varsa, onu kullanmak sadece mantıklıdır. Öyleyse, toplam LOC sayımımın bir parçası olarak kütüphanenin satırlarını sayıyor muyum? Çerçevelerin birçoğunun (kütüphaneler, API'ler, SDK'lar veya tercih ettiğiniz isim) çok iyi olma eğiliminde olduklarını söyleyebilirim (her açıdan çok fazla etkilenirler, böylelikle hata bulmak çabuktur ve düzeltmeleri hızlı olur). İyi kodlayıcılar diğer iyi kütüphaneleri kaldıracağından, gerçek zamanlı LOC'nin karmaşık bir uygulama için büyük olması gerekmez.
İş

Yanıtlar:


23

İyi tasarım ile anlamlı sınıflar ve mimari, tasarım kalıplarının iyi kullanılması, soyutlamanın iyi kullanılması, bileşenlerin iyi düzenlenmesi, yüksek uyum ve bileşenler arasında düşük bağlantı gibi şeyleri kastediyorum.

İlk olarak, iyi ya da kötü bir yazılım yalnızlık içinde yaşamaz - insanların bir problem olarak algıladıkları gerçek bir dünya senaryosunu modeller ve bu nedenle daima "uygulama alanı" adı verilen bir şeyle yakından ilişkilidir. Böylece, ne zaman yazılım hakkında konuşursanız, önce etki alanını bilin ve inceleyin - çünkü yalnızca o zaman iyi ve kötünün takdirine varabilirsiniz.

  • git - sadece iyi değil muhteşem bir tasarım. Özünde bir sürüm kontrolü değil, sadece bir dosya sistemidir. Çekirdeğin üstündeki ince bir işlevsellik kaplaması, onu sürüm kontrol sistemi yapar. Git'in içindekileri tanıyın ve yazılım tasarım anlayışınız aydınlanacak.

  • jQuery - çok iyi (dahili olarak) belgelenmiş bir kütüphane değil, müşteri tarafında JavaScript kodunun nasıl harikalar yaratabileceğini gösteren ilham verici bir kaynak.

  • NodeJS - Eğer sunucu yapmaya başlıyorsanız, bu projenin canlandırıcı yeni önerileri ve kalıpları var.

  • v8 - çok iyi C ++ kodu, sanal makine uygulamalarını öğrenmek / incelemek için harika bir kütüphane.

  • NoSQL projeleri - Couch, Mongo, Redis, Cassandra - bu projeler kalıcılık problemlerini çözmenin akıllı yollarını gösterir. Ayrıca poliglot kalıcılığı fikrini benimsiyorlar.

  • Kütüphaneleri artırın - iyi doz C ++.

  • OpenStack - bulut bilişim ve sanallaştırma üzerine çok iyi projeler.

  • Apache Software Foundation - Projelerinden herhangi birini seçin ve araştırın. Bileşenlerin nasıl bir araya geldiğini görmek istiyorsanız, HTTPd'nin modüler yapısı mükemmel bir kaynaktır. APR (apache portable runtime) - aynı zamanda gerçekten iyi bir lib.

  • mod_wsgi - Karşılaştığım en iyi C programlarından biri.

"tasarım desenlerinin iyi kullanımı" - kodun iyi bilinen bir tasarım desenine uyması önemli değildir - sorunu "akıllıca" çözmesi çok önemlidir - bu da bakım edilebilir, yeniden kullanılabilir ve okunabilir olmalıdır. Kod belirli bir "şekle" sıkıştırılırsa - sadece bir tasarım desenine uymak için - kötü kod olabilir.

"en az 100.000 satır koddan daha az" - satır sayısı ne zaman iyi kalitede bir metrik haline geldiğinden - "iyi tasarlanmış / iyi tasarlanmış yazılım" ın tadına varmak BÜYÜK olmasını gerektirmez.

Yine, önce problem alanının doğasını ve nüanslarını incelemeyi ve ardından kodu okumayı unutmayın.

GÜNCELLEME: Ekim 2015

InfluxDB - https://influxdb.com/ Bu Go projesi aktif olarak geliştiriliyor ve hala çok karmaşık değil. Böylece, OpenStack gibi bir şeye kıyasla daha kolay bir şekilde koda girmeye başlayabilirsiniz.


13

Bozuk para atmak. Tüm büyük Açık Kaynak projeleri hayatta kalmak için mükemmel olmak zorunda. Apache, Linux, GNU projeleri harika.


4
Topluluk tarafından işletilen tüm büyük OSS projeleri hayatta kalmak için en azından iyi olmalıdır. Parlak demezdim. Çoğunlukla söylenenler için, sadece çalışanlar tarafından yapılan devlet projeleri için, kod kalitesi her zaman öncelik listesindeki en yüksek şey değildir. Ancak örnekleriniz için +1.
TZHX

8
Wordpress parlak mı?
Drew,

9
  • Krom
  • Firefox
  • Apaçi
  • MySQL
  • PostgreSQL
  • Linux
  • GNU

2
Firefox'un 90'lı yılların başında yazılmış durgun kod parçalarıyla dolup taşmadığından emin misiniz? Modern kodlama uygulamalarını çalışmak için iyi bir kod parçası gibi görünmüyor
TheLQ

3
Firefox ve MySQL'in kaynak kodu, asla iyi yazılım tasarımına örnek olarak kullanılmaması gereken korkunç saçmalıklardır.
Ürdün

7

Python. Spesifik olarak, CPython, birincil uygulama. Sürüm 3.2 için, tercüman yaklaşık 50k c C kodunu, 400k plik Python kodunun üzerinde standart kütüphaneyi çalıştırır. Dilin son derece yüksek kalitesi ve okunabilirlik ve iyi tasarım ilkelerini desteklemesi göz önüne alındığında, bu kodun hepsinin oldukça iyi olacağını düşünüyorum.


4

MetaFont ile birlikte TeX gerçekten bir araştırmaya değer: http://www.tug.org/

Yerel kütüphaneniz kaynakların basılı versiyonlarında size yardımcı olabilir.


3

Açık kaynak kodlu bir proje seçmeden önce aşağıdaki kitabı okumanızı tavsiye ederim. Bu, neyin iyi / kötü kod olarak kabul edilebileceği konusunda fikir verecektir.

Greg Wilson
, Gerçekten İşe Yarayan Yazılımlar Yapma ve
Açık Kaynak Uygulamaları Mimarisine Neden İnanıyoruz?

Ayrıca, http://blog.stackoverflow.com/2011/06/se-podcast-09/ adresine bakmadan önce yazarı dinlemekten hoşlanıyorsanız, Blog yığın değişimi röportajı da burada.

Genel olarak yüksek kaliteli yazılım olarak kabul edilen nedir? Sorunun kendisi çok özneldir. Kullanıcıların farklı kalite ölçümleri var. Bir kullanıcı, teknik özelliklere bağlı olarak yazılım paketinin yüksek kalitede olduğunu düşünebilir. Başka bir kullanıcının, kullanıcı arayüzünün estetiğine ve genel kullanıcı deneyimine dayanarak kaliteyi ölçebileceği yerlerde.

Bir işletme açısından, müşterinin beklentilerini karşılayıp karşılamadığına veya müşterinin sözleşmeden doğan yükümlülüklerini yerine getirip getirmediğine bağlı olarak yazılım kalitesini ölçerler. Ayrıca profesyonel davranışlar var ama bu, çitin hangi tarafından baktığınıza bağlı.

Programcıların bakış açısına göre, yazılımın yaratıldığı sırada API'nin tasarımı ve yapıları ne kadar zarif. Aynı tasarım veya kod standardı, programcıların tutumları ve görüşleri zaman içinde değiştiğinde profesyonelce kabul edilemez.


2

Yazılım araçlarını sevdiğinizi belirttiğinizden bu yana IntelliJ Community Edition ürününü önereceğim.

http://www.jetbrains.org/

Ne hoşuma gidiyor:

  1. Çerçeve yerine bir şey yapan bir araçtır
  2. Statik kod analizi ve veri akışı analizi gibi gerçekten ilginç şeyler yapıyor.
  3. İyi bir şey, çalışmanızı gerçekleştirmek için kullanabilmenizdir, çünkü tüm kod analizlerini kendi üzerinde de yürütebilir.

(kuşkusuz bir JetBrains hayranıyım)


2

Kendim için böyle bir proje arıyorum ve yerleştim CLang.

  • Nispeten yeni (sadece 10 yaşında olan LLVM'nin çocuğu), yani hayır (ya da görmedim) eski kod
  • Bugünlerde çok önemli olduğunu düşündüğüm son derece iyi düşünülmüş, modüler bir tasarım (LLVM olarak)
  • Çok temiz kod, iyi yorumlanmış (sık sık işleri açıklamak için Standarttan alıntılar görürsünüz)
  • Çok güzel tasarlanmış bir test paketi / test ortamı

Orada çok fazla Tasarım Deseni yok, burada ve burada birkaç Ziyaretçi var ama bu konuda. Sınıf hiyerarşileri basit ve dürüst ... Aslına bakarsan, basitlik hedef, bence aşırı mühendislik yapılamıyor gibi görünüyor.

Bununla birlikte, performans açısından kritik öneme sahip olduğu için, bazı tasarım kararları şüpheli görünebilir (birçok nesne için sanal işlevlerden kaçınıp, RTTI / istisnalar olmadan derleme), bu nedenle her şey günlük yazılım için geçerli değildir.




Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.