Here at the company, I have been thinking of ways software developers can improve software quality during the software construction phase. “The way to provide high-quality software is to implement effective QA management that provides tools and methodologies for building bug-free products”. (AltexSoft, 2018) Listed below are three ways to better manage the quality of our software that I have found to be the best fit for our company environment.
Step 1) Implement SQA, which stands for software quality assurance. Stating the requirements of the software upfront that outlines the plan of actions to take as well as what not to do ensures a quality system.
Step 2) Implement SQC, which stands for software quality control. Simply put, SQC means controlling the quality and having plans in place to handle various situations that may occur.
Step 3) Testing. I feel it would be a benefit to add software quality testing to our project management routine. The world we live in today is ran off software, from the numerous devices we use to the cars we drive, all have some form of software used in their making. Knowing that software is so widely used and its quality matters, as in how it conforms to given requirements, I believe adding some testing methods into the mix will improve our user’s experience with our software tremendously.
According to some research I have been doing, software quality is “the degree to which a system, component, or process meets specified requirements”. (Software Testing Fundamentals) Simply put, software quality is the measurement of how well the software meets expectations. Software quality can be broken down into 5 quality characteristics once it is deemed a complete and functional system. The first characteristic to look at is reliability where you measure the ability of the software to perform as it should under failure conditions. (SQA) An example of a failure condition would be the system losing power. Did it start back where it should, or did it end up crashing? A good quality system will save your place and start you right back where you left off.
Without a reliable system, there is no reason to use the software at all.
The next characteristic I find important is Usability. Usability is the ability to use it. A good example of software usability is a self-checkout register at Walmart. If I am unable to properly use it, I then have no desire to use it, therefore making it obsolete. The whole purpose of the software is that untrained people are able to easily navigate its system. The first time I used a self-checkout register I found that because Walmart uses large colorful pictures of products you aren’t able to scan, I was easily able ring up my groceries, swipe my card to pay, and bag my stuff without delay. I now use them any time they are available just to avoid waiting in line.
The next characteristic, Efficiency, deals with what you used to get that result. What resources like memory, diskspace, or network was needed to be exact. (SQA) Will these resources always be available and what kind of cost could there be associated with that need? Efficiency is imperative when dealing with software. The less outside resources you have to depend on to use it, the better.
After efficiency comes the software quality characteristic known as Maintainability. Does the software have “the ability to identify and fix a fault within a software component”? (SQA) In other words can it find and fix its own issues if they come about? This is a great benefit to any system.
Portability would be the last quality characteristic of software that references the ability to handle changes or something outside of the norm. (SQA) A good example of this would be Alice, an object-oriented software that has to conform to constant change, good and bad. The ability to handle this fluidly is why Alice is a widely used software in object-oriented programming.
When testing the software, there are four levels of tests, which include unit testing, integration testing, system testing, and acceptance testing. When it comes to software, units are the smallest testable section. Unit testing is the one stage of testing, usually done by the developer, where they test each component individually to be sure it is working as designed. Unit testing helps with keeping the cost of fixing bugs down by finding errors early before it would cost too much to fix. Unit testing “usually has one or a few inputs and usually a single output”. (Software Testing Fundamentals)
Integration testing is another level of testing that is usually performed by someone other than the developer of the software. In this stage of testing the units are grouped into sections. “Integration tests determine if independently developed units of software work correctly when they are connected to each other”. (Fowler, 2018) This testing focuses on how the units perform together. Integration tests can be performed either by the bottom-up or bottom-down method. The bottom-up method starts by testing individual units then progresses upward to the groups of units. The bottom-down method of testing starts at the higher-level sections and works its way down, regressing to end with individual units.
“System Testing is the testing of a complete and fully integrated software product” and is done by a professional testing individual or team. (Guru 99) When in this level of testing you test each part of the application as seen from the user, nothing with the code. During system testing, you are looking at inputs and their outputs, as well as design and other visible characteristics of the software and measuring the quality of the experience as if you are the consumer. Once system testing is finished and meets expectations, the software is usually put on the market for consumer use.
Acceptance testing is the testing of the final product in real life scenarios by the intended user of the software. This stage of testing is best done in real world situations and consumers are usually invited to either come in and try the software or a test version is made available for downloading over the internet. The results are usually sent back to the developer for modifications if needed and then a final product is made officially available and released. (Tech Target)