Author
Blogs
Article & Observations About Diverse Teams Working Better Together
What is Software Testing and Why is it Necessary?
According to “The Art of Software Testing” by Glenford J. Myers, 2nd Edition, 1979, “Software testing is a technical task, but it also involves some important considerations of economics and human psychology.” This is a classic textbook for software testing techniques, and it is amazing to see how much has stayed the same since that time.
The whole goal of software testing is to find bugs before your customers find them. Software bugs reflect poorly on your website or application.
Table of Contents
- What is Software Testing
- How Does Software Testing Work?
- What Is a Software Bug?
- Different Types of Software Testing
- Common Terms: Types of Testing
- Types of Software Testing
- Agile Software Testing Strategy
- Agile Software Testing Is an Important Part of the Development Cycle
- Do I Need Software Testers?
- What Kind of Training Do Software Testers Need?
- Software Testing Best Practices
- Software Testing Resources
- Software Testing Training Resources
- Software Training Books on Amazon
- Frequently Asked Questions
How does software testing work?
The Psychology of software testing is related to the idea of wanting to find software defects. It is much better for you to find a bug rather than your customers.
Our training program for software testing specifically teaches that it is good to find a bug, because new software testers are often disappointed when a defect is found. A good day for a software tester is to find a bug.
The Economics of software testing is related to how software testing can actually reduce the cost of software development. This can be counter-intuitive, but it makes sense when you remember that software testers are generally less expensive than developers. It can also be very costly to redesign software at the end of a project if a significant bug is found that requires significant development to fix.
This is related to the “Test Left” paradigm in which the software testing should occur as early in a timeline as possible, as discussed in the Agile Software Testing Strategy section.
Example: What is Software Testing?
What is a software bug?
A software bug is simply a difference between an expected result and what actually happens when the software is tested. The Expected Result can come from a list of software requirements, or more often it comes from the expected behavior for an app that follows best practices.
For example, it is best for buttons to be labeled consistently, respond quickly, give feedback that an action was taken, etc. If your app differs from a typical app, then users will find the software confusing.
Example Bug: The Mother and Father data entries were stored in the wrong fields
Different Types of Software Testing
There are many types of software testing. For example, Unit Testing is normally completed by developers as they add Unit Tests to their own code so that a set of expected results are verified for a set of test cases.
A simple example would be to verify that a function that adds numbers would verify that 2+2=4. Technically, this is part of Test Driven Development (TDD), which is more of a development team activity than a Quality Assurance Software Testing activity.
Therefore, many people think of software testing as User Acceptance Testing (UAT) or Software Acceptance Testing (SAT). This is considered as “final” testing at the end of a software project to do a final validation or verification (V&V). This is an important activity, but it is better and more economical to follow an Agile Software Testing Strategy as discussed in a later section.
Common Terms: Types of Testing
- Functional Testing is done with the goal of finding functional defects. This means that a certain software function is not working as expected. Some examples that Iterators has found are a “First Name” field stores a result as a “Last Name”, or clicking on a given button leads to a crash, or an inaccurate action.
- Regression Testing means that a previously working feature has regressed and is no longer working after a software update.
- Manual Testing means that a software tester is manually using the software by that individual. This manual testing could be Functional Testing, Regression Testing, or any of the other testing types listed below.
- Automated Testing means that the testing is performed by another computer program that automates the use of the software application. For example, Selenium can be used to program a set of tests for a website in order to execute the web app and compare the results to the specified requirements. Automated Testing is normally done as Automated Regression Testing because automation is generally more expensive to set up than Manual Testing, but the automation can then be run every day or after every software build and so the overall costs are reduced over time.
- Accessibility Testing is another major area in which the bug is related to how easy the software is to use for users of all abilities. For example, some users with disabilities would use a keyboard switch or a screen reader for a website or app. Software bugs can impact the accessibility of the software product for some users. WCAG provides a set of requirements for websites to be accessible. Iterators is a Trusted Tester certified by the Department of Homeland Security for accessibility testing.
- Integration Testing or End-To-End Testing refers to doing the software test once all of the components are all put together and is most similar to how an end-user would use the software product. Testing each individual component may not find all of the errors that occur when all components are put together into a complete system or app.
Types of Software Testing
Agile Software Testing Strategy
Agile refers to a project management strategy often applied to software development projects. For our purpose, a simplified way of thinking about this is to emphasize that each part of the software should be tested at the time they are developed rather than waiting until the end of the project. Good Agile testing can be lower cost and much lower risk than the “Waterfall” strategy of waiting until the end of a project to perform the testing.
For example, assume that a project takes 6 months to complete. A development sprint could be completed every 2 weeks by several developers. Perhaps one day of software testing is done for each of these 2 weeks. This ensures that the features are actually working well and there are no regression bugs.
The alternative is to wait until the end of the project, and spend perhaps 2 weeks testing, find bugs, and then need to spend another 2 weeks or so to fix those bugs.
That can delay the release of the software product by a month, or you may need to compromise the quality of the software to meet your deadline.
Some people mistakenly think that the Test Driven Development completed by the developers are sufficient to make sure that everything is working. This needs to be balanced with manual testing to perform Integration Testing to see how the software works with all of the components completed.
Agile Software Testing is an important part of the development cycle
Do I need Software Testers?
Short answer is “Usually.” Let’s go through a few scenarios to consider.
If you are creating a relatively simple website, then perhaps not.
If you are creating a responsive website suitable for desktop and mobile browsers perhaps with some animation elements, then yes.
But won’t your web developer test the site? Of course, but it is often beneficial to have trained software testers also test the site. At Iterators, we have a device farm with different mobile devices, we test different browsers, window sizes to test the responsive break points, check the animations.
We always find issues, such as images that do not display correctly on certain window sizes, or animations that are not compatible with some browsers. It is more economical to hire a well-qualified software tester than to expect your developer to spend extra time testing all of these configurations.
What if you are developing a mobile app? The answer is definitely Yes!!
In fact, it is best to test with the Agile strategy of testing new features every Sprint, which could be every week or two. Iterators has had a few customers that have had their apps fail when tested at the very end. One customer had a “guarantee” by the developer to fix all problems that were found in the last 3 weeks of testing. After multiple rounds of testing, the app was still not functional, and the app was abandoned. Reduce your risk and your overall costs by performing testing during development.
It is again more cost effective to have testers test and developers develop. The other approach is for the client to test the app, because “we all use apps.”
However, there is a great benefit to using trained software testers to find those examples that your end users will end up complaining about on the launch of your app.
What kind of training do software testers need?
At Iterators, we have a custom training program that incorporates several useful components. We include the ISTQB Foundation Level training for software testers. This has several valuable techniques for software testing and some specialized terminology.
We also find the exploratory testing approach useful. A good introduction to this it is the Explore It! Book by Elisabeth Hendrickson.
Many people feel that software testing means writing extensive Test Cases. However, the real goal is to find bugs. Iterators uses an exploratory approach with enough structure to make sure that all areas are examined.
The advantage of exploratory testing is to allow an experienced tester to find the best areas to test. For example, if defects are found in a certain area, then it needs even more testing. Finally, we include a good amount of practical examples because there is no substitute for actual experience.
Software Testing Best Practices
The most significant best practice is to make sure the software testers are included in your project. Some developers will include QA software testers on their team, and some are more individual contributors. The key thing to remember is that the Product Owner is responsible for the overall product quality and should decide on the strategy for software testing.
Iterators can provide an independent view of the testing needs. We have had some developers state “it should only take 50 hours to test at the end of a project.” These same projects have then had to scramble to get functioning software to deliver.
A better approach is to follow the Agile methodology in which new features and testing are done at the same time so that new features are found to be functional at the time they are created.
Software Testing Resources
There are many software testing resources available on the internet. Here are some of the Top 10 links for software testing in different categories. There may not be 10 in each category, but they are all good resources.
Software Testing Training Resources:
- ISTQB Software testing certification: https://www.istqb.org
- StarEast and StarWest Conferences
- StarEast Conferences: https://stareast.techwell.com
- StarWest Conferences: https://starwest.techwell.com
- These conferences provide a wealth of resources including: talks, seminars, training sessions and vendor exhibitions. It is a great way to get exposed to new techniques.
- StarEast Conferences: https://stareast.techwell.com
- TechWell training resources: https://www.techwell.com
Software training books on Amazon:
- Explore It! by Elisabeth Hendrickson
- The Art of Software Testing by Glenford Meyers, originally published in 1979
Frequently Asked Questions:
What do you find are the current biggest challenges with software services for the visually impaired?
- Most websites are not accessible to individuals with a visual impairment. Individuals with visual impairments are not all blind. Some have low vision, color blindness, or multiple disabilities, including blindness. If a website is not accessible, it prevents users from using it.
We have a colleague teaching technology to students with visual impairments. As part of their curriculum, they are assigned to create a report such as one of the fifty states. However, the websites are not accessible. While the students are taking a technology course and are to use their technical training to create the report, they cannot find an accessible website to complete the project. The instructors have to search and find a site that is accessible to complete the assignment.
Aside from adoption, what user difficulties do you find are hard to overcome?
- Iterators LLC is in our fifth year as an inclusive software testing company, women-owned and managed. As software testers we are certified Trusted Testers certified by the Department of Homeland Security. We test against blindness, low vision, color blindness, other visual impairments, deafness or hearing impairment, motor and developmental disabilities, elder status, light-induced epilepsy, and more. Many businesses know that their websites must be accessible, but often decide to comply only after a penalty has been charged.
We branched out and secured an award from the federal government and currently work on several projects for the Library of Congress. I leave a link here: https://hbr.org/2020/03/do-your-di-efforts-include-people-with-disabilities of what I believe is an important article from Harvard Business review. "Although 90% of companies claim to prioritize diversity, only 4% consider disability in those initiatives, according to a report from the Return on Disability Group."
Why is a quality assurance tester needed on a software development team?
- Software testing does not need to be completed by the development team. Ideally, ideally there should be independent software testers working in tandem with a development team. If you only have testing completed from the development team, too many issues are lost, and the client may sign off on a project that has had insufficient testing completed.
Why is software testing important?
- Without software testing, users would not have a good experience with the software they use every day. With a lack of security, accounts can be hacked, causing a security breach such as users' passwords being compromised or other critical data compromised. We work in any industry, from small startups to large corporations and all, have software bugs that reduce the performance of the software. As testers on Enterprise software, we know when software is new, untested, and brittle, there are many bugs, and we test the software in an unfriendly environment to find the bugs.
What is a bug in software testing?
- Software bugs are coding issues where the software doesn't act the way it is expected to and, therefore, doesn't meet the client's requirements. For example, a user wants to log into a new app. The user has read and agreed to the terms of service, created a user name that follows the written guidelines, set up a user name and password that follows the requirements yet cannot log into the website. That is a bug. As software testers, we test against the written criteria.
In which phase of the system life cycle is software testing performed?
- Software testing is often performed during the later stages of the system life cycle, such as during the beta testing or acceptance testing phases. However, it is important to note that software testing can and should be performed throughout the entire development process, in order to ensure that the final product meets all customer requirements.
What is a use case in software testing?
- A use case is a scenario that describes how a user would interact with a system to accomplish a specific goal. In software testing, use cases can be used to define test cases, which are specific sets of steps that need to be executed in order to test the functionality of a system.
Use cases can also be used to define test data, which is the input that will be used during testing. Test data can be manually entered by the tester or generated automatically. Automated test data generation is often used in order to create large volumes of data that would be difficult to generate manually.
Use cases can also be used to define expected results, which are the outputs that should be produced by the system under test. Expected results can be captured in the form of screenshots, logs, or other artifacts.
Finally, use cases can also be used to define test conditions, which are the specific conditions under which a test should be executed. Test conditions can include things like environmental conditions, data conditions, or other factors that could affect the outcome of a test.
Relevant Resources:
About the Author
David Willcox graduated with a Bachelor of Science from Tulsa University having double majored in Chemical Engineering and Mathematics. He earned his doctorate in Chemical Engineering from Northwestern University. He has a broad background in education, industry and software testing. David has written software for 40 years, starting with BASIC, which was originally stored on yellow punch tape. Since that time, David has expanded his skills and is proficient in Assembly Language, Pascal, C, Objective-C, Visual Basic, C#, LabVIEW.NET, Python, R, HTML and JAVA.