Published by Juan Mora on
Jul 19, 2018 12:00:00 AM
It's great to meet a deadline...but a functioning product is more important.
How do you get there? Testing, testing, and more testing. Get the full scoop from Concord's Juan Mora.
Why does testing matter?
It all comes down to quality. When products and software work well, quality is a complete afterthought, but as soon as something fails to work…it’s the first thing everyone notices. For many reasons, corner cutting on a project usually happens in testing with the demand to deliver quickly as a key contributing factor. When speed of delivery is the driving force, quality inevitably suffers. Developers will toss over a piece of code as soon as they complete it and just hope for the best. Quality should be a point of pride for developers and they shouldn’t even dream of handing over a piece of code they haven’t unit tested repeatedly.
What kind of testing should I be doing?
There are many different types of testing methods and all have their role in the SDLC. A few of the more common ones include the following:
Unit Testing is fundamentally important for pieces of code and programs. Unit testing should cover every branch and line of code. It helps a programmer test that the unit provided is producing expected output against a given input and behaves as expected in all conditions.
Component Testing is a super set helping to test multiple pieces of code.
Integration Testing is crucial to make sure everything is talking together between the databases, services, UI components and so on. This is the beginning of end-to-end testing for a system.
Functional Testing is necessary to ensure the specified functionality detailed in the requirements works as expected. This is where the functionality of the end-to-end system is tested to make sure the system behaves in accordance to the functional requirements.
Regression Testing is necessary to ensure that changes to the system do not have unintended consequences to parts of the code that have not changed.
Performance Testing should be done on several levels. Components, services, database queries, batch jobs, and even UI/application code should be performance tested. Full end-to-end performance testing is critical to the success of an implementation. The purpose is to assess the speed, scalability, resiliency, and effectiveness of the system ensuring it falls within the specified non-functional requirements.
Usability Testing is performed to identify design changes that should be made in the User Interface. The UI team can observe users struggle with the UI and solicit feedback. Usability tests should be conducted often from prototypes through the final working system.
Acceptance Testing is generally done by the customer to ensure the delivered product meets the requirements and works as expected.
Everything needs to be orchestrated and coordinated, but perhaps the most important, and misunderstood, part of the process is that the developers and QA teams really need to understand the business problem they’re trying to solve. Without keeping the end goal in mind, no amount of testing can make up for a product that doesn’t serve its primary purpose.
Why don’t people test more?
Generally, teams do not do enough testing as a whole – there’s a breakdown at every level of testing, which ends up impacting the overall cost of the project. It’s much cheaper to resolve an error that is found early on than when it is in production.
The biggest challenge is when people feel they’re under the gun in terms of schedules being too aggressive or if they don’t have the experience necessary to know what good testing looks like. In some cases, inexperience with software development methodologies drives a lack of testing.
How will I know if I tested enough?
Just remember that quality is king. If you’re behind in your timeline, but the quality is good, people will remember that. It doesn’t really matter if you make your deadline…but the product doesn’t work. Always focus on the quality, whether at the architecture or design or code or test level. It has to do what it’s supposed to do and work flawlessly.