Bir projeyi büyük yapan nedir? [kapalı]


31

Sadece meraktan küçük, orta ve büyük ölçekli bir proje arasındaki fark nedir? Kod satırlarıyla mı yoksa karmaşıklıkla mı ölçülür?

Bir takas sistemi kuruyorum ve şimdiye kadar giriş / kayıt için yaklaşık 1000 kod satırı var. Çok fazla LOC olmasına rağmen, büyük bir proje olarak görmeyeceğim, çünkü bu benim ilk projem olmasına rağmen o kadar da karmaşık değil. Nasıl ölçülür?


2
Evet ............ Daha fazla karmaşıklık, daha fazla kod satırı anlamına gelir.
Robert Harvey,

3
İlk

Daha sonra sormak zorundasınız "Bir projeyi karmaşık yapan nedir? Kod satırları? Soyutlama katmanları?"
Steven Evers,

1000 kod satırından “lot” olarak bahsediyorsunuz. Bu bağlam olmadan hiçbir şey ifade etmiyor. Bir milyondan fazla kod satırına sahip birçok projede çalıştım. Aynı zamanda, sadece 50.000 çizgisi olan "küçük" projeler olarak adlandırdığım şey üzerinde çalıştım, ancak karmaşıklık nedeniyle, tasarlamak, kodlamak için ihtiyaç duydukları kaynak miktarı nedeniyle, "küçük" olarak düşünülemezlerdi. ve test. Ancak kişisel deneyimime göre, 1000 satırın çok fazla olduğunu düşündüğüm bir durum düşünemiyorum. Sadece ilk projen için bir bakış açısı sağlamasından bahsediyorum. İyi şanslar!
TMarshall

Bir projenin "büyüklüğünün" 1'den fazla faktöre bağlı olduğunu söyleyebilirim ...
kiwixz

Yanıtlar:


20

Karmaşıklık.

Karmaşıklık arttıkça, projedeki her şeyi öğrenmek zorlaşır.


5
Bu bir totolojiye benziyor imo. Karmaşık bir sistem, büyük sistemin eş anlamlısıdır; Kod karmaşıklığından bahsetmedikçe ve o zaman çok iyi olabilir, bu yüzden her şey iyi çözülebilir ve tek bir sorumluluğa sahip olabilir, bu durumda kod karmaşıklığı aslında büyük projeler için daha düşük olabilir. Dolayısıyla, bu karmaşıklığın söylenmesi, projenin büyük olduğu anlamına gelmekte olup hiçbir şey söylememektedir.
Henrik

... veya doğal olarak diğer karmaşıklık ölçütleri.
Henrik

@Henrik, "karmaşık sistem", "büyük sistem" e eşdeğer değildir.

1
Hayır, eşanlamlı.
Henrik

@Henrik, katılmıyorum. Bir sistem büyük olabilir ama düzenli olabilir - yani birçok şey hemen hemen aynı şekilde çözülür, burada sistemdeki diğer deneyimlerinize dayanarak işlerin nasıl yapıldığını tahmin edebilirsiniz - ve bir sistem küçük ama yine de çok karmaşık olabilir.

33

Kabaca bazı şeyleri nasıl kabul edeceğimi - bunun az ya da çok keyfi olduğunu aklınızda bulundurun. Projenin karmaşıklığı, kaynak kod satırı, özellik sayısı / işletme değeri vb. Gibi diğer faktörlerin bir birleşiminde "boyutu" Çok küçük bir ürün çok miktarda değer sağlayabilir, vb.

  • 2m + sloc büyük projeye büyük. Bunlar genellikle o kadar karmaşıktır ki, eğer birileri tüm sistemde 'akıcıysa'; Bunun yerine sorumluluk, kodun yapısı boyunca modüle edilme eğilimindedir. Bu projeler genellikle çok büyük bir iş değeri sunar ve kritik görev olabilir. Aynı zamanda bazen teknik borçların ve diğer eski kaygıların ağır bir şekilde zorlanması altındadır.

  • 100k - 2m'lik sloc orta ölçekli bir projedir. Bu benim orta noktam: proje, uzmanlık bilgisi gerektirecek kadar karmaşık ve muhtemelen bir dereceye kadar teknik borç tahakkuk ediyor; muhtemelen bir dereceye kadar işletme değeri de sağlıyor.

  • 10k - 100k küçük bir projedir, ancak uzman değerlendirmesi isteyecek kadar karmaşık olmak için çok küçük değildir; Açık kaynak iseniz, güvendiğiniz kişilerin taahhütlerinizi gözden geçirmelerini sağlayın.

  • 10 bin sloc'tan küçük şeyler gerçekten çok küçük. Bu hiçbir şekilde hiçbir değer sağlayamayacağı anlamına gelmez ve çok ilginç birçok projenin çok küçük bir etkisi vardır (örneğin, kaynağı ~ 2 kb (!) Olan Camping). Uzman olmayanlar, genellikle etki alanı hakkında çok fazla şey bilmeden, değer kaygılarını giderebilir - hataları giderebilir ve özellikler ekleyebilir.


4
Yapabilseydim bunu iki kez oylardım. Rakamlar elbette biraz keyfi ama bence farklı derecelerde “bijelik” in ne anlama geldiğinin tanımları dikkat çekiciydi.
Eric Anderson

1
@EricAnderson Bunu tanımları açısından düşünmek kesinlikle sloc ölçüsünden daha kolaydır. Bir 100k sloc Erlang programı basitçe ne dayalı, kolayca 100k sloc C ++ programının daha "büyük" büyüklükte bir emirdir yapar kod daha yüksek seviyede okumaktır bakılmaksızın ne kadar kolay. Belli bir noktada, kodu okumak, sistemin içinde ne olup bittiğini hatırlamak kadar zor değil çünkü çok fazla özellik ve mantık merkezi var.
zxq9

@ zxq9 Ben de aynı fikirde değilim. Doğru, bu dil seçiminin büyük bir projeyi küçültebileceği anlamına geliyor. Büyük bilgisayarlarda kullanılanlar artık çok yavaş ve büyük yazılım projelerinde kullanılanlar günümüzde önemsiz olabiliyor. Değişmeyen, bir projenin maliyeti / karmaşıklığıdır. SLOC mükemmel bir ölçüm olmasa da, hala bir yazılım projesinin maliyeti ve karmaşıklığı ile yakından ilgilidir. Mümkünse, bir projeyi bağımsız bileşenlere ayırın ve onları daha da küçük yapmak için doğru teknolojileri seçin.
Yongwei Wu

14

Bir projenin büyüklüğü sürdürülemezlik derecesi ile ölçülür.


2
Bu karamsar: D
Henrik

.... ve bu ölçüm?
Casey Patton

1
@Casey Patton ölçümü tam anlamıyla bakım maliyetidir.
mojuba

12

Birkaç şekilde tahmin edilebilecek karmaşıklık:

  1. Bütçe. 10.000.000 $ + bütçesi olan bir proje, muhtemelen 10.000 $ 'ın altındaki projelerden oldukça farklıdır. Bu, işgücü, yazılım, donanım ve proje yaparken ortaya çıkan diğer maliyetleri içerebilir.
  2. Projeyi tamamlamak için çalışma saatleri. Milyon saat mi sürecek başka bir şey mi olacak? Bu, bazı projelerin yıllar alabileceği zaman çizelgesi faktörü olarak da görülebilir, bir haftadan az sürebilecek olan diğerlerine göre büyüktü. Personel saatini iki katına çıkararak, personelin iki katına çıkacağını düşündüğü gibi kişi saatlerinin yanıltıcı olabileceğine dikkat edin, böylece proje üzerinde iki kat fazla çalışma var, sonra program aklıma nadiren işe yarıyor.
  3. Projenin inşa ettiği şeyi kullanan donanım, diğer sistemler ve insanlar. Eğer 101 sisteme bir şey bağlıysa, yalnız kalması ve başka hiçbir şeye bağlanmaması durumunda daha karmaşık olması muhtemeldir.

Gereksinimler, bunu ölçmenin güzel bir yolu gibi görünse de, genellikle Şelalesi olmayan bir metodoloji varsayarak bir proje yapılırken bulunacak daha fazla gereksinim vardır.


11

Bir proje büyüklüğü muhtemelen, gereksinimlerin daha da azaltılamadığı sistem gereksinimlerine göre ölçülür.

Tabii ki, daha fazla gereksinim çoğunlukla daha fazla karmaşıklık anlamına gelir, ancak her zaman böyle değildir.


1
Bu iyi bir önlem olmayabilir: derleyiciler ve işletim sistemi çekirdeği gereksinimleri , diğer ürün türlerine kıyasla orantısız derecede büyük olabilir .
mojuba

2
@ mojuba: "Büyük" oldukça geniş bir terimdir, bir derleyici veya bir işletim sistemi yazmanın "büyük" bir proje olacağını hayal ediyorum
David_001

@ David_001: Bir noktada ikili boyutu 70 kilobayt olan ve henüz TP tam gelişmiş bir nesne yönelimli programlama dili olan Turbo Pascal derleyicisini f.ex'e alın. Kaynakları hiç görmedik ama 70kb'lik bir çalıştırılabilir dosya büyük bir proje olamaz.
mojuba,

@ David_001: Genel olarak size tamamen katılmıyorum değil. Herhangi bir "büyük" projenin tanımı "büyük" kelimesi kadar belirsiz olacaktır.
mojuba,

@ mojuba: Turbo Pascal'ı kullandığımda, nesne yönelimli değildi.
David Thornley

4

Bir projenin büyüklüğünü, tüm projeyi tek bir büyük resim olarak görmenin ne kadar zor olduğunu ölçebilirim. Örneğin, üzerinde çalıştığım bir makine öğrenme problemi için keşif / prototipleme kod tabanına sahibim. Sadece 5k kod satırı, ancak büyük bir proje gibi geliyor. Tahmin edilemeyen şekillerde etkileşimde bulunan tonlarca yapılandırma seçeneği vardır. Tüm bu karmaşıklığı yönetmek için kod tabanında bir yer tarafından bilinen bir tasarım modelini hemen hemen bulabilirsiniz. Tasarım çoğu zaman düşüktür, çünkü olay evrim yoluyla çok büyümüştür ve olması gerektiği gibi yeniden yansıtılmamaktadır. Bu kod temeli üzerinde çalışan tek kişi benim ama yine de işlerin nasıl yürüdüğüne şaşırdım.

Öte yandan, hobi projelerimden birinin kodunun 3-4x kadarı var ve yine de çok daha küçük geliyor çünkü temelde birbirlerine dik dik bir matematiksel işlev kütüphanesi. Her şey karmaşık yollarla etkileşime girmez ve her bir işlevi yalıtımlı olarak anlamak güzeldir. Büyük resmi, olduğu kadar görmek kolaydır, çünkü görecek pek bir şey yoktur.


3

İsteğe bağlı cevap: Projenin ne kadar büyük olduğu, etkinlik kaynaklı ve SOA ile baştan başlamasını dilediğiniz kadar. Ya da sistemin yazarları Evan'ın "DDD: Yazılımın Kalitesindeki Karmaşıklık ile Mücadele" kitabını okudular;


2

Compexity ve Kapsam

Karmaşıklık ve Kapsam Bir projenin gerçekte ne kadar büyük olduğunu belirleyen şeyin olduğuna inanıyorum. Ancak, bir projenin boyutunu da etkileyebilecek çeşitli maddi olmayan varlıklar vardır.

Gereksinimler

Karşılaştığım en büyük düşüş şartların olmamasıydı. Özel durumumda satış müdürü gereksinimleri belirliyordu. Odak noktası satışa çıktı ... satışı almalı. Müşterinin istediği aklında, o kadar karmaşık görünmüyordu, çünkü benzer bir şey yaptık. Belirsiz şartlar düşük işlere ve aşırı beklentilere yol açar.

CCMU eksikliği

CCMU benim " Coo Ca Moo " dediğim şeydir (Karşılıklı Anlaşmayı Tamamla). Müşterinizle birlikte bir CCMU'nuz olması gerekir.

Eğer zayıf bir CCMU ile küçük bir projeniz varsa, o zaman projeyi 2,3,4 ya da daha fazla kez yaparak kapatabilirsiniz. Böylece, 20 saatlik basit bir iş, stresli personel ve çok memnun olmayan bir müşteriyle 60 saatlik bir projeye dönüşüyor.

Kapsam Sürünme

Bu düşündüğünüzden daha sık olur. Müşteri, zaten A, B & C yaptığınız için D veya F eklemek bile zor olmayacağına karar verir. Bu davranış kontrol edilmezse küçük bir projeyi orta ölçekli bir projeye dönüştürebilir. Ve satış yöneticisinin işi nasıl sattığına bağlı olarak, bu kapsamdaki sürünme beklentileri müşteriye "ÜCRETSİZ" görünebilir .


1

Tuhaf, bu cevapların çoğunu okuyarak bir projenin boyutunu çok farklı görüyorum. Belki de büyük bir şirkette çalışıyorum, ancak bir projenin büyüklüğünü, müşterilerinin görünebilirliği / arzu edilebilirliğinin bir ölçüsü olarak görme eğilimindeyim (çalışma alanınıza bağlı olarak bunlar iş arkadaşları veya gerçek ödeme yapan müşteriler olabilir).


1

Karmaşıklık doğru cevaptır, ancak nasıl tahmin edilir?

Faktörler:

  1. Uzatma noktaları sayısı
  2. Modüller katmanları sayıları (fonksiyonlar, sınıflar, sınıf sistemleri, kütüphaneler, paylaşılan kütüphaneler, uygulamalar, ağ uygulamaları vb.)
  3. Bağımlılık sayısı (platformlar dahil)
  4. Aralıklar arası sayıma sahiptir.
  5. Gerekli kod dışı kaynaklar (grafikler / sanatlar, sürüş komut dosyaları - seviye tasarım komut dosyaları gibi - ve uygulamanın bir sürümünü tamamlamak için gereken diğer kaynaklar dahil).

Bunlardan ne kadar fazlaysanız, proje de o kadar karmaşık olur.


0

LOC olan ölçümlerin bir sürü için herkesin bildiği gibi yanlış, ama ben gerçekten ölçmek için doğru bir yol olmadığını şey ölçmek için çalışıyoruz düşünüyorum. Belki de bir alternatif döngüsel karmaşıklık olabilir .

Sonuçta, bir projenin "büyüklüğünün" ölçülmesinin zor olduğunu düşünüyorum. Neredeyse bir köpeğin büyük olup olmadığına nasıl karar verdiğinizi sormak gibidir. Bunu ölçmek için sadece birçok yol var (kütle, hacim vb.), Ama ben şahsen çok yararlı bulmuyorum. Gerçek şu ki, kriterlerimin muhtemelen "Karanlık bir sokakta görürsem bu köpeğe kaçma ihtimalim ne kadar olur" gibi bir şey olacak.

Ve kayıt için, genellikle 1k kod satırını çok fazla düşünmezdim. Oldukça büyük miktarda bir kod olurdu, ama olayların büyük bölümünde bu kadar olmazdı . Tabii ki, diline bağlı olduğunu düşünüyorum. Örneğin, 1k kod satırı, Py gibi bir dilden C gibi bir dilde çok daha az koddur.

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.