Costruire il software nella
nuova era: Software Factories
e Visual Studio Team System
Lorenzo Barbieri
[email protected]
La necessità da cui partiamo:
IL “DOPPIO” RUOLO
DELL’ARCHITETTO
Non esiste un solo architetto...
Solution
Architect
Infrastructure
Architect
Sviluppo
IT Operations
...chi sviluppa...
Solution
Architect
Sviluppo
• Come progetto
sistemi
Infrastructure
che soddisfano le Architect
operational policies?
• Come comunico i requisiti
applicativi agli IT Pro?
• Come comunico le scelte
architetturali ai
developer? IT Operations
• Come mantengo
sincronizzati codice e
modelli?
...chi gestisce...
Solution
• Come descrivo le policy e
Architect
la configurazione?
• Come comunico questi
vincoli al team di
sviluppo?
• Come possiamo verificare
i sistemi prima di farne il
Sviluppo
deployment?
Infrastructure
Architect
IT Operations
...ci vogliono i tool appropriati!
Solution
Architect
Sviluppo
Manca un
linguaggio
comune...
Infrastructure
Architect
IT Operations
Service Modeling Language (SML) ovvero la nuova versione del:
SYSTEM DEFINITION MODEL
System Definition Model (SDM)
• E’ un modello formale che descrive un intero sistema
• Contiene tutte le informazioni che riguardano il deployment e
la gestione
?
• E’ un formato machine-readable, che cattura gli
intenti di sviluppatori e IT Pro
–
–
–
–
–
–
–
–
Topologia del sistema
Contraint imposti dagli sviluppatori
IT Policy
Direttive di installazione
Health model
Regole di monitoring
Service Level Agreement
Report
Applicazioni
Application
Hosts
Reti e OS
Hardware
?
Service Modeling Language
• SDM è un’iniziativa Microsoft.
• A fine Luglio 2006 Microsoft, BEA, BMC,
Cisco, Dell, EMC, HP, IBM, Intel e Sun
hanno creato SML, un linguaggio
standard per la definizione dei Servizi e
dei Sistemi.
• E’ attualmente in Draft, vedrà compimento
probabilmente in Visual Studio “Orcas”
Il primo passo:
VISUAL STUDIO TEAM
EDITION FOR SOFTWARE
ARCHITECTS
Distributed System Designer
Application Designer
System
Designer
Design e
configurazione
dei sistemi
Logical Datacenter
Designer
Architettura
delle
applicazioni
Class Designer,
Codice
il
Design,Descrive
sviluppo,
test, deployment di
un sistema nel
implementazione
datacenter
e
File Validazione
binari e
Report HTML e
correzione
risorse
copiati
XML per il
degli errori
in produzione
deployment fisico
Descrive il
datacenter dal
punto di vista
“logico”
Deployment
Designer
Deployment
Report
Questi modelli a volte non bastano... E poi...
...DOV’È UML?
I tre approcci di UML:
• UML come abbozzo (sketch)
–
–
–
–
Documentazione, discussione e condivisione di idee
Basso rigore formale
Selettività: focalizzazione solo su alcuni aspetti dell’applicazione
Bassa, se non nulla dipendenza dal tool di modellazione
• UML come progetto (blueprint)
–
–
–
–
Completezza
Alto rigore formale
Forward e reverse engineering
Forte dipendenza dal tool di modellazione
• UML come linguaggio di programmazione
– Diagrammi compilabili
– No forward e reverse engineering
– Fortissima dipendenza dal tool di modellazione
UML e la tecnologia Microsoft
• Il problema di UML è che è un linguaggio
di modellazione troppo generico, sfruttato
generalmente solo in minima parte.
• Visio Enterprise Architect (che fa parte di
MSDN Premium) è il tool per la
modellazione UML e anche per il reverse
engineering
Ma serve veramente?
• Molto spesso di UML si usano solo pochi e specifici
diagrammi:
– Use Case, Sequence e Collaboration diagram
– Diagrammi delle classi
• I diagrammi delle classi sono molto simili a quelli
ottenibili dal Class Designer di VS2005 (presente dalla
Standard in su):
– La differenza è che il Class Designer di VS2005 mappa
1:1 tutti i concetti di .NET (attributi, etc...) senza richiedere
strane estensioni, permettendo un round-trip completo
codice<->modello
– I diagrammi delle classi UML sono generici, e vanno estesi
per mappare i concetti specifici
Attenzione al BDUF
• Attenzione che se i modelli non servono in
pratica, rischiano di restare carta straccia.
• Molto spesso si tende a fare il Big Design
Up Front, disegnando modelli su modelli
che non verranno però più manutenuti.
• Il vantaggio dei designer di VSTS è di
essere completamente bidirezionali
La visione di Microsoft per il
Modeling
Our vision is to change the way developers perceive the value of
modeling. To shift their perception that modeling is a marginally useful activity
that precedes real development, to recognize that modeling is an important
mainstream development task and not an activity primarily focused on
documentation.
From: Visual Studio 2005 Team System Modeling Strategy and
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/vstsmodel.asp
FAQ
• Un modello rappresenta un set di astrazioni che supporta gli
sviluppatori in compiti ben definiti
• I modelli possono essere usati per aggregare informazioni da varie
fonti, e possono aiutare nel verificare la consistenza del sistema
• I modelli possono essere implementati attraverso un processo di
“compilazione”, dove il codice, i file di configurazione e tutti gli altri
artefatti possono essere generati automaticamente
Raccomandazioni:
•
Microsoft raccomanda di usare UML (o simili) per le seguenti attività:
–
–
–
–
•
Sketching
White boarding
Documentazione
Disegni e altri diagrammi che non generano direttamente codice
Raccomanda i Distributed System Designers e i Domain Specific
Languages per:
– Astrazioni precise dalle quali può essere generato il codice
– Disegni e altri diagrammi che servono per generare codice o altri diagrammi in
maniera automatica
•
Nessuno dei tool precedenti per descrivere in maniera dettagliata la logica
dei programmi (almeno per qualche anno ancora)
•
Fonte:
– http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnvs05/html/vstsmodel.asp
Andiamo oltre:
DOMAIN SPECIFIC
LANGUAGES
DSL: Cosa sono?
• Un Domain Specific Language, a differenza di un linguaggio
general-purpose, è progettato per essere utilizzato per compiere
uno specifico task in uno specifico dominio.
• I Domain Specific Language possono essere grafici, testuali,
descrittivi, etc...
• Alcuni DSL li usavamo da sempre, anche senza accorgercene:
–
–
–
–
Designer delle Windows Forms, VB1..VB6
Designer di ASP.NET, FrontPage
Tool WYSIWYG in genere che aiutano nello sviluppo
Regular Expression, file XML usati per scopi specifici, etc... Sono tutti
DSL senza rappresentazione “grafica”
• Quindi i DSL in generale sono formalismi che possono essere usati
“direttamente” per generare codice o altri elaborati.
DSL in Visual Studio
• Di default in Visual Studio vengono forniti una serie di
Designer che sfruttano la piattaforma fornita dai DSL
Modelling Tools:
– Class Designer (a partire dalla Standard)
– Application, System, Logical Datacenter e Deployment
Designers
• Tramite i DSL Tools (disponibili nel Visual Studio 2005 SDK
v4) è possibile creare i propri DSL che possono essere
utilizzati a partire da Visual Studio 2005 Standard
• Maggiori informazioni sui DSL Tools possono essere trovate a
partire da: http://msdn.microsoft.com/vstudio/DSLTools/
Ha senso crearsi i propri
designer?
Shape
Corona
members
Base
Group
property
label
Corona
playing
Corona
waiting
pause
begin
running
stop
R
0.1R
C
+v
0.1R
R
C
0.7CR
0v
Componenti del Designer
Toolbox
Explorer
Property
Browser
Validation
Drawing surface
with domain
specific notation
Esempio: Entity Designer
I DSL sono l’evoluzione della
specie...
Routine configuration
Creative construction
Wizards
Feature-based
configuration
scr1
scr2
scr4
scr5
matrix
scr3
scr6
[element type]
scr7
scr11
scr9
Graph-like language
(with user-defined elements)
scr8
rect
scr12
lower
Triang
shape
upper
Triang
format
symm
bounds checking
vect
C-like
array
Frtn-like
scr10
Path through a decision tree
Subtree of a feature tree
Subgraph of an
(infinite) graph
I DSL vanno creati ed usati
“ragionevolmente”
•
Per costruire un DSL bisogna conoscere molto bene un Dominio
– Non si può partire dal DSL!
– Il DSL può essere l’astrazione di un lavoro fatto e da ripetere N volte
•
A volte il Dominio è troppo “variabile” per giustificare l’investimento nel
creare un DSL
•
Possono essere usati per creare graficamente dei designer “comuni”:
–
–
–
–
•
WSDL
File di mapping
File di configurazione
Codice da riutilizzare spesso
I DSL non vanno “normalmente” usati per crearsi i propri linguaggi di
modellazione
– Si ricadrebbe nel BDUF
•
I DSL si sposano alla perfezione con le Software Factories
Software Factories
COSA SONO?
I problemi dello sviluppo
tradizionale
•
I problemi principali nel modo “tradizionale” di sviluppare software sono:
–
–
–
–
–
•
Il modo tradizionale è ancora molto artigianale:
–
–
–
–
•
Ogni progetto è trattato come un caso unico
Sistemi monolitici molto complicati
Livelli di astrazione troppo bassi
Immaturità del processo
Domanda di software molto superiore all’offerta
Basato sul lavoro
Tool e processi troppo generici
Troppi “casi unici” e troppo lavoro “manuale”
Riutilizzo minimo del lavoro già svolto
Il risultato sono:
–
–
–
–
Ore di straordinario
Bug
Problemi
Etc...
Una possibile soluzione
• Il modello delle Software Factories è una
possibile soluzione all’artigianato nel software.
• E’ un modello che si fonda sui concetti del Model
Driven Development (da non confondersi con la Model
Driven Architecture di OMG) e che promette una
“industrializzazione” dei processi software, migliorando
il riuso e le economie di scala.
• Nei processi attuali le uniche economie di scala
applicabili al software riguardano la produzione del
prodotto finito (CD, DVD, manuali, etc...) e non la sua
realizzazione.
Application Specific Integrated
Circuits (ASICs)
Cosa c’è alla base delle
Software Factories
Software
Product
Lines
Guidance in
Context
Architecture
Frameworks
Model
Driven
Development
Software Factories
• Si parla di Software Factories quando ci sono i quattro
elementi precedenti, chiamati anche “pilastri”
• Lo scopo di questi quattro pilastri è quello di migliorare la
produttività e la predicibilità durante il ciclo di vita del software
• Creare una Software Factory ha senso quando si devono
sviluppare una serie di soluzioni correlate e customizzabili per
i clienti specifici
– Non industrializzo un processo quando voglio una produzione
non di serie e con caratteristiche molto differenziate
– Industrializzo un processo quando voglio una produzione di
“serie” ma customizzabile
• Automobili con un listino molto variegato
• PC acquistati da un grosso produttore ma customizzabili
• Etc...
Software Product Lines
Estensibilità
Scope
Parti comuni
Variabilità
• “A Software Product Line is a set of software-intensive systems
sharing a common, managed set of features that satisfy the specific
needs of a particular market segment or mission and that are
developed from a common set of core assets in a prescribed way”
Paul Clements e Linda Northrop, 2002
Software Product Lines
• In pratica:
– Costruire nuove soluzioni assemblando soluzioni
parziali e/o configurando componenti generici
– Bisogna specificare e implementare solo se
feature univoche, basandosi su quelle già
presenti
– Se ben applicate riducono i tempi degli sviluppi
custom dal 40% all’80% rispetto ai metodi
tradizionali
• Per maggiori dettagli:
– http://softwareproductlines.com/index.html
Architecture Framework
• Si parla di Architecture Framework riferendosi a quel particolare
asset che identifica l’architettura sulla quale si basa tutta la
soluzione (“baseline architecture”.
• Generalmente si usa un Architecture Framework già pronto (Smart
Client, etc...) o lo si realizza sulla base del riuso di proprie classi,
risorse, bets practice, etc...
• Se fatto bene l’Architecture Framework permette di alzare
notevolmente il livello di astrazione e di ridurre il tempo necessario
all’implementazione della soluzione finale.
• In pratica:
– Definisco dei Viewpoint che identificano e separano i concetti
fondamentali
– Organizzo tool, processi e contenuto in base ai viewpoint
– Integro e collego le fasi del ciclo di vita, i componenti da usare e i livelli
di astrazione da impiegare
Cambia il processo di sviluppo
Asset
Development
creates
uses
Tools, Process,
Content
Requirements,
Defects
uses
creates
Product
Development
creates
uses
Products
Requirements,
Defects
uses
creates
Business
Come ricavo la SPL e l’AF?
•
•
DEVO già avere esperienza nello sviluppo di un sistema.
MAI partire da zero a sviluppare una SPL e un AF
•
Lo faccio solo se ho delle varianti:
–
CRM, ERP, etc...
Assets {1,2}
System 1
copy/paste
•
•
•
adapt
generalize
System 2
Assets {1,2,3}
customize
System 3
customize
Identifico gli asset dalle varianti
Adatto gli asset alle nuove varianti
Customizzo e applico tool, processi, etc..
per realizzare le singole varianti
adapt
System 4
customize
System 5
Assets {1..5}
Feature Model: Uno strumento
per gestire la configurazione
OrderManagement
Feature obbligatoria
OrderCapture
Payment
Tax
PayByBill
Invoice
Online
PayOnDelivery
Approval
CreditCard
Fulfillment
ShipmentCost
Printed
Shipping
PackageTrackingNo
Feature opzionali
«implies»
FrequentFlyer
Feature alternative
«implies»
ElectronicDelivery
PackageSlip
Esempio di “configuratore”
• E’ possibile costruirsi
un “configuratore” che
gestisca i nostri
Feature Model e
prepari in uscita la
descrizione per poter
creare la (o le)
Solution di Visual
Studio
Guidance in Context
• Non servono le Software Factories per avere della Guidance.
• Abbiamo già:
–
–
–
–
–
MSDN
I Blog
Libri
Articoli
Pattern & Practice:
•
•
•
•
Enterprise Library
Application Blocks
Libri
Etc...
• Il problema è che abbiamo TROPPE informazioni.
• Identificare nelle varie Guidance disponibili quello che ci serve
è quasi più dispendioso che sviluppare la nostra soluzione.
Guidance in Context
• La Guidance deve essere calata nel contesto
in cui stiamo lavorando.
• Non deve essere generica “bisognerebbe
fare così” ma deve essere concreta, con
istanze concrete e soprattutto deve essere
automatizzabile:
–
–
–
–
Wizard
Strumenti
Designer
Guidance legata al mio singolo
problema/contesto
Guidance Explorer
http://www.guidancelibrary.com/GuidanceExplorerBeta
Come evolve la Guidance
Designers
Abbiamo bisogno di tool che ci
aiutino nell’implementazione
Se riusciamo a generare
Frameworks
una serie di feature
precompilate diventano
Templates
Se riusciamo ad
automatizzarne l’applicazione
diventano
Patternssulla base
Una volta formalizzate
dell’esperienza diventano
Guidelines
GAX e GAT
• GAX e GAT ci permettono di costruire la Guidance
“tarata” per il nostro problema/dominio/tecnologia
specifica:
– Guidance Automation Extensions (GAX) estende
VS2005 con la capacità di eseguire i Guidance
Packages contenuti, ad esempio, nelle Software
Factories. I Guidance Packages permettono di
automatizzare una serie di task di sviluppo all’interno
dell’ambiente Visual Studio.
– Guidance Automation Toolkit (GAT) è un
particolare Guidance Package che permette agli
architetti di costruire un insieme riutilizzabile di Asset
che possono formare Software Factories, framework
e pattern.
GAT
• Cosa posso creare con il GAT
– Recipes - Recipes automate activities that developers would usually
perform manually, often by following a series of instructions.
– Actions Actions are atomic units of work called in a defined sequence
by recipes.
– Text Template Transformation Templates A Text Template
Transformation template consists of a combination of text and scriptlets.
Scriptlets are expressions in Visual Basic or C# that when run, return a
string that is directly inserted into the output stream of the template.
– Wizards Wizards are value gathering strategies used to gather values
from recipe arguments. Any recipe can have a wizard associated with it.
– Type Converters Type converters validate the value of a field and
convert them from their user interface representation to a type
representation
– Visual Studio Templates Visual Studio templates are written in XML
and are used by Visual Studio to create solutions or add one or more
projects or items to an existing solution.
Model Driven Development
• Il Model Driven Development nelle Software Factories è attuato
tramite i Domain Specific Languages e i designer grafici.
• L’idea alla base del Moden Driven Development è legata al fatto che
i modelli non servono solo come documentazione, ma come base
concreta per generare codice.
• I vantaggi di questo approccio:
– Aumenta il livello di astrazione – i modelli sono un ottimo
meccanismo gestire la complessità concentrandosi solo sugli aspetti
rilevanti al problema da risolvere
– Chiude il divario tra design e codice – grazie ai DSL è possibile
passare dai modelli al codice
• Un’altra possibile implementazione del MDD è la MDA (Model
Driven Architecture) di OMG, che però si basa su UML e sui concetti
di platform indipendent model e degli attuatori per passare alla
tecnologia specifica (Java, .NET, etc...)
SOFTWARE FACTORIES IN
PRATICA
Ciclo di vita di una Software
Factory
E praticamente...
• La nostra Software Factory alla fine non sarà
nient’altro che un “qualcosa” che creerà una (o più)
soluzioni in Visual Studio contenenti la base della
nostra applicazione, utilizzando il codice, le best
practices, i framework, etc... definiti in precedenza.
• E’ possibile andare oltre, ad esempio pensando
all’integrazione con Team Foundation Server:
– Branch da una serie di “building block”, così se li modifico
posso sfruttare le funzionalità di Merge
– Creazione automatica di una serie di WorkItem
– Creazione di Test, regole di Code Analysis, Team Build,
etc...
SOFTWARE FACTORIES GIÀ
PRONTE
Per non fare tutto da zero
• Esistono già delle Software Factory
“tecnologiche”:
–
–
–
–
–
Web Services Software Factory
Web Client Software Factory
Smart Client Software Factory
Mobile Client Software Factory
Ne usciranno tante altre...
• Aggregano Guidance, Application Block,
Framework e Best Practices esistenti
Per non fare tutto da zero
• Difficilmente troverete Software Factory
“applicative” già pronte perchè dipendono
molto dal VOSTRO contesto
• Probabilmente in futuro usciranno
Software Factory relative ad esempio
all’integrazione con prodotti specifici
Visual Studio Team System
LA PIATTAFORMA
INTEGRATA
Application Life Cycle
Management (ALM)
Business
Analyst
Operations, QA
and Help Desk
Web Clients and
XML Web
Services
Third-Party
IDEs
Visual Studio Team System
Visual Studio Team Suite
MSF Process and Guidance
Visual
Studio
Team
Explorer
Software
Architects
Application
Modeling
Infrastructure and
Deployment
Modeling
Software
Developers
Code Analysis
Performance
Tuning
Security Analysis
Software
Testers
Performance
Testing
Manual Testing
Test Case
Management
Database
Professionals
Database
Deployment
Database
Change Mgmt.
Database
Testing
Unit Testing
Code Coverage
Class Modeling
Visio and UML Modeling
Visual Studio Professional Edition
Load Test Agent
Visual Studio Team Foundation Server
Change Management
Reporting
Integration Services
Work Item Tracking
Project Site
Project Management
Visual
Studio
Industry
Partners
TEAM FOUNDATION SERVER
Team Foundation Server
Work Item
Tracking
Project
Management
Reporting
Version
Control
Build
Automation
Affidabilità della piattaforma
server
• Tutti i dati contenuti in Team Foundation
Server si appoggiano ad un DB SQL
Server 2005.
• Questo ci permette di gestire in maniera
molto semplice il backup e la
manutenzione del server.
Report sullo stato dei progetti
ACCEDERE A TEAM
FOUNDATION SERVER
Team Explorer
• E’ lo strumento usato per:
– Creare nuovi “team project”.
– Collegarsi a Team Foundation Server e configurarne i
settaggi, come i gruppi, la security, i process templates, e i
tipi di file sotto source control, sia a livello server, sia a
livello di singolo progetto.
– Aggiungere e modificare work items, documenti, e librerie
di documenti all’interno di un progetto.
– Creare, lanciare e salvare query sui work items.
– Gestire le Team Build.
• Se si dispone di Visual Studio 2005 si installa
all’interno del prodotto, altrimenti installa un “guscio” di
Visual Studio 2005 che conterrà solo il Team Explorer
Excel e Project
• Sono disponibili i “managed plug-in” per
Excel e Project (2003/2007) per:
– Connettersi a Team Foundation Server.
– Creare o modificare delle liste di Work Items, anche in modalità
disconnessa.
– Gestire le proprietà di ogni singolo work item.
– Sincronizzare le modifiche locali con quelle sul server.
Tracciatura completa delle attività
• La tracciabilità delle attività attraverso i
WorkItem è completa, dalla definizione dei
requisiti fino al codice, ai test e alle build
automatizzate.
Ambienti e piattaforme
supportate da TFS
Visual Studio 2005 Team System,
Professional e Standard
Visual Studio.NET 2003, VS 6.0, Delphi,
Sql Server Management Studio, TOAD
for SQL Server, Power Builder, ecc...
• Il Team Explorer di TFS si integra nell’ambiente di VS2005
• Bisogna installarlo dal CD di TFS
• Provider MSSCCI standard che si appoggia al Team Explorer
• Richiede il Team Explorer installato
Visual Studio.NET 2003
• Si può anche usare un prodotto di terze parti che emula completamente il
Team Explorer (TeamPlain for VS2003) http://www.devbiz.com/teamplain/
Qualsiasi ambiente di sviluppo su
Windows
• Se non supporta il provider MSSCCI si può usare il Team Explorer standalone da GUI o da riga di comando
Qualsiasi ambiente su qualsiasi
piattaforma
Direttamente attraverso il browser Web
• Si usa prodotto di terze parti (TeamPrise) utilizzabile da GUI o riga di
comando su tutte le piattaforme – www.teamprise.com
• Si usa prodotto di terze parti chiamato TeamPlain Web Access da
installare sul Team Foundation Server - http://www.devbiz.com/teamplain/
Altri plug-in
• Plug-in per Outlook:
– TeamLook
– Altri due plug-in disponibili gratuitamente
• Plug-in per Word per gestire i WorkItem
legati ai documenti:
– TeamWord
– TeamSpec
Domande?
Scarica

software factories in pratica