Testing Your Software Product:
Many first-time entrepreneurs unfortunately underestimate the importance of software testing, simply because it’s not taught in the entrepreneur courses and it’s not an exciting part of the product development process. But guess what? The lack of software or product testing can lead you straight to disaster.
Imagine you built the greatest app ever, it solves an important problem, has an amazing UI and UX and you did a great marketing effort and crowdfunding campaign to promote it. Unfortunately, you overlooked the software testing part of the equation and now it seems that the app does not work on various smart phones, it runs extremely slowly and several of your features are not functioning correctly. You just managed to create a first bad impression with your customers, burned all your marketing budget and you have to take a step back to fix all these issues.
To avoid problems when launching a software product, best strategy is to test it for majority if not all scenarios that can go wrong.
How much is enough? That is also the other balance that must be understood. Make sure it is enough to mitígate any risk to your brand reputation.
Don’t place your brand in this situation.
FRUSTRATION WITH I.T.
YES! WE HAVE ALL BEEN THERE.
So you’ve gathered funds, perhaps even crowdfunding your project, and put efforts into designing and developing your software. So now how do you prepare for bringing it to market?
The correct approach to the testing effort is critical in achieving the goal of producing software that does what it is intended to do and does it effectively and efficiently. The goal of testing is to ensure that all the desired features are there, function well, work with other applications where necessary, and do not introduce problems into the system. This article helps achieve that goal by addressing the following issues:
• Test Planning
• Write a test case
• System testing
• Integration testing (when required)
• Performance testing criteria
• Regressions Testing
• Example test scenarios
The belief that you do not know how to test software has become the greatest stumbling block to initiating testing. To be honest, many projects overlook testing as unimportant. My 14 years of experience specify otherwise.
Testing is performed by addressing the essential elements that include;
1. Environment – Duplicate the environment in which the software will function. If the tester has a desktop computer not representative of your target market and your users predominately use tablets, the tests are not valid. Attempt to duplicate as near as possible the intended environment where possible.
2. Test Plan – The major elements of planning are contained within the test plan. As discussed later; this involves the who, what, where, how, and when of testing. I strongly recommend the use of automation from the beginning. This allows for fast and efficient test execution now and in the future. This will be discussed later in the article.
3. Approach – The test approach defines what tests will be performed and the order of performance. It is critical to remember that the purpose of the testing is to ensure that the software is as free of defects as possible. The approach then would be to define which tests best achieve that goal.
4. Test Cases – Test cases are based on the test plan/approach. The test cases are based on the epics, user stories or requirements established for the application. Depending on your budget or timeframes it is important to prioritise your tests prior to execution.
5. Defining data – The test data must be in place to simulate what your end customers will set. It is highly important this is taken into consideration during test planning. Test data examples include customer name, date of births, customer addresses, tax file numbers, established customers and data syndication with third parties to name a few.
6. Automation – Technology now exists where multiple devices and browsers can be automated with one set of testing scripts. This means your automation framework can simulate multiple manual users executing test cases with a touch of one button. I strongly suggest you employ a capability that not only can develop software, but possess a testing mindset to deliver a quality outcome. For automation frameworks look up Selenium, Jenkins, QTP and Cucumber to name a few on google. There are an abundance of free open source tools available for your needs.
At the end of the day, you are testing your software to mitigate the risk of failure in the hands of your users.
You can easily apply these test approaches within agile methodology. You need to schedule the tests in the right sprints.
In previous articles I utilized an example of building a trading application using an agile methodology. Please visit this link to view the article. The architecture example looked like the following:
Throughout this article I will reference two specific areas of testing:
• Presentation Layer: This layer is the actual user interface that the user will see for your software.
• Business Layer: This layer is actually the technical functionality behind the user interface. This layer provides you with the flexibility to test large functional areas quickly and efficiently.
We will reference this example again to explain testing scenarios below within this article.
Write a test case
A test case is a step-by-step procedure and prioritized according to the user stories, requirements and/or software design criteria. This determines how much of what kind of tests are to be performed. The user’s emphasis on quality dimensions and the project’s risk assessment of what could go wrong are important criteria. Develop test cases in parallel with software development.
Determine what steps in what order are necessary to test the system. You need to know the requirements and business rules well enough to predict exactly what are the expected results. Compare expected results to actual results, to determine whether a test will pass or fail. A good test case checks that the requirements are being met and uncovers defects.
Example Test Case 1
• Test Case: Login to trading application
• Description: Confirm that user can successfully log into application
• Pre-conditions: Username/Password available.
The above test case is an example of the basic functionality of a stock trading application. There are two ways to test this scenario. One can be through the presentation layer and the other via the web services contained in the business layer.
System testing in modern terms focuses on ensuring your standalone software is fit for purpose. In this case your stock trading application without formal connections to the external stock exchanges. They should be simulated. Testing can be applied from a business or technical perspective. From my experience a combination of both is desirable.
Before starting system testing, you need to ensure the developer has unit tested the code they are providing you. Unit testing is the process of performing some basic tests once the code is completed. This involves a hand full of tests that can be completed in several minutes.
System testing is performed on the complete software product. There could be more than 50, 100, 200+ possible system tests that can be performed, the most common being the hardware/software interaction. The effectiveness of system testing is dependent on the skills and resources available to you. I recommend a strong technical test presence to deep dive into the inner workings of your software. Ensure you consider the negative scenarios just as importantly as the positive one. E.g. injecting faulty data into the software to generate possible errors the user could see prior to market launch.
Get real users also involved in this phase and not just your internal software team.
You want to do as much testing as possible to reduce any risk early.
Test case scenario: In the below example we have the stock trading application and the areas of focus highlighted in red. In this system test scenario we can test the presentation layer, business layer, data layer and data storage in isolation if required. Most importantly we have the flexibility to test in the most efficient and productive way as possible. I do recommend testing the business layer first as you can automate all test cases and find any defects quickly. Once that has occurred, feel free to focus on your presentation layer. Once again you have the flexibility to do any order of testing depending on your circumstances.
Once you have heavily tested your software under your isolated system test approach, now it is time to plug-in your external interfaces and those. Here you want to find defects that could be introduced by the third party software. In this case a stock exchange. You may discover that you may have not designed your software correctly to the stock exchange specifications. Either way, better to find them here instead of the customers once launched.
Test case scenario: Referring to the stock trading application below and item highlighted in red. You now need to remove the simulated interface code and plug the real ones in. I advise you to utilize the automation scripts created in your system test phase to generate the scenarios that will place trades with the external stock exchanges. Apply them from the business layer first and then the presentation layer. Again, all depends on your particular approach. With the presentation layer approach get real users to test with your also in a controlled fashion.
Performance testing focuses measuring how your software and associated infrastructure operates when you simulate multiple users or customers log into your system at the same time. You need to see if there are defects that pop up when this occurs. Don’t wait until you deploy your software to market to measure this. You need to check how the database, business layer, presentation layer and third party interfaces behave under full simulated market conditions. You may find that 10 user logging into and using your software may experience response times last 30 seconds as an example. You don’t want your users seeing that and as a result they will never use your software again! Don’t be that business!
The benchmark by how your software performs may be an industry standard or perhaps a previous version of the software.
I have addressed this subject is previous articles. Please reference this link to view that article.
Test case scenario: The example diagram below outlines a scenario where we are injecting load into the presentation and business layer. The aim here is to measure the response times of the software where say 100-1000+ users are using your application at the same time. The average user expects functionality to return a response within 3 seconds in today’s market. If building a mobile phone application you need to consider network conditions such as 2G, 3G and 4G mobile network carrier signals. All the big companies perform these types of tests on their customer facing software regularly. It is the difference between having an average brand and a great one!
Regression testing is perhaps the most overlooked form of testing software. This mode of testing is in place to ensure what functionality worked in your previous software versions remains to work when new features are added as updates to existing software, or as features are added in the development cycle of new software. We do this to ensure maturity and to protect your brand image in the market place. There is nothing worse than downloading the latest mobile banking application from your bank and not being apply to login or perform basic functions due to some form of defect.
Test case scenario: Basically run your automation again and ensure everything passes as expected before launching. I do encourage you to run these tests ongoing throughout the lifecycle of your software project.
This is a specialized area of a software project, but please feel free to contact me if you require assistance to progress your software project.
I would love to hear your opinions, questions or subjects you wish for me to cover.
Please post your feedback to me below or visit my website at www.mikehamilton.com.au.
To start a crowdfunding project to gather funds for your software product idea, learn more here.