Quality? Is that something edible?
At the start of the software engineer career, one of the first things that the professors try to teach is understand what is what we call software, of course, the definitions can vary but in the end we can agree upon a simple definition: “It’s a set of programs that allow the computer to do tasks”. After understanding this you can now create your own program and gain millions!!! Well… no, sadly, once you enter the real world you understand that software tends to increase in complexity as the project starts to grow, and that’s when quality on our software comes into play.
And now the important question then, what the hell is software quality? And for this question, I like a definition on this blog post by TestBytes, where they described as the following:
The quality of software can be defined as the ability of the software to function as per user requirement.TestBytes
This definition applies to whatever program that you build, for example, your Python hello-world program has the quality you would expect if by running it prints “Hello World!”, it’s easier to maintain it’s quality due to the lack of complex requirements, but when we start thinking about programs or services as big as Google Search, what are the key aspects that can tell us about it’s quality? For this, Silas Reinagel created an interesting blog post defining seven aspects that constitute software development. I created a simple diagram to briefly explain all of them:
How Can I Ensure the Quality of my Software?
One of the things I have learnt is that this question is not simple to answer, since it depends on the organization and what they are trying to achieve. Global App Testing member Fahim Sachedina, has a good blog post that tries to answer this question, on the other side, Experimentus member Nigel Rawson has a post focused on testing, combined with the information display in here I will list 3 things that can help out with improving the quality of the software that you produce.
Prioritize the user
“Quality is essentially about meeting user expectations. Consistently. Reliably. Confidently.”Karin Dames, Editor of Teal Times
The user is everything, it’s the one that you need to head your software towards, if you do not make the customer happy, they will simply find for an alternative and you lose. One important thing you need to start to worry about is the User Experience, is one of the investments that startups need to put their resources on if they want cases of success in their products.
Testing is your friend
Testing is everything, specially for bigger companies, imagine, your service is running live for millions of users, and you decide to make a change that ultimately crashes the whole system, now everyone hates you, what could you do to avoid that? T-E-S-T-I-N-G
It is a crucial part of your development pipeline, every crucial change needs to be tested to avoid problems, one of my recommend approaches to get used to testing is Test Driven Development (TDD), what I like about this is that it forces you to think about how to test every line that you code, and as painful as it sounds, it is actually not that difficult, Kent Beck is his famous book sums it up pretty well:
1.- Add a little test.
2.- Watch it fail.
3.- Make a little change.
4.- Run Tests and succeed.
5.- Refactor to remove duplication.Kent Beck
Innovation = Improvement
From my experience in my internships at Google, one of the things that are used nowadays is automate EVERYTHING, and one of the most important things that help with a multiple developer environment is automated testing, where each change that the developers do is the to check the verify, there are many tools available for students that you can start to learn to get used to it, GitHub actions has started to have many features available to allow this kind of automated actions, you can check about them in the Marketplace.
Reviewing is a good thing, before submitting your changes, once you submitting the changes do a code review, but also, it’s important to do refactoring of a code base once a project gets bigger. One important thing is to reuse, what worked well. I found a post from Sukhrob Golibboev that talks about the importance of refactoring, I will suggest giving it a quick read.
Standards of Software Quality
One of the things that makes my heart hurt from time to time is when I hear someone start to talk about ISO or IEEE, it can be painful and boring to read pages about international standards sometimes, since the information can be really confusing to get at first, but in fact, we came across these everyday in our life’s in the industry. Particularly, when we talk about Software Quality, the ISO 9000 and IEEE STD 1061-1998.
But I found something interesting, I blog post in Monterail by Paweł Rebeś talks about how ISO 9000 was the previous outdated, and then they introduced ISO 25015, that adds the categories marked in red in the following diagram:
I would strongly suggest to read on Rebeś blog post where he does a great job explaining into simpler terms every point that is marked on the diagram.
Something to keep your mind on
As you advance in the path to becoming a software engineer, one of the things that are crucial to take in consideration is the quality of the software you develop when you develop a project that is part of a big company, there are many tools available to automate the majority of the activities that we as developers do (testing, deployment, etc.), this can help a lot to improve efficiency and to ensure that we deliver a product of the biggest quality to our customers.
If you have the chance of working into a bigger company all these tools will be provided to you with some internal technology/framework that you will learn to use, but on most of the cases all the tools are pretty similar outside and inside the company, so starting to learn Github Actions, Jenkins, etc. will help a lot in your future 🙂