• Come un abito cucito su misura, i nostri progetti software uniscono le potenzialità di tecnologie innovative alle specifiche esigenze del cliente.

    Showcase progetti
  • Analizziamo e razionalizziamo con il cliente i processi e le attività della propria azienda, per poi seguirlo nella scelta delle giuste strategie IT da adottare.

    Le nostre competenze
  • Crediamo nelle potenzialità di un percorso formativo che unisca forti basi teoriche e metodologiche ad una continua applicazione pratica di quanto si apprende.

    Dettaglio dei corsi
  • Progettiamo e sviluppiamo sistemi e progetti basati su dispositivi mobile consumer (iPhone, Windows Phone 7 Series), industriali (Windows CE) e custom (basati su microcontrollori 8/16/32 bit).

    Approfondimenti
 

CASE STUDY : “Controllo Accesso Impianti” con .NET Micro Framework

March 4, 2011 13:42 by l.maiorfi

Innovactive è una società specializzata nello sviluppo di progetti compositi software/firmware/hardware, ossia in cui sia prevista l’interazione tra servizi software e dispositivi embedded in grado di interagire con il mondo fisico.

 

Realtà Business

L’attività principale del Cliente consiste nella gestione di un insieme di impianti adibiti all’estrazione di diversi tipi di materiali finalizzati all’utilizzo nell’ambito dei processi di costruzione di edifici e strade. Poiché ciascuna cava è tipicamente presidiata da pochi addetti (spesso solo da uno) per di più coinvolti nelle operazioni di carico alla guida di macchine da movimento terra, l’accesso alle cave da parte dei mezzi avviene tramite un ingresso che deve essere il più possibile automatizzato pur garantendo al contempo una completa tracciabilità dei movimenti di ingresso/uscita, sulla base dei quali vengono prodotti diversi documenti contabili, cartacei e telematici, quali il D.D.T. relativo al materiale prelevato.

 

Situazione Tecnica

Ciascun mezzo viene identificato da un badge, consegnato all’autista all’inizio del turno di lavoro, che identifica univocamente il cliente finale che acquista e preleva il materiale. L’infrastruttura presente nella cava è limitata ad un “gabbiotto” in cui è presente un PC collegato alla rete aziendale del cliente e ad un sistema di sbarre, posizionate all’ingresso e all’uscita della cava stessa, raggiunte solamente da un cablaggio per l’alimentazione a 220V.

 

La soluzione

E’ stato realizzato un sistema di controllo accessi costituito da tre differenti dispositivi embedded:

 

BOX Ingresso

Collocato all’ingresso della cava, contiene al proprio interno una scheda a microcontrollore che pilota un lettore RFID per la acquisizione delle identificazioni da parte degli autisti dei mezzi e coordina l’azione di due sbarre e di quattro fotocellule per realizzare la procedura di l’ingabbiamento che assicura l’ingresso di un unico mezzo alla volta, indispensabile al fine della corretta generazione dei movimenti contabili. Il BOX comunica con il PC che genera i movimenti contabili mediante un collegamento wireless basato su protocollo ZigBee/Mesh. Il sistema di comunicazione prevede un protocollo di handshaking applicativo ed un caching locale dei badge ed una ritrasmissione periodica utile nel caso in cui il servizio in ascolto sul PC non sia attivo o raggiungibile al momento dell’ingresso di un mezzo.

 

BOX Uscita

Identico in tutto e per tutto al dispositivo collocato all’ingresso, è configurato in maniera differente solamente per quanto riguarda la gestione del varco, costituito da una sola sbarra e da due fotocellule.

 

BOX PC

Questo dispositivo è costituito da un modulo radio in grado di ricevere la comunicazioni wireless da parte dei BOX collocati all’ingresso e all’uscita della cava. Prevede il collegamento ad un PC tramite porta USB. A bordo del PC è in esecuzione un servizio che raccoglie, processa e memorizza i messaggi relativi alle procedure di ingresso e di uscita. Oltre ai dati relativi al flusso dei mezzi, il dispositivo raccoglie anche i dati di telemetria quali temperatura, umidità e livello del segnale relativi ai BOX di ingresso e di uscita, utili per tenere sotto controllo i parametri che possono influenzare la continuità di servizio del sistema. Grazie alle funzionalità Mesh del protocollo ZigBee, è possibile realizzare una comunicazione tra PC e dispositivi remoti anche se questi non sono direttamente raggiungibili per problemi di portata del segnale radio, in quanto ogni nodo della rete wireless può fare da ripetitore nei confronti degli altri. Questo consente inoltre di introdurre dei nodi che hanno solamente funzionalità di “routing”, in grado di conferire alla rete capacità di reinstradare il traffico nel caso di interruzione temporanea o permanente nel funzionamento di alcuni nodi.

 

Benefici

Con la soluzione illustrata, il cliente ha messo in opera un sistema completo ed autonomo di controllo accessi ai numerosi impianti gestiti, ad un costo molto inferiore rispetto al sistema precedentemente adottato.

 

Prodotti utilizzati

Per i tre dispositivi BOX è stata utilizzata una scheda a microcontrollore FEZ-Panda prodotta da GHI Electronics, il cui firmware è stato sviluppato utilizzando Microsoft .NET Micro Framework 4.1 e relativo SDK per Visual Studio 2010.

Per la comunicazione wireless sono stati utilizzati moduli XBee PRO prodotti da DIGI/Maxstream, con firmware ZigBee/API.

Per la lettura dei tag RFID sono stati utilizzati dei moduli TRW-300.

Per l’acquisizione dei dati relativi al flusso dei mezzi è stato sviluppato un servizio che utilizza il .NET Framework 4 e Microsoft SQL Server.

 

 


Currently rated 5.0 by 3 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Sviluppo di applicazioni LOB con Silverlight, MVVM e RIA Services

December 16, 2010 12:57 by l.maiorfi

Pubblichiamo oggi il materiale relativo alla sessione Innovactive tenuta al recente evento Microsoft CommunityDays 2010 di Perugia, alla quale hanno partecipato prevalentemente membri della comunità locale DotNetUmbria.

Il materiale in questione consiste di:

Presentazione PowerPoint (in formato pptx) e Mockup Balsamiq delle viste relative all’applicazione demo illustrata nel corso della sessione

Database di supporto all’applicazione demo, essenzialmente costituito dalla fusione di Northwind e degli oggetti relativi agli Authentication e Role Provider di ASP.NET

Applicazione Demo – Step #1 : Allestimento della struttura MVVM (con il package NuGet di MVVM-Light)

Applicazione Demo – Step #2 : Introduzione dei RIA Services per l’accesso ai dati

Applicazione Demo – Step #3 : Utilizzo dei servizi per la sicurezza legati ai Membership Provider di ASP.NET

Applicazione Demo – Step #4 : Implementazione di Test automatici a 3 livelli (servizi, viewmodel e UI)

 

Note:

  1. L’unico utente presente è “lorenzo” con password “lorenzo-1
  2. I “Coded UI Test” dello Step #4 sono utilizzabili solo se si è installato il Feature Pack 2 per Visual Studio 2010

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Test di applicazioni Silverlight con Visual Studio Feature Pack 2

November 19, 2010 18:01 by l.maiorfi

Rilasciato qualche giorno fa, il feature pack 2 per Visual Studio 2010 contiene al suo interno diverse novità interessanti, sommariamente divise in due aree: design e testing.

Tralasciando per ora l’area design, della quale torneremo a parlare dopo un po’ di sperimentazione “sul campo”, ci concentreremo in questo post sulle nuove funzionalità relative al test di applicazioni web, in particolare per quanto concerne lo sviluppo di procedure di “Coded UI Tests” per applicazioni Silverlight. Mentre infatti per applicazioni web “pure” esistono tool quali WatiN o Selenium, in cui l’analisi delle interazioni con il browser e la valutazione delle asserzioni avviene a livello di DOM, nel caso di applicazioni Silverlight la piattaforma di test “ufficiale” non prevede niente di analogo, limitandosi ad un insieme di strumenti utili al più per lo Unit Testing dei ViewModels, strumenti in cui ci si è concentrati a nostro avviso più sulla possibilità di effettuare test asincroni (e non di funzioni asicrone) che sulle reali necessità di chi sviluppa applicazioni LOB con Silverlight.

La principale novità introdotta riguarda la possibilità di creare progetti di Test, integrati nella piattaforma di testing di Visual Studio 2010, di tipo “Coded UI Tests”, ossia in cui tramite un modello ad oggetti accessibile da codice si sviluppano metodi di test che interagiscono, per tramite del browser, con gli elementi visuali di un’interfaccia utente Silverlight. Inoltre, alla flessibilità del modello ad oggetti in questione è stato affiancato un tool di “cattura” delle interazioni con la UI che permette anche di generare asserzioni in maniera completamente visuale.

Vediamo ora un esempio, a titolo di “walkthrough”, in cui creeremo una procedura di test volta a verificare che un’applicazione Silverlight (assolutamente dimostrativa, ancorché basata sul pattern MVVM) funzioni a dovere.

L’applicazione “under test” si presenta come illustrato nell’immagine seguente. Lo scopo di tale applicazione è quello di calcolare la data della Pasqua nell’anno indicato dalla apposita TextBox.

image

Senza soffermarci troppo sull’implementazione (trovate comunque i sorgenti qui), vediamo come creare un progetto di test di tipo “Coded UI Test”.

Come prima cosa, va aggiunto ai riferimenti del progetto Silverlight l’assembly “Microsoft.VisualStudio.TestTools.UITest.Extension.SilverlightUIAutomationHelper”. Sul sito MSDN viene sottolineato che tale assembly NON E’ liberamente ridistribuibile e che va pertanto rimosso dai riferimenti prima dell’effettivo rilascio in produzione. Viene inoltre illustrato come renderne l’inclusione condizionata ad un parametro “Production” da valorizzare opportunamente al momento della compilazione del progetto con MSBuild, feature utile prevalentemente a chi fa Continuos Integration.

Occorre quindi specificare un identificativo per ciascun controllo di ciascuna vista che si intende utilizzare nei Test. Le proprietà utilizzabili sono diverse, ma in ottica MVVM direi che il candidato migliore è “AutomationId”, come mostrato nel frammento di XAML che segue, relativo alla nostra unica View:

   1: <TextBox AutomationProperties.AutomationId="TxtYear" Margin="5" Padding="5" Text="{Binding Year,Mode=TwoWay}" />
   2:  
   3: <sdk:DatePicker AutomationProperties.AutomationId="DtpEaster" SelectedDateFormat="Long" SelectedDate="{Binding DtEaster}" Margin="5"/>
   4:  
   5: <Button AutomationProperties.AutomationId="BtnCalcola" Content="Calcola Pasqua" Command="{Binding CommandComputeEaster}" Margin="5" Padding="5" />

A questo punto è possibile aggiungere alla Solution un progetto di tipo Test. Eliminato, se si vuole, il file UnitTest1.cs compreso nella confezione, è arrivato il momento di aggiungere l’agognato Item di tipo “Coded UI Test”. Al momento della inclusione apparirà una richiesta di questo tipo (successivamente potranno essere utilizzate allo stesso scopo le corrispondenti voci di menu contestuale direttamente all’interno del sorgente di un metodo di Test):

image 

La prima scelta avvierà un tool di cattura che ci consentirà di registrare tutte le azioni che effettueremo attraverso il browser sull’interfaccia utente della nostra applicazione. Il tool in questione si presenta come illustrato sotto. Sono presenti un pulsante per avviare la registrazione, un pulsante che mostra un log sintetico degli step catturati, un “mirino” per la selezione dei controlli relativi alla generazione delle asserzioni “visuali” ed un pulsante per la generazione dei sorgenti relativi al playback delle azioni catturate e delle asserzioni definite.

image

Premuto il pulsante di registrazione ed avviato il browser, questo si presenterà con la barra del titolo leggermente modificata, ad indicare la cattura in corso:

image 

Dopo aver eseguito la sequenza di Test desiderata, ad esempio nella nostra applicazioni dimostrativa specificando l’anno 2011 e cliccando sul pulsante “Calcola Pasqua”, e dopo aver generato i sorgenti relativi alle operazioni catturate, è possibile (e opportuno) generare una asserzione che controlli che il valore calcolato sia effettivamente quello atteso, mediante la funzione del tool illustrata nelle due immagini che seguono.

image 

image

 

Se tutto è andato come deve, dopo aver di nuovo dato il via alla generazione del codice del test, vedremo il seguente frammento all’interno del metodo di test editato.

   1: [TestMethod]
   2: public void CodedUITestMethod1()
   3: {
   4:     this.UIMap.CalcoloPasqua2011();
   5:     this.UIMap.AssertDataGiustaDom24Apr2011();
   6: }

In cui vengono invocati due metodi generati dal tool di cattura il cui sorgente è riportato di seguito.

   1: /// <summary>
   2: /// CalcoloPasqua2011 - Use 'CalcoloPasqua2011Params' to pass parameters into this method.
   3: /// </summary>
   4: public void CalcoloPasqua2011()
   5: {
   6:     #region Variable Declarations
   7:     WinButton uINotificationChevronButton = this.UIItemWindow.UINotificationChevronButton;
   8:     BrowserWindow uIHttplocalhost3821DemWindow = this.UIHttplocalhost3821DemWindow;
   9:     SilverlightEdit uITxtYearEdit = this.UIHttplocalhost3821DemWindow.UIHttplocalhost3821DemDocument.UISilverlightControlHoPane.UIItemCustom.UIMainPageMainPage.UIItemPage.UIPageScrollViewerPane.UITxtYearEdit;
  10:     SilverlightButton uICalcolaPasquaButton = this.UIHttplocalhost3821DemWindow.UIHttplocalhost3821DemDocument.UISilverlightControlHoPane.UIItemCustom.UIMainPageMainPage.UIItemPage.UIPageScrollViewerPane.UICalcolaPasquaButton;
  11:     #endregion
  12:  
  13:     // Go to web page 'about:blank' using new browser instance
  14:     this.UIHttplocalhost3821DemWindow.LaunchUrl(new System.Uri(this.CalcoloPasqua2011Params.UIHttplocalhost3821DemWindowUrl));
  15:  
  16:     // Go to web page 'http://localhost:3821/DemoSLTestingTestPage.aspx'
  17:     uIHttplocalhost3821DemWindow.NavigateToUrl(new System.Uri(this.CalcoloPasqua2011Params.UIHttplocalhost3821DemWindowUrl1));
  18:  
  19:     // Type '2011' in 'TxtYear' text box
  20:     uITxtYearEdit.Text = this.CalcoloPasqua2011Params.UITxtYearEditText;
  21:  
  22:     // Click 'Calcola Pasqua' button
  23:     Mouse.Click(uICalcolaPasquaButton, new Point(48, 10));
  24: }
  25:  
  26: /// <summary>
  27: /// AssertDataGiustaDom24Apr2011 - Use 'AssertDataGiustaDom24Apr2011ExpectedValues' to pass parameters into this method.
  28: /// </summary>
  29: public void AssertDataGiustaDom24Apr2011()
  30: {
  31:     #region Variable Declarations
  32:     SilverlightEdit uITextBoxEdit = this.UIHttplocalhost3821DemWindow.UIHttplocalhost3821DemDocument.UISilverlightControlHoPane.UIItemCustom.UIMainPageMainPage.UIItemPage.UIDtpEasterDatePicker.UITextBoxEdit;
  33:     #endregion
  34:  
  35:     // Verify that 'TextBox' text box's property 'Text' equals 'domenica 24 aprile 2011'
  36:     Assert.AreEqual(this.AssertDataGiustaDom24Apr2011ExpectedValues.UITextBoxEditText, uITextBoxEdit.Text);
  37: }

Da questo momento in poi, è possibile eseguire il Test in questione come qualsiasi altro, ad esempio avviando la verifica dalla ToolWindow “TestView”:

image

L’esecuzione del test aprirà il browser, eseguirà i passi registrati (apparentemente non con gli stessi tempi, pur rispettando la logica degli stati dei controlli con cui c’è interazione) e verificherà le asserzioni, riportando l’esito del test come sempre nella ToolWindos “TestResults” di Visual Studio:

image

Trovate i sorgenti relativi al progetto di esempio qui.


Currently rated 5.0 by 2 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5