lunedì 11 novembre 2013

Maximise test coverage by writing effective Test Cases

Once your Test Plan has been structured and completed with all the relevant and consolidated information, based on the requirements gathering and specification process, the real creative work can begin, i.e. thinking about and designing the Test Cases that will be executed on the software system under examination
.
Although this phase might seem very boring, especially when it is not undertaken with the right spirit, it represents one of the most important of the test process, as only through a proper Test Case design is it  possible to achieve maximum test coverage.

There are of course several approaches and techniques, but before describing those that have provided me with a high return on investment, I would like to explore briefly the most used by the testing community. Obviously we need to distinguish between the different scenarios like a new project, a redesign of an existing one and last but not least a project under maintenance which can be subject to bug-fixing and/or small enhancements. 

In the case of new projects, life should be straightforward, as in theory there should be enough time to do everything well. However this rarely happens  because when there is too much time available for thinking, people tend to spend it on planning and discussing what might be the right approach, which test types and levels have to be forecasted. They then realise  too late that what was planned cannot be put in practise due to a shortage of time. 

However, if the available time is used properly,  a proactive approach is usually the best one because it is possible to concentrate on the test design effort before any code has been written. Then refining the test cases as soon as the first version of the software is ready for testing (even though I strongly recommended getting access to review the implementation during development) and at the same time giving the developers the chance to verify that they have taken into account all the conditions stated for each test case together with the expected output, will result in a higher quality release that will be put through formal testing at the end of the development phase. 

Obviously this approach is not only proactive but also iterative, as it is developed over the project life cycle rather than either upstream or downstream of the coding phase; but of course the availability and cooperation of the development team is vital.

In such a case the Test Design techniques I would suggest, also to prepare test driven scenarios, are the Equivalent Class Partitioning together with Boundary Value Analysis and a further refinement using Decision Tables. In this way the Test Cases will ensure most conditions are covered, but this is still not enough, as the objective is to cover all the business processes and the possible scenarios as well. To do that a good approach would be to use Mind Maps, which allows us to draw what test/business analysts have in their heads, and since it is usually based both on the experience in the testing field (which is very important) and on the business domain (having correctly understood all the functionalities and their interactions) it gives us a clear picture of the system behaviour.

An additional benefit is provided through the ease of translating such a representation into the Test Management platform, as the structure of the Test Scenarios is already prepared – The Mind Map –.

The contrary approach, i.e. a reactive one,  would normally be adopted for projects under maintenance. This is because on the one hand it is not possible to determine when and where software failures will occur, on the other hand for small enhancements (which does not merit a new project) there is not usually enough time available to follow a proper test process. In this case the existing test cases are typically updated to take the changes into account.
A more complex sub-scenario must be faced when no Test Cases are available for the existing functionalities (which is very common for projects developed when the organisation was not yet well organised from the testing perspective), one which requires a very fast design process in order to react quickly to changes.

In such cases the best approach is to start creating the specific test cases to test the functionality/feature subject to changes and incrementally add cases every time new defects/small enhancements occur. But of course this requires more resources as the resources that have already been allocated will be busy with test execution.
To summarise, for existing projects the test design is mostly based on the experience of the test personnel involved and will usually require additional testing resources.

For redesign projects the situation is slightly different, because even though the existing Test Cases, if any, can be properly updated as the project plan should take into account the whole Test Process, forecasting the right time for Test Case Design and validation, can become more complex if the system behaviour is likely to differ heavily from the existing one. In this case the approach mentioned above for band new projects can provide some help.
If this is not the case the advantage is represented by the possibility of doing Exploratory Testing as the actual implementation is available both for investigation and to get familiar with the processes; moreover the key users feedback and suggestions can be exploited to better design effective Test Cases.

I have briefly explored the most common approaches, now I would like to describe the approach I typically apply and that for recent projects has allowed me to maximize the return on investment, a topic that is very important for organisations.

I have not reinvented the wheel, as it is a combination of the approaches mentioned previously.
Basically I always follow an iterative approach, no matter whether or not I am working for a brand-new project or for an existing one. My Test Strategy and the consequent Test Design approach, is essentially the same with slight adjustments in order to fit with the organisation standards, methodologies and techniques.

My first requirement is to have access to the entire set of project documentation, both business and technical.  Then, as soon as I can get all the answers/explanations I need, I organise some sessions with key users and specifically:
  • For a new project I meet directly with them in order to understand their vision (especially from the usability perspective) and how they would like to interact with the new application, which functionalities represent the core and which are desired but very important to maximise their effectiveness in performing operational duties
  • For an existing project redesign/under maintenance it is even better as I am typically in a position to observe how they work (basically doing exploratory testing together) and to understand if the application is forcing users in to unnatural usage patterns and/or if there is space for improvement. I usually spend a lot time with them to be able to quickly report back to the project manager and verify if the feedback/learnings can be considered

Spending time with the key users/subject matter experts/final users will bring you many benefits that are hard to imagine. Moreover they really appreciate this kind of involvement/contribution and this makes them more willing  and open to changes, a subject to which there is always a strong resistance.

Where a project has a prototype or set of navigable wireframes that is available before the implementation commences  (i.e. during the functional analysis phase) it is a good practice to organise some Usability Testing sessions, as doing so makes it possible to anticipate problems which if missed could result in expensive rework if the key users are only able to look at the application immediately after development has been completed (this is true even if an Agile approach is being used, as also in case of intermediate validations – UATs – carried out at the end of each sprint, if the key users do not have the possibility to see a prototype before development it could result in changes being needed in order to provide the desired behaviour).

When the working session and the Usability Testing are performed together with the key users, it allows the Test Cases to be better organises and designed. This is because by focussing on the functionality and interaction and how the final users will use them, allows us to prepare business oriented Test Cases and to think of all the possible related cases in advance.
Once the skeleton of the Test Cases has been prepared, it is now time to apply the techniques mentioned above, i.e. Equivalent Class Partitioning with Boundary Value Analysis and Decision Tables (there are many other techniques but these three are the techniques I prefer and those that can be automatically implemented once experience has been acquired).
At this stage things are almost complete but our Test Cases need further refinement; how can we do that? Easy, we need to push developers to show the units, modules and user stories that have been implemented. This is an activity that needs to be carried out over the entire length of the project, by doing this we do not need to wait until the end of the development/sprint to see the actual implementation with our own eyes and we refine the Test Cases incrementally during the project life cycle. An additional benefit of this approach is having the possibility to anticipate the Test Execution as well, removing the main issues that could result in a costly rework if undertaken downstream of the development phase.   

Last but not least, by following such approach it is possible, both in case of manual and automated testing, to estimate the Test Execution time and to add it as a reference for each Test Case. This provides valuable information for the Project and Test Managers, who can easily adjust their plans based on the Test Execution estimation.

To summarise, the approach I suggest requires a high level of proactivity and interaction/collaboration  with the key users but this will definitely help you in achieving the desired result, i.e. the highest quality for your projects. 


Massimo Forno - IxmaSoft CEO

Software Testing: adapt and grow with the Cloud

Cloud Computing has certainly brought a lot of new possibilities in terms of business and clearly, as the arrival of a new technology or methodology often requires, Software Testing needs to adapt and grow in this direction.

Several new testing services are already available and others will follow shortly. This helps us to understand who has benefited the most from this type of computing, i.e. the software testing companies which aside from the value proposition offered by these new services, they can now reduce the Cost of Testing by taking advantage of multi-tenant and off-premise architecture. This helps them to avoid the purchase of expensive hardware and software and at the same time allows them to scale faster and less expensively.

Moreover configuration of the test environments has become easier and almost instant, allowing for faster test execution which has the potential to increase the number of test sessions that can be run in the same time period.

As mentioned earlier companies, whose core business is the provision of testing services, can exploit this new architecture in ways that result in clear benefits for software vendors; in fact their goals often coincide since their main concerns are typically related to costs and budget. 

On one side, software houses tend to invest more in business analysis and development activities, asking test teams to be both effective and efficient with limited resources. On the other side, testing providers want to maximize their revenues by trying to reduce costs; this is especially true in those countries where less effort is invested in testing due to psychological and economical barriers resulting in compulsory cost savings policies.

This article examines how Cloud-based testing is positively affecting several types of testing.

Functional Testing is probably the least affected type of testing, except in the case of test outsourcing when testing companies are asked to take charge of non-web based applications, which require direct access. 
This situation is a little more complicated because, even if the issue of direct access can be resolved by using Remote Desktop Services to access the software house test environment, or by allowing the testing company to directly deploy the application in their internal test environment, software vendors are not always willing to grant access to their network to third parties and/or share the application code.
In this case the Cloud can help a lot by providing quicker and safer access to the application subject to test.

Non-Functional Testing is more complicated and certainly the most affected, firstly because of the different test types (Performance, Security, Compatibility, Usability…) and secondly because it usually requires huge investment in hardware and software licences.
Performance Testing (including Load and Stress Testing) probably gets the biggest benefit from Cloud computing, considering both the economic aspects and the needs of scalability in order to gradually increase the simulated load.

Using the Cloud means paying only for what is needed and only for the required time. This means that it is no longer necessary to purchase expensive annual licenses for two or three months of testing per year. Server provisioning in the Cloud is almost immediate and decommissioning means that there are no problems associated with reallocation. Furthermore the test environment can be shared with the development teams, which inevitably helps to improve the communication between testers and developers.

With this configuration, testing companies can maximize their revenue because their Cost of Testing decreases proportionally considering that they are no longer obliged to buy expensive hardware and software, ensure business continuity or manage frozen hardware and software requirements.

On the other hand, software vendors now have a bigger range of options as many testing providers have already moved their services to the Cloud often offering Test Agents and Controllers ready to run homemade scripts. This still means that software houses can decide which logic and functionalities to test without having to worry about infrastructure costs and configuration; this allows them to use on-demand testing tools that would otherwise be very expensive.

Security Testing executed in the Cloud provides significant benefits, firstly because many aspects of this type of testing are computing and storage intensive and secondly because Cloud computing can be considered as the natural environment where both periodic and occasional activities can be executed. This allows accurate and actionable results to be obtained whilst paying just for what is needed for the required time.

Moreover as this is managed by IT specialists, Cloud usage is usually safer and more efficient when compared to traditional internally managed test environments.
Compatibility Testing is another type of testing that demonstrates how this architecture can reduce costs by avoiding the need to buy licences for multiple operating systems (and different versions of those operating systems).
Cloud based testing can also help to speed-up the creation of multiple operating system and browser combinations, even when they are managed using virtualization techniques.

Conclusion

From the software solution provider’s perspective, independent of whether or not a company has its own Software Quality Control Unit (and / or test teams), there are clear economic and performance advantages to using Cloud-based testing.

Testing provider companies are taking increasing advantage of Cloud usage, especially for those services that require a big infrastructure in order to perform test activities, particularly for non-functional testing.

To summarize the major benefits:
  • Cost savings both for software vendors and testing providers
  • Easier and faster test environment setup
  • Easier, faster and cheaper resizing of the test environment
  • Faster test execution which allows more test sessions to be executed
  • Increased quality of the results due to the IT specialists managing the Cloud



Massimo Forno - IxmaSoft CEO - Articolo pubblicato nel n°20 di Testing Experience - The Magazine for Professional Testers, Dicembre 2012

martedì 4 settembre 2012

Mobile App Testing

Per le applicaizoni mobile l'approccio al testing, indipendentemente dal modello seguito per lo sviluppo, è decisamente cambiato per far fronte ai principali "problemi" legati alla natura di questo tipo di applicazioni, ed in particolare:

  • L'usabilità, o meglio la differente Esperienza Utente rispetto alle applicazioni tradizionali, fattore che spesso determina il successo o il fallimento di un'app
  • La compatibilità relativamente alle molteplici combinazioni HW/SW su cui l'app deve essere eseguita
  • I problemi legati alla connettività e all'interazione con altre funzionalità dei dispositivi mobile, quali chiamate o messaggi

Il Test Funzionale deve essere integrato da famiglie e casi di test che includano la verifica di aspetti quali l'interazione tramite touchscreen, la possibilità di eseguire le applicazioni in modalità portrait e landscape, la capacità di imprimere movimento.

Il possibile numero di combinazioni HW/SW, problema particolarmente sentito per i telefoni Android, rende difficile, se non impossibile la verifica delle applicazioni su tutti i dispositivi disponibili sul mercato, senza considerare le diverse combinazioni dettate dalla versione del sistema operativo e dalle diverse dimensioni (risoluzioni) degli schermi.

Dal punto di vista del Test Non Funzionale va innanzitutto considerato il vasto target di utenza, con gusti e tipologie d'interazione differenti, il consumo della batteria del dispositivo, le interazioni con chiamate e/o messaggi in ingresso, il consumo di memoria, ed in caso di applicazioni che scrivono in locale sul file system l'occupazione della memoria.

Ultimo ma non meno importante, il fattore legato all'operatore telefonico (test da effettuare dopo la verifica con la rete wireless), poichè in base al segnale e la relativa qualità del servizio, l'applicazione può performare in modo differente, ed in caso di assenza di connettività non deve bruscamente interrmpere la propria esecuzione.

Questi sono solo alcuni degli aspetti funzionali e non funzionali che hanno portato al cambiamento di approccio al testing per le applicazioni mobile, aspetti che devono assolutamente essere tenuti in considerazione dai Software Test Engineer e Manager nella pianificazione e progettazione delle attività di test.



lunedì 3 settembre 2012

Quanto costa la Qualità?


Di primo acchito si potrebbe pensare che la Qualità rappresenti un costo, e la domanda sorge spontanea: quanto costa la Qualità?

Rispondere nulla potrebbe apparire insensato, quindi vediamo quali sono i principali costi della Qualità e cerchiamo di quantificarli, in modo da dare fondamento a questa affermazione.

Possiamo raggruppare i costi in due categorie principali:
  1. Costi di Prevenzione (CP), quali formazione legata all’ Assicurazione Qualità, revisione del codice, pianificazione delle attività di Controllo Qualità, progettazione e realizzazione dei Casi di Test, esecuzione dei Casi di Test, produzione della reportisitica,etc...
  2. Costi dovuti ai fallimenti/insuccessi (CF), e qui possiamo ulteriormente distinguere tra:
    • Costi legati ai fallimenti interni (CFi), che vengono introdotti direttamente durante lo sviluppo, quando il programmatore, provando il codice appena prodotto, rileva dei difetti, che deve quindi correggere e successivamente ri-verificarne l’assenza. L’applicazione del testing formale introduce anch’essa un CFi, perchè il tester, eseguento i Casi di Test, rileverà e riporterà al programmatore dei difetti, che dovranno essere risolti e ri-testati una volta che il  fixing viene rilasciato nell’ambiente di test.
    • Costi legati ai fallimenti esterni (CFe), che vengono introdotti quando al posto di un tester e/o uno sviluppatore, è il Cliente o l’Utente finale a rilevare i difetti. Questi costi sono decisamente più alti rispetto ai precedenti, perchè in aggiunta a quello legato all’attività di testing spiegato poc’anzi, vanno considerati il supporto al Cliente, un flusso di comunicazione più lungo per raggiungere il programmatore responsabile del fixing, l’attività di rilascio di una hot-fix sulla versione ufficiale e non solo nell’ambiente di test. Ci sono inoltre costi non tangibili, come l’insoddisfazione del Cliente, l’eventuale perdita di business, il danno all’immagine Aziendale e nella peggiore delle ipotesi cause legali o penali da corrispondere.
Un ipotetico caso di studio

Vediamo ora un esempio per illustrare quale sia il ROI nell’applicare il testing. I valori economici, sebbene indicativi, rappresentano in percentuale un caso reale.

Supponiamo di dover realizzare per un nostro Cliente, un’applicazione web il cui sviluppo è stimato in 200 Giorni/Uomo, che però debba venir rilasciata al Cliente in 4 mesi di calendario.

Supponendo di avere 3 sviluppatori assegnati, e che ognuno di essi introduca in media due bugs per ogni giorno di sviluppo, si raggiunge un totale di 1200 bugs.

Se il costo legato alla risoluzione dei bugs rilevati dai programmatori viene definito pari a 40 Euro ciascuno e quello relativo ai bugs rilevati dal Cliente pari a 400 Euro, supponendo che i programmatori ne rilevino il 25% e che il resto sia rilevato poi dal Cliente, arriviamo ad un totale di costo della Qualità pari a 372.000 Euro come illustrato in figura:


Introducendo formalmente il testing nel progetto, e supponendo che il costo legato alla risoluzione dei bugs rilevati dai tester sia pari a 200 Euro,  e che ne vengano rilevati il 35% durante la fase di testing, arriviamo ad un totale di costo della Qualità pari a 288.000 Euro come illustrato in figura:


In questo modo, si è all’incirca dimezzato il numero di bugs rilasciati al Cliente, e si è ridotto il costo totale della Qualità di 84.000 Euro.

Per calcolare il ROI, dobbiamo tenere in considerazione l’investimento fatto per il testing, e per semplificare parliamo di testing manuale eseguito da un solo tester. Ci sono due possibilità:
  1. Team interno: la risorsa è in forza all’Azienda in modo permanente, con un costo annuo pari a 70.000 Euro.
  2. Outsourcing: ci rivolgiamo ad un Azienda che eroga servizi di Software Quality Control, e richiediamo la risorsa per il tempo necessario (messo a budget).
Nel primo caso il ROI risulta limitato, anche se dobbiamo considerare che la risorsa, quando non impiegata sul progetto portato come esempio, possa lavorare anche su altri progetti, ma ovviamente il periodo pianificato per il testing non deve sovrapporsi, altrimenti dobbiamo prendere più risorse introducendo un overhead notevole azzerando, se non rendendo addirittura negativo il ROI. Nell’esempio in questione, il ROI risulta pari al 20% :

  • Costo del test = 70.000 Euro
  • Riduzione lorda del costo totale della Qualità = 84000
  • Riduzione reale = 14.000
Nel secondo caso siamo più tutelati, perchè abbiamo la garanzia di avere a disposizione la risorsa esattamente quando ci serve, senza dover sostenere dei costi quando la stessa risulta inattiva. In questo caso il ROI risulta pari al 230% :

  • Costo del test = 25.600 Euro (40 x Rate giornaliero del tester) dove 40 sono i giorni/uomo di test stimati come 20% sullo sviluppo.
  • Riduzione lorda del costo totale della Qualità = 84000
  • Riduzione reale = 58.400
Abbiamo quindi illustrato come l’introduzione del testing non solo porti ad un contenimento dei costi, ma che se esternalizzato porta sicuri vantaggi in termini di massimizzazione del valore aggiunto dato al prodotto software sviluppato.

Affidandoci ad aziende che offrono servizi di testing in modo esclusivo, abbiamo sempre la garanzia di avere a disposizione risorse molto preparate e concentrate su questo tipo di attività. Inoltre, siccome nel mondo reale è normale, se non addirittura consuetudine, avere degli slittamenti della timeline, causa fattori interni (sviluppo non proprio efficiente, problematiche tecniche, ...) ed esterni (requisiti non chiarissimi, che arrivano in ritardo, richieste di cambiamento dell’ultimo minuto,...), anche facendo la miglior pianificazione, spesso e volentieri i piani saltano, e a rimetterci è quasi sempre la qualità, talvolta rischiando di “danneggiare” un progetto piuttosto che un altro causa insufficienza di risorse di test.

Non è nemmeno pensabile mantenere un team di test più grande del dovuto, perchè altrimenti i costi si impennano velocemente riducendo drasticamente i ricavi.

Software Testing Coaching


Anche quando gli obiettivi, aziendali o di progetto, risultano chiari, talvolta l'efficacia e le performance del team non sono ottimali.

La Strategia, i processi e le metodologie implementate spesso non risultano sufficienti per il raggiungimento dei migliori risultati.


Una trasformazione rivolta a migliorare ed amplificare le proprie potenzialità per raggiungere obiettivi personali, di team e manageriali è sicuramente il processo che mette a disposizione gli strumenti che permettono di elaborare ed identificare i propri obiettivi e nel contempo rafforzare la propria efficacia e la propria prestazione.


IxmaSoft aiuta i propri Clienti in questo processo di trasformazione, fornendo tutti gli strumenti necessari per scoprire ed utilizzare le potenzialità latenti dei membri del Team di Software Testing, agendo come facilitatore del cambiamento, stimolando ed indirizzando le energie ed aiutando a prendere consapevolezza delle proprie potenzialità.


Per maggiori informazioni: http://www.ixmasoft.it/coaching.html

sabato 21 maggio 2011

Software Testing Outsourcing

Sostenere una struttura interna di test ha dei costi non indifferenti, poichè se questa non viene costantemente impiegata, rischia di risultare in un costo puro per l'azienda.

Anche espandere la struttura stessa, qualora già presente, comporta dei costi aggiuntivi in termini di gestione e controllo, e relativamente alla logistica e all'equipaggiamento delle persone che ne fanno parte.

IxmaSoft aiuta a contenere i costi prendendosi in carico l'intero processo di test, dalla pianificazione alla gestione, esecuzione e controllo delle attività.
I servizi offerti in outsourcing, abbracciano il testing a 360°, in particolare per quanto riguarda il disegno e l'esecuzione di:
Fornendo tutta la documentazione necessaria: Test Plan, Test Suites, Test Cases e Test Reports.est Reports.

Per maggiori informazioni: http://www.ixmasoft.it/services.html

Effective Testing Program

Aumentare la qualità non può e non deve limitarsi esclusivamente all'utilizzo di tecniche e/o strumenti di verifca.

In molti casi il processo o addirittura la strategia di test seguita non è la più confacente al progetto, vuoi perchè il modello di sviluppo è stato consolidato negli anni, per cui c'è una forte resistenza al cambiamento, o più semplicemente perchè non non c'è una struttura dedicata per l'analisi e l'eventuale ridefinizione di processi e strategie.

IxmaSoft mette a diposizione dei propri Clienti tutta l'esperienza accumulata negli anni durante la collaborazione con grandi realtà internazionali, in particolare nella gestione, implementazione, automazione ed esecuzione di Test, al fine di analizzare ed eventualmente ridefinire il processo e/o la strategia di Test.

Per mezzo del programma di consulenza Effective TestingIxmaSoft si pone come obiettivo quello di aiutare i propri Clienti nel raggiungimento del massimo livello di Qualità Software, al fine di garantire il giusto valore aggiunto per le loro soluzioni.

Il programma è articolato in 5 passi:

  • Definizione della Strategia di Test
  • Definizione dei Livelli di Test
  • Definizione degli Strumenti di Test
  • Definizione del Team di Test
  • Definizione del Piano di Test
Per maggiori informazioni: http://www.ixmasoft.it/services.html