Introduzione
Autori
Come contribuire
Convenzioni di stile e contenuto
Prodotto e processo
1.
Ingegneria, qualità e processi
❱
1.1.
Informazioni logistiche
1.2.
Ingegneria del software
1.3.
Qualità del software
1.4.
Processo di sviluppo
2.
Modelli di ciclo di vita del software
❱
2.1.
Modelli sequenziali
2.2.
Modelli iterativi
2.3.
Modelli incrementali
2.4.
Metodologie Agile
3.
eXtreme Programming
❱
3.1.
Test Driven Development
3.2.
Fondamenti
3.3.
Tecniche
❱
3.3.1.
Planning game
3.3.2.
Brevi cicli di rilascio
3.3.3.
Uso di una metafora
3.3.4.
Presumere la semplicità
3.3.5.
Testing
3.3.6.
Refactoring
3.3.7.
Pair programming
3.3.8.
Proprietà collettiva
3.3.9.
Integrazione continua
3.3.10.
Settimana da 40 ore
3.3.11.
Cliente sul posto
3.3.12.
Standard di codifica
3.3.13.
They're just rules
3.4.
Raggruppamento in fasi
3.5.
Documentazione
3.6.
Criticità
4.
Open source
❱
4.1.
Letteratura
❱
4.1.1.
The Cathedral and the Bazaar
4.1.2.
Care and Feeding of FOSS
4.1.3.
The Emerging Economic Paradigm Of Open Source
4.1.4.
An empirical study of open-source and closed-source software products
4.2.
Sfide
5.
Software Configuration Management
❱
5.1.
Storia
5.2.
Meccanismo di base
5.3.
git
6.
Git workflow e strumenti
❱
6.1.
GitFlow
6.2.
Hosting centralizzato
6.3.
Gerrit
6.4.
Strumenti dell'opensource
❱
6.4.1.
Build automation
6.4.2.
Bug tracking
6.5.
Unified Process
Progettazione e implementazione
7.
Progettazione
❱
7.1.
Refactoring
7.2.
Design knowledge
7.3.
Conoscenze preliminari
7.4.
Principio Tell-Don't-Ask
7.5.
Interface segregation
7.6.
Esempio
❱
7.6.1.
Interface segregation all'opera
7.6.2.
Collegamento statico e dinamico
7.6.3.
Loose coupling
7.6.4.
Interfacce multiple
7.6.5.
Contract-based design vs programmazione difensiva
7.6.6.
Classi astratte
8.
Patterns
❱
8.1.
Discutere di pattern: i meta-patterns
8.2.
Singleton
8.3.
Iterator
8.4.
Chain of responsibility
8.5.
Flyweight
8.6.
NullObject
8.7.
Strategy
8.8.
Observer
8.9.
Adapter
8.10.
Facade
8.11.
Composite
8.12.
Decorator
8.13.
State
8.14.
Factory method
8.15.
Abstract factory
8.16.
Model view controller
8.17.
Model view presenter
8.18.
Builder
9.
UML
❱
9.1.
Analisi del testo naturale
9.2.
State diagram
9.3.
Superstate
9.4.
Class diagram
9.5.
Sequence diagram
9.6.
Activity diagram
9.7.
Use cases diagram
9.8.
Component diagram
9.9.
Deployment diagram
10.
Mocking
❱
10.1.
Test Double
❱
10.1.1.
Dummy objects
10.1.2.
Stub objects
10.1.3.
Mock objects
10.1.4.
Spy objects
10.1.5.
Fake objects
10.1.6.
Riepilogo
10.2.
Mockito
❱
10.2.1.
Implementazione test-double
10.2.2.
Injection
10.2.3.
Mocked constructors
10.2.4.
Mocking di Iterable
Verifica e convalida
11.
Verifica e convalida
❱
11.1.
Terminologia
11.2.
Tecniche
12.
Testing e criteri di selezione
❱
12.1.
Definizioni
12.2.
Proprietà
12.3.
Utilità di un test
12.4.
Criteri di selezione
❱
12.4.1.
Criterio di copertura dei comandi
12.4.2.
Criterio di copertura delle decisioni
12.4.3.
Criterio di copertura delle condizioni
12.4.4.
Criterio di copertura delle decisioni e condizioni
12.4.5.
Criterio di copertura delle condizioni composte
12.4.6.
Criterio di copertura delle condizioni e decisioni modificate
12.4.7.
Implicazioni tra criteri di copertura
12.5.
Altri criteri
❱
12.5.1.
Criterio di copertura dei cammini
12.5.2.
Criterio di \(n\)-copertura dei cicli
12.6.
Mappa finale implicazioni tra criteri di copertura
13.
Analisi statica
❱
13.1.
Compilatori
13.2.
Analisi Data Flow
❱
13.2.1.
Regole
13.2.2.
Sequenze
13.3.
Testing
13.4.
Criteri di copertura
❱
13.4.1.
Criterio di copertura delle definizioni
13.4.2.
Criterio di copertura degli usi
13.4.3.
Criterio di copertura dei cammini DU
13.5.
Oltre le variabili
14.
Processi di review
❱
14.1.
Bebugging
14.2.
Analisi mutazionale
❱
14.2.1.
Criterio di copertura dei mutanti
14.2.2.
Generazione dei mutanti
14.2.3.
Automazione
14.3.
Object oriented testing
14.4.
Testing funzionale
❱
14.4.1.
Testing delle interfacce
14.4.2.
Classi di equivalenza
14.4.3.
Test di frontiera
14.4.4.
Category partition
14.4.5.
Object orientation e testing funzionale
14.5.
Software inspection
❱
14.5.1.
Fagan code inspection
14.5.2.
Automazione
14.5.3.
Pro e contro
14.5.4.
Confronto tra tecniche di verifica e convalida
14.5.5.
Gruppi di test autonomi
14.6.
Modelli statistici
14.7.
Debugging
Reti di Petri
15.
Reti di Petri
❱
15.1.
Definizioni
15.2.
Macchine a stati finiti
15.3.
Relazioni tra transizioni
❱
15.3.1.
Sequenza
15.3.2.
Conflitto
15.3.3.
Concorrenza
15.4.
Insieme di raggiungibilità
15.5.
Limitatezza
15.6.
Vitalità di una transizione
15.7.
Capacità dei posti
15.8.
Archi inibitori
15.9.
Eliminazione pesi sugli archi
15.10.
Conservatività
15.11.
Stato base e rete revertibile
16.
Analisi di reti di Petri
❱
16.1.
Albero di raggiungibilità
16.2.
Albero di copertura
16.3.
Rappresentazione matriciale
16.4.
Analisi statica
❱
16.4.1.
\(P\)-invarianti
16.4.2.
\(T\)-invarianti
16.5.
Controllori con specifica a stati proibiti
16.6.
Reti con priorità
17.
Reti di Petri temporizzate
❱
17.1.
Modelli temporali
17.2.
Reti Time Basic
17.3.
Evoluzione
❱
17.3.1.
Semantica temporale debole
17.3.2.
Semantica temporale monotonica debole
17.3.3.
Semantica temporale forte
17.3.4.
Semantica temporale mista
17.4.
Analisi delle reti Time Basic
❱
17.4.1.
Reti TB come reti ad alto livello?
17.4.2.
Analisi di raggiungibilità temporale
Light
Rust
Coal
Navy
Ayu
Ingegneria del software
Verifica e convalida
Terminologia
Tecniche