it-swarm.it

Cosa rende grande un progetto?

Solo per curiosità qual è la differenza tra un progetto di piccole, medie e grandi dimensioni? È misurato da righe di codice o complessità o cosa?

Sto costruendo un sistema di baratto e finora ho circa 1000 righe di codice per il login/registrazione. Anche se c'è un sacco di LOC, non lo considero un grande progetto perché non è così complesso, anche se questo è il mio primo progetto, quindi non ne sono sicuro. Come viene misurato?

32
Jonathan

Complessità.

Maggiore è la complessità, più difficile è imparare tutto nel progetto.

20
user1249

All'incirca come accorderei le cose - tieni presente che questo è più o meno arbitrario. La "dimensione" del progetto in un insieme di altri fattori come complessità, linee di codice sorgente, numero di caratteristiche/valore aziendale, ecc. Un prodotto molto piccolo può fornire una grande quantità di valore, ecc. Detto questo:

  • 2m + sloc è un progetto da grande a enorme. Questi sono generalmente così complessi che poche persone sono "fluenti" nell'intero sistema; piuttosto la responsabilità tende ad essere modulare lungo la struttura del codice. Questi progetti offrono spesso un enorme valore commerciale e possono essere mission-critical. A volte sono anche sottoposti a una forte tensione del debito tecnico e ad altre preoccupazioni legate all'eredità.

  • 100k - 2m sloc è un progetto di medie dimensioni. Questa è la mia via di mezzo: il progetto è abbastanza complesso da richiedere alcune conoscenze specialistiche e ha probabilmente accumulato un certo grado di debito tecnico; probabilmente fornisce anche un certo grado di valore commerciale.

  • 10k - 100k è un piccolo progetto, ma non troppo piccolo per avere una complessità sufficiente da richiedere la valutazione di un esperto; se sei open source, considera di convincere le persone di cui ti fidi a rivedere i tuoi impegni.

  • Qualsiasi cosa con meno di 10k sloc è davvero piccola. Ciò non significa che non possa fornire alcun valore e molti progetti molto interessanti hanno un'impronta molto piccola (ad esempio Camping, la cui fonte è ~ 2 kb (!)). I non esperti in genere possono generare problemi di valore - correggere bug e aggiungere funzionalità - senza dover conoscere troppo il dominio.

34
Joseph Weissman

Le dimensioni di un progetto sono misurate dal grado di non mantenibilità.

14
mojuba

Complessità che può essere stimata in alcuni modi:

  1. Budget. Un progetto con un budget di oltre $ 10.000.000 è probabilmente molto diverso da uno con meno di $ 10.000 per esempio. Ciò può includere manodopera, software, hardware e altri costi sostenuti nella realizzazione di un progetto.
  2. Persona ore di lavoro per completare il progetto. Ci vorranno un milione di ore o qualcos'altro? Questo potrebbe anche essere visto come un fattore temporale in cui alcuni progetti potrebbero richiedere anni che direi essere grandi rispetto ad altri che potrebbero richiedere meno di una settimana. Si noti che le ore della persona possono essere fuorvianti come qualcuno potrebbe pensare raddoppiando il personale, quindi ci sono due volte più che lavorano al progetto, quindi il programma può essere suddiviso a metà, cosa che raramente avrebbe funzionato nella mia mente.
  3. Quantità di hardware, altri sistemi e persone che utilizzano ciò che il progetto sta costruendo. Se qualcosa si lega a 101 sistemi, è probabile che sia più complicato che se si trova da solo e non si lega ad altro.

Mentre i requisiti possono sembrare un bel modo per misurarlo, spesso ci sono più requisiti che si troveranno quando un progetto viene realizzato assumendo una metodologia non a cascata, credo.

12
JB King

La dimensione di un progetto è probabilmente meglio misurata dal numero di requisiti del sistema, dove i requisiti non possono essere ulteriormente ridotti.

Naturalmente, più requisiti principalmente significa più complessità, ma non è sempre così.

11
David_001

Misurerei le dimensioni di un progetto in base a quanto sia difficile vedere l'intero progetto come un'unica grande immagine. Ad esempio, ho una base di codice esplorativa/di prototipazione per un problema di apprendimento automatico su cui sto lavorando. Sono solo 5k righe di codice, ma sembra un progetto enorme. Ci sono tonnellate di opzioni di configurazione che interagiscono in modi imprevedibili. Puoi trovare praticamente ogni modello di progettazione conosciuto dall'uomo da qualche parte nella base di codice per gestire tutta quella complessità. Il design è spesso non ottimale perché la cosa è cresciuta molto per evoluzione e non viene riformattata tutte le volte che dovrebbe essere. Sono l'unico che funziona su questa base di codice, eppure sono spesso sorpreso da come le cose interagiscono.

D'altra parte, uno dei miei progetti di hobby ha circa 3-4 volte più codice, eppure sembra molto più piccolo perché è fondamentalmente una libreria di funzioni matematiche che sono per lo più ortogonali tra loro. Le cose non interagiscono in modo complesso, ed è carino capire ogni funzione isolatamente. È facile vedere il quadro generale nella misura in cui ce n'è uno, perché non ce n'è molto da vedere.

4
dsimcha

Risposta arbitraria: quanto è grande il progetto quanto vorresti averlo fatto con il sourcing degli eventi e SOA dall'inizio. O che gli autori del sistema avessero letto il libro di Evan "DDD: Tackling Complessità nel cuore del software ";)

3
Henrik

Compexity & Scope

Complessità e ambito Credo che siano ciò che determina la dimensione di un progetto. Tuttavia, ci sono diversi intangibili che possono influenzare anche le dimensioni di un progetto.

Requisiti

La più grande caduta che ho dovuto affrontare è stata la mancanza di requisiti. Nella mia situazione particolare il responsabile delle vendite stava determinando i requisiti. Il suo focus era sulla vendita ... devo ottenere la vendita. Nella sua mente ciò che il cliente chiedeva non sembrava così complicato perché avevamo costruito qualcosa di simile. Requisiti vaghi portano a lavori a basso prezzo e aspettative oltre impegnate.

Mancanza di CCMU

CCMU è ciò che chiamo "Coo Ca Moo" (Cancella la comprensione reciproca completa). Devi avere una CCMU con il tuo cliente.

Se hai un piccolo progetto con una CCMU scadente, puoi finire di fare il progetto 2,3,4 o più volte. Così un semplice lavoro di 20 ore si trasforma in un progetto di 60 ore con uno staff stressato e un cliente molto insoddisfatto.

Scope Creep

Questo succede più spesso di quanto pensi. Il cliente decide che, poiché stai già eseguendo A, B e C, non dovrebbe essere così difficile aggiungere D o anche F. Se questo comportamento non viene controllato, può anche trasformare un piccolo progetto in un progetto di medie dimensioni. E a seconda di come il responsabile delle vendite ha venduto il lavoro, queste aspettative di strisciamento possono sembrare "FREE" al cliente.

È strano, leggendo molte di queste risposte, trovo che vedo le dimensioni di un progetto in modo molto diverso. Forse è il mio lavoro in una grande azienda, ma tendo a considerare le dimensioni di un progetto più che altro come una scala della sua visibilità/desiderabilità per i suoi clienti (a seconda della tua area di lavoro, questi possono essere collaboratori o clienti paganti effettivi).

1
Kavet Kerek

La complessità è la risposta giusta, ma come stimarla?

I fattori sono:

  1. I punti di estensione contano
  2. Conteggio dei livelli dei moduli (funzioni, classi, sistemi di classi, librerie, librerie condivise, applicazioni, applicazioni di rete, ecc.)
  3. Conteggio delle dipendenze (piattaforme incluse)
  4. Conteggio delle interdipendenze delle caratteristiche.
  5. Risorse non di codice necessarie (inclusi grafica/arte, script di guida - come script di progettazione di livello - e altre risorse necessarie per completare una versione dell'applicazione).

Più ne hai, più complesso è il progetto.

1
Klaim

LOC è notoriamente inaccurato per molte misurazioni, ma penso che tu stia provando a misurare qualcosa che in realtà non esiste un modo preciso per misurare. Forse un'alternativa potrebbe essere complessità ciclomatica .

Alla fine però, penso che la "grandezza" di un progetto sia difficile da quantificare. È quasi come chiedere come determinare se un cane è grande o no. Non solo ci sono molti modi per misurarlo (massa, volume, ecc.), Ma personalmente non lo trovo molto utile. La realtà è che i miei criteri saranno probabilmente qualcosa del tipo "Quanto è probabile che scappi da questo cane se lo vedo in un vicolo buio?"

E per la cronaca, generalmente non considererei molte righe di codice 1k come molto. Sarebbe un grosso pezzo di codice, ma non sarebbe che molto nel grande schema delle cose. Certo, suppongo che dipenda dalla lingua. Ad esempio, 1k righe di codice è molto meno codice in una lingua come C di quanto non lo sia in una lingua come Pyhon.

0
Jason Baker