Differences

This shows you the differences between two versions of the page.

Link to this comparison view

appunti3s:ingegneria_del_software [2018/04/25 07:55]
appunti3s:ingegneria_del_software [2018/04/25 07:55] (current)
Line 1: Line 1:
 +====== Ingegneria del software ======
 +(vedere appunti Monfardini unisi.it)
 +    - processo = sequenza: principi (teorici) -> metodologia (tecniche) -> prodotti ​
 +    - rigore, formalismo, sistematicità e leggi matematiche aiutano lo sviluppo delle soluzioni
 +    - le specifiche del prodotto/​problema vanno separate (funzionalità,​prestazioni,​usabilità)
 +      - specifiche operazionali (flussodati) ​
 +        - quali dati memorizzare
 +        - quali operazioni fare
 +      - specifiche descrittive (ER-relazioni)
 +      - le specifiche possono essere fornite in modo confuso dall'​utente
 +    - la documentazione del processo aiuta la gestione del processo
 +    - i responsabili dei processi aiutano a risolvere i problemi
 +    - esempio: metodo //a cascata// diviso (nel tempo) in fasi e attività
 +    - la modularità del software: un sistema è composto da parti collegate (ma sommando le parti non si riottiene il sistema)
 +      - esempio di un giocatore di una squadra di calcio: giocare da soli non è la stessa cosa
 +      - divide et impera per vincere la complessità
 +      - coesione dei moduli (chiusi) e basso accoppiamento dei moduli (dipendenze)
 +    - astrazione del sistema/​problema:​ ignorare i dettagli, identif. aspetti principali
 +      - ottenere un modello astratto semplificato
 +      - descriverlo in modo formale
 +      - risolvere il modello non il problema reale
 +    - prevedere lo sviluppo delle specifiche nel tempo (evoluzione sw)
 +    - cercare di riutilizzare soluzioni esistenti ​
 +    - fare un esempio: progetto di un sistema "​ascensore"​
  
 +====== Modelli di sviluppo del software (lifecycle) ======
 +  - a cascata
 +  - incrementale
 +  - microsoft ​
 +  - open source
 +  - metodologie
 +  - processo unificato
 +  - scrivi e correggi: è un modello che non so quanto mi costa e nemmeno quando finirà! :(
 +  - metodo agile
 +
 +===== metodo di sviluppo agile =====
 +nato per evitare i problemi relativi ai progetti troppo grandi e dispersivi
 +
 +  * è un processo di sviluppo del software
 +  * è iterativo: si ripetono dei passaggi
 +  * è incrementale:​ ad ogni passaggio ottengo qualcosa di migliore
 +  * analisi -> progetto -> realizzazione -> test (ciclicamente)
 +
 +  - //analisi del problema//
 +    * semplificare e definire il problema
 +    * dividere in sotto-problemi
 +    * definire gli obiettivi
 +  - //​progettazione//​
 +    * individuare lo stile di programmazione più utile (fare un ponte di legno o di acciaio?)
 +    * individuare il linguaggio che usa tale stile
 +    * individuare l'​architettura della soluzione
 +    * individuare i mezzi (quanto tempo e quante persone?)
 +    * definire gli obiettivi
 +  - //​realizzazione o implementazione//​ (fare il ponte nel materiale scelto)
 +    * ricercare soluzioni esistenti
 +    * personalizzare tali soluzioni
 +    * creare nuove soluzioni (generali e personalizzabili in futuro)
 +    * mettere insieme le soluzioni parziali
 +  - verifica
 +    * non è l'​ultima fase ma va fatta continuamente durante il progetto (come la documentazione)
 +
 +Sebbene le fasi dello sviluppo del software siano state numerate, non si deve credere che si tratti di un modello "a cascata"​. Le fasi si influenzano a vicenda e può accadere, ad esempio, che per risolvere un problema sorto in fase di //​implementazione//​ si apportino delle modifiche alla fase di //​progettazione//​.
 +
 +==== principi ====
 +  * dare molta importanza alle persone
 +  * scrivere più software e meno documentazione (svantaggi?​)
 +  * sensibilità ai cambiamenti delle specifiche (anche non documentati)
 +  * riunioni in piedi
 +  * gruppi di lavoro piccoli e autonomi nelle decisioni
 +  * responsabilità di tutti
  • appunti3s/ingegneria_del_software.txt
  • Last modified: 2018/04/25 07:55
  • (external edit)