Do you know what software programmers dread the most? Testing.
Have you ever encountered a situation where the software you’re using - regardless of whether it’s on the computer, your smartphone or your tablet - didn’t quite give you the result it expected?
Sometimes it’s plain wrong, sometimes just bizarre and sometimes just in a state where stubbornly refuses to give you a response. We’d be surprised if you haven’t, as almost every software ever created has had bugs, errors and defects built into it. Not on purpose, but simply because of the monumental task it is to create 100% perfect quality software.
You could even go so far as to say that quality software isn’t that which is without bugs and errors, it’s that which has the least bugs and errors.
Technically speaking, software quality is the degree to which a software’s performance and features meets the expectations. In other words, is it doing what it’s supposed to do, and does it ever act funny?
In practice, it covers multiple elements, such as design and interface, reliability, reusability, consistency of output and of course, functionality. The better these qualities show themselves in the execution of the software’s operations, the better the software quality.
A software may pass off as satisfactory by providing the right results, regardless of the testing or development model, even if it lacks in the design and durability department. But if defects prevent correct computation, then the software is worth nothing at all. However pretty it might be, you wouldn’t use a calculator that calculated 1 + 1 to be 3, would you?
It then becomes necessary to take software through a stringent quality testing process to ensure that it’s doing it’s job. That’s what we’ll be taking you through today.
1. When is Software said to be of Good Quality?
Good software is a lot of things. What it definitely isn’t is simply the correct execution of its tasks.
According to Virginia Tech, there are 6 qualities that are a sign of good software.
Specific testing methods can help a developer make sure that each of the requirements are met under various circumstances of use. It has to also be capable of being easily maintained (“maintainability”). What if your client requires a moderate change to the program? An amateur software developer would rewrite the whole program; a good one would have accounted for such a possibility and allowed for modular changes that enable new requirements to fit in snugly with the old program.
Reliability and Reusability
“Reliability” and “Reusability” come next. No software is technically 100% reliable, but the aim for a high degree of reliability should always be present. If, under regular operating circumstances, a software fails, and fails often, it is said to be unreliable. In some cases, such as in air traffic control, a minor drop in reliability can have severe consequences. It work hand in hand with correctness and maintainability. Reusability is self-explanatory: can your software be used again, for some other purpose? Has it been designed in such a way that some of its functions may be transmitted to other programs with common requirements, thereby saving you time?
“Portability” is another feature that simply measures how well your software can be used on a wide variety of systems. There are a large variety of computer systems which clients often deal with and you’ll want to be certain that it can run on as many of them as possible. “Efficiency” measures how optimized your program is, in terms of computer resource. Efficient software uses as little as possible, giving your client a better experience overall.
2. What are the Consequences of Poor Quality Software?
Believe or not, money is one of the biggest consequences of poor software. The enormous time spent in debugging poorly written code results in hundreds of billions of dollars of lost revenue, as discovered by Cambridge University.
Lost time is another result. Clients are stubborn about their requirements, and when you deliver code that is imperfect or downright wrong, they expect it to be corrected - as they should. You’ll only end up wasting more time correcting something that could have been written properly the first time around.
There are far darker consequences as well, depending on the purpose of the software. Stock market crashes and airline delays have been known to have been affected by software bugs. Thousands of people can be stranded halfway across the world, many companies and vested stakeholders lose enormous sums of money because of overlooked errors in the original program. Heaven forbid there being errors in a hospital’s software program.
3. What are the Different Ways in Which Mistakes Might Arise?
Broadly speaking, there are three different kinds of faults with software: errors, defects called bugs or faults and failure, according to SoftwareTestingBooks. The first is when the programmer makes a mistake that results in incorrect output. The second when there is some internal mismatch or conflict in a component or series of components of the software that prevents the function from being carried out. The last is when the program simply does not provide the correct result.
It is the defects that are hardest to deal with as they require a close examination of the code.
4. How do you Ensure that your Software is of Good Quality?
Test. Test. Test.
And there all kinds of tests. They can be divided into two categories, let’s call them strategic and tactical. Tests that are strategic are automated, manual, exploratory tests, while the tactics used to perform the tests are unit, integration and functional, according to Atlassian.
You can check individual components of the software with unit tests, a subsystem of the program with integration tests and the whole end-to-end process of use with functional tests. These let you narrow down the problem areas.
Computers can be programmed to check the repetitive aspects of the software for correctness, while manual tests are used to check aspects of the software output that usually involve the customer experience. Exploratory testing is like field testing: you get a group of people who broadly represent your software target audience, and give them guidelines to check if it’s working. Essentially, you’re testing the software as if it’s “out there”, though with some supervision, according to Atlassian.
Watch the open lecture on software testing by Professor James Bach (video below). It’s a fantastically entertaining and informative watch that takes you through the whole of software testing.
Software is a quite complex endeavour, though also extremely interesting. At any rate, it is vital if you want to deliver good software and develop a good reputation. You can’t skimp on it!