Bug Report Logo
NVP Software Testing Newsletter
 
June 2008
Greetings!

Summer is right around the corner! 
 
This summer let's focus on improving our Quality Assurance and Software Testing processes.  We can start by taking some of the tips in this newsletter and applying them in our workplaces.
 
The summer is also a good time to have NVP in for a free 1/2 day assessment.  Reply to this email to find out more.
 
Enjoy the sun!
 
Regards,
 
Your QA Advisors
In this issue...
Tip of the Day
Whitepaper: Performance Testing
Article: Start With A Strong Testing Foundation
1/2 Day Assessment
Tip of the Day
From Seminar: Metrics with Meaning
 
Key Points on Gathering Metrics
  1. Know what you want to gather before the project starts.
  2. Be prepared to justify and explain it to the affected people.
  3. Set up the gathering process to be painless and unobtrusive.
  4. Use the gathered metrics (do not just discard them).
  5. Do not use for performance reviews (otherwise they will be gamed -- they may be anyway).

One Metric Example

Current Defect Count by Severity
 
Purpose: To measure project progress and ensure that the counts are going down.
 
Gathering: Count the number of defects summed by each severity.
 
Pitfalls: Changing severities.  Incorrectly closed defects.
 
Desired Trend: Closed defects climb to meet total.
 
Graphing: Stacked Graph.
 
Whitepaper: Performance Testing
Written by: Saskia Richards, Test Consultant - NVP Software Testing
 
 
INTRODUCTION 
This whitepaper provides a definition of software performance testing and describes the goal of this particular type of testing.
 
Definition
In software testing, performance testing can be defined as testing that is performed to determine how fast some aspect of a system performs under a particular workload. It can also serve to validate and verify other quality attributes of the system, such as scalability, reliability, and resource usage.
 
Performance testing can serve various purposes:
It can demonstrate that the system meets performance criteria.
It can compare two systems to find which performs better.
It can measure what parts of the system or workload cause the system to perform badly.
 
Automated test tools can be used to evaluate what parts of the software contributes most to the poor performance or to establish acceptable levels of response time. It is critical to the cost performance of new software that performance test efforts begin at the start of the development project and extend through to deployment. The later a performance defect is detected, the higher the cost of remediation. The higher costs are true in the case of functional testing, but are even greater with performance testing, due to the end-to-end nature of its scope.
 
In performance testing it is crucial (and often difficult) for the test conditions to be similar to the expected actual use (otherwise the test does not reflect the real-time working condition of the software). In reality, production systems have a random  workload and while the test workloads do their best to mimic what may happen in the production environment, it is impossible to exactly replicate this workload variability, except in the most simple of systems.
 
Goal
The goal of performance testing is not to find bugs, but to eliminate bottlenecks and establish a baseline for future performance and regression testing. To conduct performance testing is to engage in a carefully controlled process of measurement and analysis. Ideally, the software under test is already stable enough so that this process can proceed smoothly.

A clearly defined set of expectations is essential for meaningful performance testing. If you do not know where you want to go in terms of the performance of the system, then it matters little which direction you take. For example, for a Web application, you need to know at least two things:
expected load in terms of concurrent users and acceptable response time. Once you know where you want to be, you can start on your way there by constantly increasing the load on the system while looking for bottlenecks.
 
Bottlenecks can exist at multiple levels:
Application level
Database level
Operating system level
Network level
 
From a testing point of view, performance testing at these levels takes on a white-box approach, whereby the system is inspected and monitored "from the inside out" and from a variety of angles. Measurements are taken and analyzed, and as a result, tuning is done.

However, testers could also take a black-box approach in running the load tests against the system under test. For a Web application, testers will use tools that simulate concurrent users/HTTP connections and measure response times. 
 
CONCLUSION
 
In this white paper we have offered some information on performance testing. Performance testing can sometimes be more art than science, due to the sheer complexity of the systems involved in software applications. Care must be taken to modify one variable at a time and redo the measurements, otherwise multiple changes can have subtle interactions that are hard to quantify and repeat.
 
If you have any questions, please feel free to contact us at nvp@nvp-inc.com - your one-stop partner in Quality Assurance and Software Testing in the GTA and South Western Ontario.

 
Start With a Strong Testing Foundation
To End Up With a Quality Product, Your Team Must Begin With a Good Set of Testing Practices
 
By Kiran Vankatesh 
Software Test and Performance Magazine
Volume 5, Issue 3, March 2008
 
Grapefruit
Quality is a key differentiator for business growth.  Good software testing practices help ensure a quality process, which ultimately leads to quality software.  These good practices include understanding requirements, a well-prepared test strategy and continuous enhancement of the test suite.  It's also important to know when testing is complete - something usually based on specific indicators of product readiness.
 
This article addresses the fundamentals of the testing process, explores the good practices of product testing and offers recommendations for a phased approach to component-, feature- and system-level testing.
 
Testing effectiveness can be improved by testing with all possible combinations and techniques.  However, it's difficult to do this and sometimes impossible to ensure that the product has zero defects.
 
There are various approaches to improving the effectiveness of testing an application.  Can it be installed fro a CD?  What other factors or inputs are going unseen or unchecked?  It's easy to overlook such factors.  But as software testers, we need to be aware of and test them, because they may not always function as expected.
 
Inputs should be selected uniformly among the different input domains.  If the testing effort is limited due to cost or schedule constraints, I suggest that you base your testing on highly used input factors only.  These include product specification, design documents, product reviews, competitive information, schedules, feedback from previous versions, customer surveys, look-and-feel specifications, software architecture, test plans, usability data and software code.  By focusing on these factors, testers can adequately determine operational reliability.
 
Processes used by testers are verified by the software quality auditor, who also ensures that the testing processes are followed correctly.  This involves an internal audit of processes from the preparation of test case documents to the release of the product.  Central to the process is to measure the quality of [the] developed application and to authenticate its correctness, completeness, security, capability, reliability, efficiency, portability, maintainability, compatibility and usability.
 
In terms of technical investigation, the process can be performed on behalf of the stakeholders and may also include reviews, walkthroughs or inspections.
 
The testing team should receive new builds at regular intervals, each new build containing defect fixes identified in the previous release.  For every release, the testing team must follow the same practices to help minimize testing time and increase efficiency.
 
End products of good quality blend user satisfaction, compliant product, good quality and delivery within budget/schedule.  An end product should be reliable, modifiable, understandable, efficient, usable and portable.  Software is developed to fulfill the specific needs of a person or a group; i.e., the customer.  Part of the testing team's job is to understand the customer's business model, wants and needs.  This can be done by using surveys, direct feedback and face-to-face meetings.
 
Once this information is understood, the exact approach for testing can be determined without assumptions.  The only assumption the testing team should ever make, in fact, is that of the customer's perspective, such that it reveals any defects or diversions from the application's intended purpose.
 
DEVELOP TEST CASES EARLY
One good practice is to start developing test cases during requirement analysis.  Once the requirements are available, the testing team can write high-level test cases to demonstrate an understanding of customer requirements and business scenarios.  As the project progresses, test cases should adhere to the test strategy, performance of the tests and enhancement of the test suite, and adherence to quality and value additions.  Test case documents can be provided to the customer for continual review and approval.
 
Once software begins to be sent to the testing team, test cases are executed and the test case documents are updated for features that weren't clearly defined in the requirements document.  The team confirms that the test case documents comply with the requirements.  Documents should be maintained in a CMS tool to ensure that document versions and changes are tracked.
 
DESIGNATE AN AUTOMATION TEAM
Setting aside resources for an automation team saves manual testing time and resources.  The team should be dedicated not just to development of the automated testing, but also to maintaining incremental advancements of the product.  Regression testing also can be assigned to this team.
 
When frequent builds or executable files are to be tested, test automation in an organization plays a vital role in reducing manual testing time.  Specialized automation testers are required to maintain a structured testing setup.  This would require proficient and certified testers for advanced testing methodologies and comprehensive usage of popular testing tools.
 
UNCONVENTIONAL TEST MATRICES
An unconventional test matrix (decision table) is used for testing complex functions and frequently needs regression testing.  The unconventional test matrix provides insight into the important concept of the product testing life cycle.  Monitoring the specifications in the requirements document and verifying that all requirements have been met by the time of release can be cumbersome and laborious.
 
If this aspect of the testing life cycle isn't considered high priority, it can result in confusion and arguments between the QA team and stakeholders.  This problem can be solved by using a traceability matrix.
 
Created before test cases are written, the traceability matrix is a complete listing of all that has to be tested.  Sometimes that means one test case for each requirement, or several requirements that can be validated by only one test scenario.  This depends on the kind of application that is available for testing.  Irregular test matrices or decision tables for testing complex functions can be created whenever it's necessary during the testing activity using matrix elements such as requirement, function specification, design specification, source code files and test cases.
 
A traceability matrix provides a cross-reference between a test case document and the functional/design specification document.  This can show if the test case document contains tests for all the identified unit functions from the design specification.  From this matrix, the percentage of test coverage can be collected, taking into account the percentage of functionalities in the ratio of total-tested to total-untested.
 
"If you don't identify defects, the customer will."  This well-known axiom is likely to pop up whenever a software product isn't appropriately tested.  Releasing a product with defects can occur for many reasons.  But common to all scenarios is speculation about tested and untested parts of the software.  The traceability matrix is an important tool for helping avoid this scenario.
 
DEFINE ROLES AND RESPONSIBILITIES
A vital practice for a high-quality product is to divide the product into modules and assign them to individuals.  Define roles and responsibilities that allow the testers to perform their functions with minimal overlap and without uncertainty as to which team member should perform which duties.  One way to divide testing resources is by specialization in particular application areas and nonfunctional areas.
 
The testing team also may be able to take on more roles than those of testing the product.  And it's usually a good idea to assign maintenance and automation responsibilities of modules to the module leads.
 
MAINTAIN TEST CASE DESIGN DOCUMENTS
Testing is a continuous process involving frequent software builds and multiple product releases and updates.  It's therefore important to create test case documents and keep them up-to-date along with change requests and release notes.
 
The consistent use of good testing practices will help improve the quality of the tested software, help teams overcome the challenges and effectively deal with software defects.  If you're open to learning from others who have come before, you're much less likely to repeat their errors.
Complimentary 1/2 Day AssessmentIced Tea
A second opinion never hurt anyone!  With our free 1/2 day assessment of QA and Software Testing processes, you will gain an objective undrstanding of how well your existing processes are working and what you can do to improve. 
 
Reply to this email to book your assessment today and refresh your QA team over the summer! 
 
 Note: Available to businesses in the Greater Toronto Area and Kitchener/ Waterloo regions.

The Bug's Last Words

A software engineer, a hardware engineer and a department manager were on their way to a meeting in Switzerland. They were driving down a steep mountain road when suddenly the brakes on their car failed. The car careened almost out of control down the road, bouncing off the crash barriers, until it miraculously ground to a halt scraping along the mountainside.
 
The car's occupants, shaken but unhurt, now had a problem: they were stuck halfway down a mountain in a car with no brakes. What were they to do?
 
"I know," said the department manager, "Let's have a meeting, propose a Vision, formulate a Mission Statement, define some Goals and by a process of Continuous Improvement find a solution to the Critical Problems, and we can be on our way."
 
"No, no," said the hardware engineer, "That will take far too long, and besides, that method has never worked before. I've got my Swiss Army knife with me, and in no time at all I can strip down the car's braking system, isolate the fault, fix it and we can be on our way."
 
"Well," said the software engineer, "Before we do anything, I think we should push the car back up the road and see if it happens again."
Source: http://cns2.uni.edu/~mccormic/humor.html