Verification and Validation of Software (V&V)

Have you ever been in the situation that you finally finish a feature in a project and then the next day the project owner told you that it was not what he wanted and you have to make a lot of changes or even create again that feature from zero? well you can prevent those scenarios using verification and validation of sotware.

V&V is the process of checking that the software meets all the specifications given, it fulfills the purpose of the client, making sure that the software fulfill the laws in the countries that is going to be available, it also helps to reduce the number of bugs at the moment of deploy.

So for the part of software verification you can use some tools for making test cases and see which outpút it should give to you with that input and reviewing all the logical part of the software to answer the question are we building the product right? and for the part of validation the ideal case scenario is that the client is available all the time of the development and ask continuous questions about if what the software is doing is what it wants, but this is unlikely to happen so you can use some strategies defined already to follow some steps to ensure a good communication with the owner of the product and the development team to fulfill all the requirements for example the waterfall development process or the iterative development processes that are more use nowadays because the constant change in the world of technology.

Iterative model

Talking about requirements is very important not to only focus in the functional requirements, for example you are building an app and you can have your payment methods in your account but in the non-functional requirements it’s missing the part of security, so your app functions perfect but the security that is something of great importance in that app is not implemented so anyone would use it, that’s why is important to take the time to analyse all the requirements and follow one of the cycles of software as the iterative model for ensure that the requirements and functionality are fulfilled.

An important part of these cycles are the test cases, thanks to the testing step in the cycle you can prevent and fix a lot of bugs that are not visible and at the time of deploy to production the software is more stable with less bugs and at the long term it’s going to be cheaper because it’s a lot more expensive to fix an error when the software is already in use than the cost to fix it while it was on development.

Models and Standards for Software Process Improvement

Models and standards for software at first look like something strange and unnecessary when you are working on your own, but these standards are helpful to evaluate the software quality and in this way you can see what areas of improvement you can work on and how to optimise your current project to make a better product.

There are some standards for ensure quality in software some of them are the following:

  • CMMI
  • TSP/PSP
  • ISO-15504

Capability Maturity Model Integration (CMMI):

CMMI was developed at Carnegie Mellon University. It is required by many U.S Government contracts, just by that you can see how important are these models to ensure that software being developed by certain company have all the requirements of quality needed, this model focus in the part of product and service development, service establishment, management and product and service acquisition, this is important as well because thanks to this best practices that this model propose is easier to maintain the software.

The Personal Software Process (PSP) provides a operational framework with the objective of helping a person in how they manage their own time, productivity. This help teams of managers and engineers to organize small projects or large projects. PSP has as objective to improve the levels of quality and productivity of the team developing those projects. In this framework or model each team manage itself, they do their own plans, how they track their work and are responsible of the quality of their work, but before someone can take part on a team is necessary to learn about TSP(Team Software process) because in each team there are roles to ensure the quality and organization of the team.

Software Process Improvement Capability Determination (ISO/IEC 15504) has the following objectives:

  • Create an standar to evaluate software processes.
  • Measure and evaluate customer-supplier, supporting, management.

Now this standard measure the following processes in the business organization, management, engineering, acquisition and supply, support and operations. This standard is a framework for continuous improvement, their analyze each process capability and see what areas of improvement are available and is divided in 6 levels.

  • Incomplete( Level 0): The process is not implemented or fails to achieve its purpose.
  • Performed(Level 1): The process is performed and achieves its purpose.
  • Manages(Level 2): The process is managed and results are specified, controlled and maintained.
  • Established(Level 3): A standard process is defined and used throughout the organization.
  • Predictable(Level 4): The process is executed consistently within defined limits.
  • Optimizing(Level 5): The process is continuously improved to meet current and projected business goals.

So as we can see these models are standards that can be used for ensure quality and a framework to always keep improving how the workflow, the processes and the organization of a business works together to create software that meets the criteria so in the future that software can be modified, scaleted and improved.

Software review

Software review is useful to validate the quality, functionality and features and components of the software. Software review consists of testing the product and making sure that it meets the requirements stated by the client.

Some reasons to consider software review important are:

  • It helps to get clarity in the initial states of the product.
  • Helps to plan testing time and costs.
  • It helps to reduce the number of bugs in the final software.
  • It helps to reduce cost because bugs found in earlier stages are cheaper to fix.

Types of software review

Software Peer Review: As the name said, this type of review is when two developers examine or resolve defects in the code. Normally in this type of review you can have pair programming this is when two developers code together an in this way they can prevent bugs while programming. Another type of peer review is called Walkthrough:
where members of the development team are guided by the author and other interested parties and the participants ask questions and make comments about defects.

Software Management Review:

It evaluate the work status, this is a systematic evaluation of a software acquisition, supply, development, operation and maintenance, this is helpful to monitor progress and determine the status of the work, what is done, what is remaining, how much time is left, confirm requirements made by the client, and check if the resources are being used in the best way possible and make changes to improve this in case of find areas of improvement.

Software Audit Review:

This type of review is the one I have experienced before and consists of a group of people external to the project that review the code or the product to see if the software meets the specifications made by the client of find unexpected behaviour, this thanks that they are not familiarize with the software they are using, so they can find a bug doing something different that someone that knows the software.

Conclusion

Software review is a very important part of Software Development Life Cycle (SDLC), is very useful to eliminate some errors at early stages of the development, some version controllers have tools that can help you with software review for example GitHub, where you can start a conversation in the repository about a bug or an error found in the code and make a pull request fixing the problem and the person in charge of the repository review the solution and give an answer, if you are interested on how you can make code reviews in GitHub you can read their documenatation about how it works here https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/about-pull-request-reviews .

Tools for V&V

Today I am going to talk about an important topic for every software engineer and is to have a version control for all your programs you are working on, why? well let’s find out.

Have you ever been on a situation when your code was working good but when you start creating new features you did something and now your program is not working as intended? Well even if you are working alone a version controller is very useful, thanks to a version controller you can prevent this accidents uploading the version that was working and if you do something wrong while modifying your code you can always go back to the old version without having to spend a lot of time trying to make your code run as before.

Another advantage of using Version controllers is that it makes a lot easier collaboration with others, you can be working in one file while another person create and modify another file and when you finish and the other person as well instead of sending the files you just upload those changes to the version controller and everyone can see your changes and download them in their local copy much faster than sending the files by mail.

Now before continue with what you can do with a version controllers I would like to recommend some, so you can start by downloading a version controller called git, you can download it here: https://git-scm.com/downloads, when you install this, now you have to decide which platform you want to upload your project, the main I use is called GitHub.

With Github you can create repositories, where you can upload your files and share them with others, private or public. This tool have many options, you can create different branches where you can make some changes, normally this branches are used to implement a new feature and when this feature is ready you can push it back to the main workflow and then pass it to production.

GitHub also have some other features like checking for security vulnerabilities if you are using a third party library, this is very useful so you can check if you can use another library or update your dependencies and in this way improve your code security, also you can check who made some changes and if your repo is public you can setup the repo to accept request to change the code and before accepting the changes you can see what changes were made and if those changes are useful for your project and then accept them.

And finally the most important reason, it is required it almost all the jobs at the moment, that’s because when you start working as a software developer, always all the time you will be working with a team, and that’s why is very important to learn how to use GitHub that is one of the popular options at the moment and thrust me it will be a very helpful tool even if you are still in school and you are working in some projects with your team, it can make the work easier to integrate and faster.

My experience on testing

About software testing in my first projects I used to just code and run the program hundreds of times to see if the program was working and if it wasn’t working the way expected, then I started to see in which part the error might be, okay but this isn’t sounds bad no? you always do that, try to run the program and see if it works and if it doesn’t work then you fix it right? Well yes, but this is very time consuming, first because you are making the software without a previous plan, so that’s why in my opinion is important to start making some testing or stress tests to your code so you can prevent first errors in production that you never expected because you never try that part of the code, and next avoiding to spend a lot of time searching where the error occurs by testing each part of the functionality isolated, so if a test fails you know specific in which part or in which functionality the software is not working.

I don’t know if you have experienced when coding, that you have to stop coding and spend a lot of time typing the input over and over again and run the program to see in which part the error was, and the you make some changes and again you have to spend time making all the process and typing the input necessary over and over again until it works, that in my opinion is a waste of time and effort, because you can create a program to test that function in particular and you don’t have to type the same input, another advantage of making tests is that you think about how the program is going to be structured and which part is in charge of each function so basically is like planning and making your life easier when coding at the same time, but before talking about how I have been testing my recent projects I would like to explain some concepts.

There are a variety of testing levels, the one I was talking a lot in the previous paragraphs is knowns as Unit/component testing, this kind of testing is aim at each part of the software isolating every part to demonstrate that each component is correct in terms of functionality and the requirements ask by the client are correct.

Integration testing, in this level the testing is implemented in different parts of the system in combination this in order to see if the components are working as expected together, this is very important because you can be sure that every part of the program isolated works fine but errors can happen when you start communicating this components together, for example when I was working on a query in a server I test that each function was correct but I didn’t realize that the function I used to retrieve data from the database return me a JSON(JavaScript Object Notation) in a string format and when I pass this string to a function thinking it was a JSON object it crashed and the fix was very easy to implement, but I didn’t test the program when I integrate this two functions because I assume that these functions were working fine because the result was the expected one and thanks to that the the program crash in the presentation with the client.

System testing, this level is as the name says when you test all the system integrated, this to ensure that everything is working fine and prevent some errors that could happen while trying to integrate everything in the project.

So once we have seen this levels of testing now we can learn two approaches used a lot when testing, those methods are white-box testing and black-box testing. First talking about white-box, this method is named like that because this means that you see the interior (the code) of the box(the program), this is very useful at all levels of testing, it is from the unit-testing level to the integration and this kind of testing is focused more in the flow of the data through the process, how different inputs are handled and how you can refactor and improve the code to see potential bugs, this method is not focused only on the output of the function, it make sure that everything internal is working find.

On the other hand the Black-box method is focused only on the part of the functionality, this because the code within the box is hidden for the programmer, this kind of testing is used in most cases when you are using external software for example in the case of a web developer in the part of the front-end, they normally used black-box testing when they make use of the API made by the team of back-end because the don’t know the internal code of the program they are using but they can see if something is wrong comparing the expected output with the one it supposed to be.

Now talking about my experience doing test cases, when I started more serious projects I decided to be more organized with the way I code, so first I write all the elements that are necessary to make the project, the functional and non-functional parts and the requirements of the client, then I began with a prototype of the page to see if I am doing what the client wants and finally if all is correct I start making test cases before I start programming because in this way I know what I have to do before start to code and spend time thinking of what I am going to do now, so while making the tests I start making the documentation at the same time writing down the end point to access the function of my API, what is going to be the format of the response and the expected output, in this way when I start coding I know already what I have to do and I can focus more in the technical part without losing time testing manually each time I finish a function, and for that I use a tool called Jest so I only write the function I want to execute and the expected output instead of writing all the test cases by scratch making my time more efficient.

So in conclusion in my opinion testing is a very important step in the development of new software not only in the part of preventing bugs but also in the part of planning how the program is going to work and there are many tools you can use for start creating test cases for your next projects, another tools I have used for the part of back-end development are post-man, that thanks to this program I can access a end-point of my API and see the output without the use of a web browser and HTML to make a different types of request (POST, PUT, DELETE, GET) so a recommendation is to search a framework or tool that can make your life easier to create your testing cases, because the important part of test cases are to help you to make better software but not waste too much time creating test cases from scratch.

Final Exam

During this course I have learned a variety of things, during this last two partials I learned a lot of things that only the experience can teach you, one of them are the importance of making a list of contacts and be connected to people, this is one of my weaknesses because I like to do almost everything alone and I don’t have experience in working on teams, I think one of the principal reasons I don’t like to work in teams is because I have to spend a lot of time making sure everyone knows what they have to do and in occasions the members of the team disappear and I have to make everything alone with the time remaining instead of doing it alone from the beginning.

Another thing I learned is the importance of starting working during the career and not just wait until I finish my studies, this because first it helps to know what I want to do while at the same time I gain experience and it can help in the future to get a job or to solve problems I already had in last works.

Talking a little about the peculiarity of this semester of the transition of taking classes physically to take classes online was very challenging for some students and schools, that’s because in my opinion people in Mexico are used to work face-to-face with others and they get distracted easily if they work from home, but that instead of see it like a problem you can see it as a challenge because you should perform the same and have to control yourself doesn’t matter where you are.

In my case the Covid-19 is a challenge in terms of economy because all the income we have now was very reduced thanks to the social distancing to prevent health problems, but thanks to that now we are looking for different ways of selling and other ways of communicate with our clients in a more efficient way thanks to the use of new technologies. In the case of other people I have heard of how many small business in Mexico are closing thanks to the Covid-19 pandemic and this is bad for all of us because the small business are a big part of the economy in Mexico so now we have to face this crisis and renovate our business.

In the part of what I think the world of business will change thanks to the coronavirus is first of all, the improvement of mechanism to work from home in a lot of companies, that’s because if something similar happens the impact will be less harmful than the first time, because they already have all the structure to achieve it, then some other small business will have implemented e-commerce in their business because sells online are going to become the new tendency in my opinion.

Chapter 23

They mentioned again the importance of a goal and estimates in a project, so in this way you can motivate your people but without too much pressure and stress, because as we saw in last chapters people don’t think faster with more pressure and in my opinion sometimes is even worse work with a lot of pressure because you can make more mistakes.

Another thing I consider important on this chapter was all the lessons that Mr. T learned through all his projects and the importance of having a journal to share your learning with someone else and in case you want to make some reflections about something this journal can help you and I like how Mr. T share his knowledge without anything in change, some people would be very selfish about this and keep this knowledge to themselves but in my opinion is better to share what you have learned because thanks to that you can help to other people improve what you have done and crate a better way of doing things and learned even more about the people you teach.

And in conclusion of all the novel I like how they make the story interesting and at the end of each chapter the novel has a little summary of what Mr. T learned in each chapter, I believe that is a very good way of making someone to do not forget to easily the lesson of each chapter, first because you see the problems they were facing through all the chapter and how they solved it and then at the end of the chapter was a little summary to reinforce all the knowledge of the chapter.

Chapter 22

In this chapter at the very beginning I agree in the part that said the importance of having a deadline and at the same time a goal, because the main difference between those two are that a goal is for satisfaction and it can help you to motivate you to keep working hard the opposite of a exaggerated deadline where instead of motivating you to keep working it stress you and make you feel the pressure that can be cause of more errors at the time of working.

The part when Allair start talking to Mr .T it was like all the summary of what you don’t have to do in a project, he didn’t care about their last employees, then he decided to fire some of them just to make space, and then he decide to reduce salaries and rule by fear just as he threat Mr .T and try to intimidate him, but with everything I learned in last chapters I already know what was thinking and how he was going to respond to that.

Another thing I consider very important was how Mr. T know almost everything about all his coworkers and how without shame he said which coworkers can do the same job that he did in those projects and that characteristic in my opinion was very important, because it means that he is not a selfish person and recognize the work of all.

Chapter 20

In this chapter I agree in the part when they said the importance of having a schedule to do a meeting and make it public so people can see if is important to their respective area or not, because if the subject of the meeting is not important to them they are only wasting their time and making the meeting more difficult, and if you add factors like insecurity about the project is obvious that all the people related to the project will come even if they are not necessary in that particular meeting and for the people that truly needs to discuss something is going to be harder and time consuming , that’s because with more people is harder to talk and ask opinions about.

In the part that they started to talk about how you can prevent meetings with a lot of people I like the things Dr. Winnipeg took in consideration first the people that needs their time in another important thing and are not very necessary in the meeting, another thing he took in consideration is do it in a polite way, then make a reunion at the beginning of the meeting to keep focus on the objective of it and create trust that you are only going to talk about things you put in the agenda.

Another important thing I consider about this chapter is the part they talked about anger in the work, I consider that be angry about something can represent fear but I consider that most of the anger in a work is to suffer an injustice in the work and you can’t solve it alone or it will take a lot of time to solve it.

Chapter 21

This chapter was very funny at the beginning how Belok in a mysterious way got herpes, and how Lahksa return the same day of that, it is very suspicious but whatever.

I like the part that Mr .T thought while he was watching the movie of how Patton just observed what was happening in the battle but he had already done all his work, now he just has to see what happens and when something went wrong he took action but just in that cases, it might be sound easy but it is not, make plans to get a project run i a smooth way is one of the most difficult parts of a project.

Another thing I consider important of this chapter and was also in another chapter was the phrase Mr. T use that said that the things that kill you are the things you think you know but are not true, in my opinion I believe the same because you are so sure about something that you never stop for a second to think if you are wrong and in the case you was wrong you can fix that error as soon as possible.