You are on page 1of 37

STRATEGIE NELL INGEGNERIA DEL SOFTWARE

Renzo Barbazza Applications Engineer

Strategie nellingegneria del software

Debiti nellingegneria del software

Mancato utilizzo di Source Code Control Gerarchia piatta (nessun Main, nessun Progetto) Test irregolare della condizione di Stop Creazione delleseguibile solamente alla fine Specifice non ben definite e/o non documentate Progettazione scarsa in termini di SMoRES (Scalabilit, Modularita, Riutilizzabilit, Esentensibilit, Semplicit) Mancata pianificazione di test Gestione della condizione derrore lacunosa Impiego di stili non consistenti

Quanto costano i difetti del software

FASE DISVILUPPO
Prerequisito Progettazione Implementazione Test(fase di sviluppo) Test(fase di rilascio) Dopo il rilascio

RAPPORTO DI COSTO
1 36x 10x 1540x 3070x 401000x

Basatosullanalisidi63progettisoftwareinaziendetracuiIBM,GTEeTRW

Di cosa parleremo

Definizione degli obbiettivi

Scelta dell architettura

Sviluppo

Teste validazione

Distribuzione

SoftwareConfigurationManagement Con il concetto di Configuration management si intende il processo di controllo delle modifiche e del fatto che le stesse vengano testate e validate prima di essere trasformate in definitive. Uno degli obbiettivi fondamentali di questo processo trasformare lo sviluppo del software da attivit caotica non pianificata ad attivit programmata. Questo processo permette di migliorare I risultati introducendo obbiettivi specifici e misurabili in ogni fase dello sviluppo del software.

Di cosa parleremo

Definizione degli obbiettivi

Scelta dell architettura

Sviluppo

Test e validazione

Distribuzione

Software Configuration Management

Approccio gestionale allo sviluppo Definizione e tracciabilit dei requisiti di progetto Test e debug del software Distribuzione delle applicazioni

ni.com/largeapps

Dietro la semplicit del linguaggio grafico


mov byte ptr [esi+29h],0 mov eax,dword ptr [esi+18h] mov ebp,dword ptr [esi+14h] mov dword ptr [esi+0Ch],eax cmp byte ptr [esi+2Ah],1 je 0ABFFE0F mov eax,dword ptr [esi+1Ch] mov eax,dword ptr [eax+14h] test eax,eax je 0ABFFCEF cmp byte ptr [eax+2Ah],1 jne 0ABFFCEF jmp 0ABFFE0F mov ecx,dword ptr [ebp+44h] xor eax,eax mov edx,1 lock cmpxchg dword ptr [ecx],edx test eax,eax jne 0ABFFCEF mov eax,dword ptr [esi+1Ch] lea ecx,[ebp+4Ch] mov dword ptr [eax+10h],ecx mov dword ptr [ebp+68h],eax mov dword ptr [ebp+48h],esi cmp dword ptr [eax+14h],0 jne 0ABFFD90 mov dword ptr [eax+14h],esi mov byte ptr [ebp+1Eh],1 cmp dword ptr [esi+30h],2 je 0ABFFE39 mov byte ptr [ebp+1Bh],1 mov esi,dword ptr [ebp+360h] mov esi,dword ptr [esi] mov dword ptr [ebp+37Ch],esi

inc
mov cmp mov je cmp jne mov mov mov mov mov cmp jne mov cmp jne mov xor jmp mov mov mov mov mov add pop mov jmp add mov call

dword ptr [ebp+37Ch]


esi,dword ptr [ebp+48h] byte ptr [esi+3Dh],1 eax,dword ptr [ebp+68h] 0ABFFE09 dword ptr [eax+28h],0 0ABFFE1F dword ptr [ebp+48h],0 dword ptr [eax+10h],esi byte ptr [ebp+1Eh],0 ecx,dword ptr [ebp+44h] dword ptr [ecx],0 dword ptr [eax+14h],esi 0ABFFE0F dword ptr [eax+14h],0 byte ptr [esi+29h],5 0ABFFE0F dword ptr [esi+29h],2 eax,eax 0ABFFD13 dword ptr [esi+1Ch],eax dword ptr [eax+10h],esi edx,dword ptr [esi+8] ecx,dword ptr [esi+0Ch] eax,esi esp,8 esi ebp,edx ecx ebp,3Ch dword ptr [esp],ebp SubrVIExit (24D6450h)

Compilatore

Dietro la semplicit del linguaggio grafico DataFlowIntermediateRepresentation(DFIR)


Rappresentazionedialtolivellobasatasulcodicegrafico Preservadataflow,strutturagerarchicaeparallelismo delcodice SviluppatainternamenteaNationalInstruments BlockDiagram DFIR

Transforms
LLVM

LowLevelVirtualMachine(LLVM)
Rappresentazionesequenzialedibassolivello Basatasullecaratteristichedellamacchinasucuiviene eseguita Frameworkdicompilazioneopensource

Transforms

TargetMachineCode

Applicazioni complesse

NumeromediodiVIssviluppati nellapplicazione Fonte:2010ni.com/largeapps survey

0to100VIs

100to250VIs 250to1000VIs 1000to3000 3000to5000 Greaterthan VIs VIs 5000

Numeromediodiprogrammatori coinvoltinellosviluppo Fonte:NIWeek 2008SoftwareEngineering Survey


>10 5to10 3to5 2 1

Source Code Control


Merger CodeRevision Lockedforedit

Sviluppatore1

Checkedout Code Repository Checkedout CheckedIn

CheckedIn

GetLatestVersion

CheckedOut

CheckedIn

Sviluppatore2

Source Code Control esteso


GESTIONECENTRALIZZATADEL CODICEDELLINTEROPROGETTO GESTIONECENTRALIZZATADELCODICE DELLEVARIESEZIONIDELPROGETTO

GESTIONELOCALEDELCODICESVILUPPATO DALSINGOLOPROGRAMMATORE

Interazione LabVIEW-SCC
Integrazione LabVIEW nativa Perforce Rational ClearCase Support through additional add-ons Subversion Mecurial
48

Popolaritmediadeisistemidi SourceCodeControl traiprogrammatoriLabVIEW Source:2010ni.com/largeapps survey


10 1 Perforce Subversion ClearCase 1 Git 1 VSS 4 Mecurial 3 none

Interazione LabVIEW-SCC

Esempidiinterazione LabVIEWSCC

Pallettedellefunzioni LAbVIEWperlutilizzo programmaticodiSCC

Confronto grafico

Checklistdelle differenze Visualizzazione grafica delle modifiche

Il processo di ingegnerizzazione del software


Definizione degli obbiettivi Scelta dell architettura Sviluppo Teste validazione Distribuzione

PROTOTIPO

Requirement sGathering

TESTeREVISIONE

System Testing

UTILIZZO

Application Architecture

Integration Testing

Module Architecture

UnitTesting

Deployment

Il processo di ingegnerizzazione del software


National Instruments nel processo di ingegnerizzazione del software
Definizione degli obbiettivi NIRequirements Gateway Scelta dell architettura LabVIEW Statechart Object Orientation NITestStand Teste validazione

Sviluppo

Distribuzione

Dataflow MathScript Statechart Simulation

LabVIEWUnit TestFramework LabVIEW VIAnalyzer LabVIEW Desktop ExecutionTrace

Application Builder RealTime FPGA Embedded

Inclusi nella DevSuite

Funziona!
Aumenta laqualit,riduce i rischi ei tempidi realizzazione

Tracciabilit dei requisiti

NI Requirements Gateway
Definizione degli obbiettivi Scelta dell architettura Teste validazione

Sviluppo

Distribuzione

Tracciabilitdeirequisiti Documentazioneditracciabilit

Revisione del codice

Quali domande accompagnano la revisione del codice Il codice facile da manutenere ed ben documentato? Cosa succede se il codice riceve/genera un errore? Troppe funzionalit condensate in un solo VI? Sono presenti delle race-conditions? L utilizzo di memoria rispetta I limiti considerati consoni alla funzionalit? La migliore revisione del codice in assoluto quella che oltre ad essere programmata viene anche fatta!!

Documentazione del codice

Oggetti provvisti di etichetta Commenti in-line Icone distinte ed esplicative Descrizioni e suggerimenti HTML Print-Out Tracciabilit dei requisiti di progetto

Debug e test del software


Definizione degli obbiettivi Scelta dell architettura Sviluppo Teste validazione Distribuzione

Advanced

Complessitdellapplicazione

UnitTest Framework

Analisi funzionale

DesktopExecution Trace

RealTime ExecutionTrace

Analisi dinamica

Simple

VIAnalyzer Toolkit

Analisi statica

LowRisk

Criticitdellapplicazione

HighRisk

LabVIEW VI Analyzer Analisi automatizzata del codice Prestazioni Difetti di stile Complessit Ricerca delle criticit Generazione di rapporti Misura della complessit attraverso metriche standard Personalizzazione del VI Analyzer test con VI Scripting (LV 2010)

Debug e test del software


Definizione degli obbiettivi Scelta dell architettura Sviluppo Teste validazione Distribuzione

Advanced

Complessitdellapplicazione

UnitTest Framework

Analisi funzionale

DesktopExecution Trace

RealTime ExecutionTrace

Analisi dinamica

Simple

VIAnalyzer Toolkit

Analisi statica

LowRisk

Criticitdellapplicazione

HighRisk

Analisi dinamica remota di sistemi

LabVIEW DesktopExecutionTraceToolkit
Network

Informazioni di esecuzione

VIs ed eseguibili debuggabili

LabVIEWRealTimeExecutionTraceToolkit
Network

Informazioni di esecuzione

Applicazioni Real-Time scaricate su target

Desktop Execution Trace Toolkit

Monitoraggio Run-Time di
Strutture a eventi Allocazione della memoria Code/ Notificatori Riferimenti inconsistenti Thread ID Errori non gestiti SubVIs statici e dinamici Eventi user-defined

Debug remoto di eseguibili

Il block diagram viene incluso nellesegubile e diventa possibile fare debug remoto attraverso i tools di LabVIEW

Debug e test del software


Definizione degli obbiettivi Scelta dell architettura Sviluppo Teste validazione Distribuzione

Advanced

Complessitdellapplicazione

UnitTest Framework

Analisi funzionale

DesktopExecution Trace

RealTime ExecutionTrace

Analisi dinamica

Simple

VIAnalyzer Toolkit

Analisi statica

LowRisk

Criticitdellapplicazione

HighRisk

LabVIEW Unit Test Framework

Unostrumentopertestareedocumentareilfattocheilcodice rispondeaglistimoliinmodoatteso

Valori di input

Output

VIUnderTest on Windows RealTimeOS UnitTest Framework

Outputatteso

Automated Report Generation

Testvector=Inputvalue(s)+Expectedoutput(s)

LabVIEW Unit Test Framework

Input Values

Value Comparison

API per utilizzare LabVIEW Unit Test Framework in modo programmatico


Accessibilit programmatica a Avvio di un test Accesso ai risultati Creazione di rapporti di test

Integrazione con NI Requirements Gateway


Implementazione

Requisiti di progetto

Definizionedei test Risultatideitest

Distribuzione del software


Definizione degli obbiettivi Scelta dell architettura Sviluppo Teste validazione Distribuzione

ApplicationBuilderAPINewinLabVIEW2011

Generazione di App-Builder Log-File

Documentalaversione,ladataeloradellultimamodificadei VIsinclusinelbuild(DisponibileinLabVIEW2009)

DEMO
InterazioneLabVIEWSourceCodeControl NIRequirementsGateway NIVIAnalyzerToolkit NILabVIEWDesktopExecutionTraceToolkit NILabVIEWUnitTestFrameworkToolkit

Developer

Senior Developer

Software Architect / Project Manager


Advanced Architectures in LabVIEW Managing Software Engineering in LabVIEW

LabVIEW Core 1

LabVIEW Core 2

Certified LabVIEW Associate Developer

LabVIEW Core 3

Certified LabVIEW Developer

Certified LabVIEW Architect

LabVIEW Connectivity LabVIEW Performance Object-Oriented Design & Programming in LabVIEW

Corsiraccomandati Corsiconsigliati Certificazionidisponibili

"CertificationisanabsolutemustforanyoneseriousaboutcallinghimselfaLabVIEW expert

President,JKISoftware,Inc.

Maggiori informazioni sull argomento SOFTWARE ENGINEERING BEST PRACTICES sono disponibili al link

ni.com/largeapps
Grazie a tutti dellattenzione
Renzo Barbazza Application Engineer, National Instruments

You might also like