Requisiti di qualitàedit

Qualunque sia l’approccio allo sviluppo, il programma finale deve soddisfare alcune proprietà fondamentali. Le seguenti proprietà sono tra le più importanti:

  • Affidabilità: quanto spesso i risultati di un programma sono corretti. Ciò dipende dalla correttezza concettuale degli algoritmi e dalla minimizzazione degli errori di programmazione, come errori nella gestione delle risorse (ad esempio, overflow del buffer e condizioni di gara) e errori logici (come errori di divisione per zero o off-by-one).,
  • Robustezza: quanto bene un programma anticipa i problemi dovuti a errori (non bug). Ciò include situazioni come dati errati, inappropriati o corrotti, indisponibilità delle risorse necessarie come memoria, servizi del sistema operativo e connessioni di rete, errore dell’utente e interruzioni di corrente impreviste.
  • Usabilità: l’ergonomia di un programma: la facilità con cui una persona può utilizzare il programma per lo scopo previsto o in alcuni casi anche scopi imprevisti. Tali problemi possono fare o rompere il suo successo anche indipendentemente da altri problemi., Ciò comporta una vasta gamma di elementi testuali, grafici e talvolta hardware che migliorano la chiarezza, l’intuitività, la coesione e la completezza dell’interfaccia utente di un programma.
  • Portabilità: la gamma di piattaforme hardware e sistema operativo su cui il codice sorgente di un programma può essere compilato / interpretato ed eseguito., Ciò dipende dalle differenze nelle strutture di programmazione fornite dalle diverse piattaforme, incluse le risorse hardware e del sistema operativo, il comportamento previsto dell’hardware e del sistema operativo e la disponibilità di compilatori specifici della piattaforma (e talvolta librerie) per il linguaggio del codice sorgente.
  • Manutenibilità: la facilità con cui un programma può essere modificato dai suoi sviluppatori presenti o futuri al fine di apportare miglioramenti o personalizzazioni, correggere bug e falle di sicurezza, o adattarlo a nuovi ambienti., Le buone pratiche durante lo sviluppo iniziale fanno la differenza in questo senso. Questa qualità potrebbe non essere direttamente evidente all’utente finale, ma può influenzare significativamente il destino di un programma a lungo termine.
  • Efficienza / prestazioni: misura delle risorse di sistema che un programma consuma (tempo del processore, spazio di memoria, dispositivi lenti come dischi, larghezza di banda di rete e in una certa misura anche l’interazione dell’utente): meno, meglio è. Ciò include anche un’attenta gestione delle risorse, ad esempio la pulizia dei file temporanei e l’eliminazione delle perdite di memoria., Questo è spesso discusso all’ombra di un linguaggio di programmazione scelto. Sebbene il linguaggio influenzi certamente le prestazioni, anche i linguaggi più lenti, come Python, possono eseguire programmi istantaneamente da una prospettiva umana. La velocità, l’utilizzo delle risorse e le prestazioni sono importanti per i programmi che strozzano il sistema, ma anche l’uso efficiente del tempo del programmatore è importante ed è correlato al costo: più hardware potrebbe essere più economico.,

Leggibilità del codice sorgente

Nella programmazione di computer, la leggibilità si riferisce alla facilità con cui un lettore umano può comprendere lo scopo, il flusso di controllo e il funzionamento del codice sorgente. Colpisce gli aspetti della qualità di cui sopra, tra cui la portabilità, l’usabilità e, soprattutto, la manutenibilità.

La leggibilità è importante perché i programmatori trascorrono la maggior parte del loro tempo a leggere, cercando di capire e modificare il codice sorgente esistente, piuttosto che scrivere nuovo codice sorgente. Il codice illeggibile spesso porta a bug, inefficienze e codice duplicato., Uno studio ha rilevato che alcune semplici trasformazioni di leggibilità hanno reso il codice più breve e ridotto drasticamente il tempo per capirlo.

Seguire uno stile di programmazione coerente spesso aiuta la leggibilità. Tuttavia, la leggibilità è più di un semplice stile di programmazione. Molti fattori, che hanno poco o nulla a che fare con la capacità del computer di compilare ed eseguire in modo efficiente il codice, contribuiscono alla leggibilità. Alcuni di questi fattori includono:

  • Diversi stili di rientro (spazi bianchi)
  • Scomposizione
  • Convenzioni di denominazione per oggetti (come variabili, classi, procedure, ecc.,)

Gli aspetti di presentazione di questo (come rientri, interruzioni di riga, evidenziazione del colore e così via) sono spesso gestiti dall’editor del codice sorgente, ma gli aspetti del contenuto riflettono il talento e le abilità del programmatore.

Vari linguaggi di programmazione visivi sono stati sviluppati anche con l’intento di risolvere i problemi di leggibilità adottando approcci non tradizionali alla struttura del codice e alla visualizzazione. Gli ambienti di sviluppo integrati (IDE) mirano a integrare tutto questo aiuto. Tecniche come il refactoring del codice possono migliorare la leggibilità.,

Algorithmic complexityEdit

Il campo accademico e la pratica ingegneristica della programmazione informatica sono entrambi in gran parte interessati a scoprire e implementare gli algoritmi più efficienti per una data classe di problemi. A tale scopo, gli algoritmi sono classificati in ordini utilizzando la cosiddetta notazione Big O, che esprime l’uso delle risorse, come il tempo di esecuzione o il consumo di memoria, in termini di dimensione di un input., I programmatori esperti hanno familiarità con una varietà di algoritmi consolidati e le loro rispettive complessità e utilizzano questa conoscenza per scegliere gli algoritmi più adatti alle circostanze.

Algoritmi di scacchi come esempioEdit

“Programmare un computer per giocare a scacchi” era un documento del 1950 che valutava un algoritmo “minimax” che fa parte della storia della complessità algoritmica; un corso sul Deep Blue di IBM (chess computer) fa parte del curriculum di informatica della Stanford University.,

Metodologieedit

Il primo passo nella maggior parte dei processi di sviluppo software formali è l’analisi dei requisiti, seguita da test per determinare la modellazione del valore, l’implementazione e l’eliminazione degli errori (debug). Esistono molti approcci diversi per ciascuno di questi compiti. Un approccio popolare per l’analisi dei requisiti è l’analisi dei casi d’uso. Molti programmatori utilizzano forme di sviluppo software Agile in cui le varie fasi dello sviluppo software formale sono più integrate in cicli brevi che richiedono alcune settimane piuttosto che anni., Ci sono molti approcci al processo di sviluppo del software.

Le tecniche di modellazione più diffuse includono l’analisi e la progettazione orientata agli oggetti (OOAD) e l’architettura basata sui modelli (MDA). Il Unified Modeling Language (UML) è una notazione utilizzata sia per l’OOAD che per l’MDA.

Una tecnica simile utilizzata per la progettazione di database è la modellazione entità-relazione (modellazione ER).

Le tecniche di implementazione includono linguaggi imperativi (orientati agli oggetti o procedurali), linguaggi funzionali e linguaggi logici.,

Measuring language usageEdit

Articolo principale: Measuring programming language popularity

È molto difficile determinare quali sono i linguaggi di programmazione moderni più popolari., I metodi per misurare la popolarità del linguaggio di programmazione includono: conteggio del numero di annunci di lavoro che menzionano la lingua, il numero di libri venduti e corsi che insegnano la lingua (questo sopravvaluta l’importanza delle lingue più recenti) e stime del numero di righe di codice esistenti scritte nella lingua (questo sottovaluta il numero di utenti di linguaggi aziendali come COBOL).

Alcune lingue sono molto popolari per particolari tipi di applicazioni, mentre alcune lingue sono regolarmente utilizzate per scrivere molti tipi diversi di applicazioni., Ad esempio, COBOL è ancora forte nei data center aziendali spesso su grandi computer mainframe, Fortran nelle applicazioni di ingegneria, linguaggi di scripting nello sviluppo Web e C nel software embedded. Molte applicazioni utilizzano un mix di diverse lingue nella loro costruzione e utilizzo. I nuovi linguaggi sono generalmente progettati attorno alla sintassi di un linguaggio precedente con nuove funzionalità aggiunte, (ad esempio C++ aggiunge l’orientamento agli oggetti a C e Java aggiunge la gestione della memoria e il bytecode a C++, ma di conseguenza perde efficienza e la capacità di manipolazione di basso livello).,

DebuggingEdit

Il primo bug effettivo noto che causava un problema in un computer era una falena, intrappolata all’interno di un mainframe di Harvard, registrata in un registro del 9 settembre 1947. “Bug” era già un termine comune per un difetto del software quando questo bug è stato trovato.

Articolo principale: Debug

Il debug è un compito molto importante nel processo di sviluppo del software poiché avere difetti in un programma può avere conseguenze significative per i suoi utenti., Alcune lingue sono più inclini ad alcuni tipi di errori perché le loro specifiche non richiedono ai compilatori di eseguire tanto controllo quanto altre lingue. L’uso di uno strumento di analisi del codice statico può aiutare a rilevare alcuni possibili problemi. Normalmente il primo passo nel debug è tentare di riprodurre il problema. Questo può essere un compito non banale, ad esempio come con processi paralleli o alcuni bug software insoliti. Inoltre, l’ambiente utente specifico e la cronologia di utilizzo possono rendere difficile la riproduzione del problema.,

Dopo che il bug è stato riprodotto, potrebbe essere necessario semplificare l’input del programma per semplificare il debug. Ad esempio, quando un bug in un compilatore può bloccarlo durante l’analisi di un file sorgente di grandi dimensioni, una semplificazione del test case che si traduce in poche righe dal file sorgente originale può essere sufficiente per riprodurre lo stesso crash. Trial-and-error / divide-and-conquer è necessario: il programmatore cercherà di rimuovere alcune parti del test case originale e verificare se il problema esiste ancora., Durante il debug del problema in una GUI, il programmatore può provare a saltare alcune interazioni dell’utente dalla descrizione originale del problema e verificare se le azioni rimanenti sono sufficienti per la comparsa di bug. Anche lo scripting e il breakpointing fanno parte di questo processo.

Il debug viene spesso eseguito con IDE come Eclipse, Visual Studio, Xcode, Kdevelop, NetBeans e Code::Blocks. Vengono utilizzati anche debugger standalone come GDB, che spesso forniscono meno di un ambiente visivo, di solito utilizzando una riga di comando. Alcuni editor di testo come Emacs permettono GDB da invocare attraverso di loro, per fornire un ambiente visivo.,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *