Quali sono le cinque caratteristiche più importanti di un buon software?

Non sono sicuro che un buon software possa essere valutato sulla base di licenza, tecnologie, servizio clienti e costi. Questi potrebbero essere indicatori di un’azienda che ha creato quel software, ma il software non può essere giudicato “buono” su quei parametri.

Detto questo, IMHO, un “buon software” ha le seguenti caratteristiche:

1. Il codice è design e il design è codice – Quindi, dice il proverbio. Un buon codice rispetta automaticamente ed evidenzia tutte le decisioni relative alla sua decisione. Non vedrai i sintomi di un concetto di “finestra rotta” .

2. Separazione delle preoccupazioni – Un buon software ha la giusta quantità di separazione tra preoccupazioni e modularità. Pertanto, potresti trovare il codice incapsulato nei giusti livelli / moduli / livelli logici. Questo lo rende estremamente mantenibile.

3. Segue le giuste convenzioni – Un buon software segue religiosamente tutte le giuste convenzioni. Non troverai molte eccezioni alle convenzioni stabilite per costruire il software

4. Unit Test Suite – Un buon software è quello che è testabile. Si potrebbe trovare una buona quantità di casi di unit test in modo da dare il potere al team di evolvere il software per un periodo di tempo. Avrebbe quasi una copertura del codice del 100%

5. Buona gestione e registrazione delle eccezioni – Un buon software non gli permetterebbe di bruciarsi in fiamme in scenari eccezionali. Li gestirà con garbo e registrerà in modo che possano essere facilmente risolti in seguito.

6. Performance – Funzionerebbe abbastanza bene in scenari regolari e stressanti. Non ti troverai ad aspettare alcuni secondi prima che elabori effettivamente una richiesta. Questo è più vero per i software rivolti alle aziende e ai consumatori. Certo, potrebbe volerci del tempo se stava eseguendo lo scricchiolio di big data o facendo una sorta di elaborazione delle immagini ecc

7. Esperienza utente : la sua interfaccia utente avrebbe immediatamente senso per i suoi utenti. Sarebbe semplicistico, elegante e qualcosa che è indolore da usare.

Potrei essere in evidenza alcuni più ma questi sono quelli che si distinguono immediatamente.

Murukesh è interessato a qualcosa per quanto riguarda la definizione di “buono”. Come product manager, devi definire cosa significano quei termini in un contesto specifico. Nessun compito facile se si considera che la definizione può dipendere da alcuni o tutti i seguenti fattori (e certamente altri):

  • Dov’è il prodotto nel suo ciclo di vita
  • Com’è l’ambiente competitivo?
  • Per quanto tempo sarà rilevante l’attuale implementazione del prodotto?
  • Cosa si aspettano le persone che acquistano il software?
  • Cosa si aspettano le persone che utilizzano il software?
  • Cosa si è aspettato storicamente il mercato da questo tipo di software?
  • Cosa sta cercando di ottenere l’azienda che sta sviluppando il software?

Mi piace usare il “Modello di motivazione aziendale” di OMG per catturare queste considerazioni come obiettivi misurabili che possono essere realizzati con la giusta strategia. Consiglio vivamente di dargli un’occhiata e di definire chiaramente (per iscritto) quale “buono” è per il tuo software.

Solitamente rispondo a tali domande con un contatore: “Definisci ‘buono'”. Chi ha sviluppato? Irrilevante. In teoria, Porsche può realizzare macchine di merda, così Apple e MS possono creare software di merda. Quale licenza? Non importa, dal momento che di solito è possibile negoziare su questo (idem per i costi e fattori di assistenza clienti).

  • Una caratteristica è fornita da una regola di progettazione: il Principio della minima sorpresa (Applicazione della Regola della minima sorpresa). Fa quello che puoi ragionevolmente aspettarti che faccia in risposta a quello che hai fatto?
  • Lock-in: ti lega a qualcosa di specifico (server di attivazione, hardware specifico / software di terze parti, ecc.) Che ha una durata di supporto breve? L’obsolescenza forzata rende qualsiasi cosa non importa quanto orribilmente ben fatta e facile da usare.
  • Facilità di manutenzione e configurabilità: una per lo sviluppatore: possono correggere i bug e aggiungere funzionalità senza dover riscrivere interi moduli (o, root vietato, il pacchetto è monolitico) e caricare un braccio e una gamba per esso? Uno per l’utente: possono cambiare il comportamento del programma entro i limiti di progettazione senza dover sacrificare il loro primogenito a Codethulhu (The Call of Codethulhu)?
  • Aderenza agli standard: se il software si occupa di qualcosa che ha uno standard accettato in tutta la comunità (ISO / ECMA / IEEE / qualunque cosa), può (“può”, non “non”) comportarsi in modo conforme agli standard?

Il generale Chuck Yeager (la prima persona a volare più veloce del suono) ha elogiato il sistema del motore di un aereo con le parole

‘Semplice, poche parti, facile da mantenere, molto forte’

Un programma condivide questi attributi.

Riferimento: Programming Pearls di Jon Bentley

  1. Amichevole per gli utenti finali
  2. Supporto dopo il servizio
  3. Buona convalida
  4. Politica di aggiornamento
  5. Buon design del front-end