Swiss army for software

--Originally published at Blog Oliver

In this last section we will discuss some tools we can use to improve and have a better organization in different parts of software quality and testing. We will talk about tools for versioning controlling, which allow us to have control and see the differences between each version this way we can see who made specific changes and see what and who broke parts of the project. We will also talk about tools for testing and automatic tests for example validate specific parts of the project then uploading the changes to a version controlling tool. In the end we will discuss about some tools we can use for process and administration of V&V (Verification and validation)

Version controlling tool

Tools to administrate and keeping track of changes in the code or project

  • Git
    • Free
    • Open Source
    • Provides strong support for non-linear development.
    • Compatible with existing systems and protocols like HTTP, FTP, ssh.
    • Capable of efficiently handling small to large sized projects.
    • Cryptographic authentication of history.
    • Cross platform support
  • BitBucket
    • Has a free version
    • Not Open Source
    • Cross platform support
    • Git repository hosting
    • APIs
    • Clustering
    • Wiki
    • Issue tracking
  • CVS
    • Free
    • Open Source
    • Cross platform support
    • Allows good web browsing of the source code repository
    • Helpful support from vast CVS community
  • SVN
    • Free
    • Open Source
    • Client-server repository model. However, SVK permits SVN to have distributed branches.
    • Directories are versioned.
    • Copying, deleting, moving and renaming operations are also versioned.
    • Supports atomic commits.
  • Mercurial
    • Free
    • Open Source
    • High performance and scalability.
    • Advanced branching and merging capabilities.
    • Fully distributed collaborative development.
    • Decentralized

In my opinion git is one or the most used version controlling tool, it should be your standard choice, the most popular cloud hosting provider for git repositories is Github, which is a very important tool which is required in some jobs.


Positive for bad software (software testing)

--Originally published at Blog Oliver

Testing is a critical step of software creation and validation, this way we can validate the correct functionality and behavior of our projects. Imagine buying a calculator that doesn’t work how its suppose to for example, when you press the number one the calculator ads a two instead.

Testing process is divided into different steps, types and levels. First we are going to talk about the stages and parts of testing process.


This is the stage where we select the scope of the test and we manage the risks involved in these tests. We also select team leaders people in charge of different areas and all the material an assets available

2.Creation of scenarios

It is the stage where “expected” and “realized” outputs are prepared according to the content of the project to be tested. In this step is where the scenarios are written, for example what we expect to happen when certain input is used, or what should be the behavior of the project.

3.Preparation of test environment

This is the stage where prepare all de assets we need in order to run the tests, for example in most of the cases we will need a specific environment with specific characteristics in order to control or manipulate the behavior of the project according to our needs.

The project can be connected to this testing environment and when all tests are approved the project can go back to development or deployment environment

4.Run the scenarios

This is the stage where the tests are run. Test scenarios that have been written are applied in this step.

5.Reporting of result

It is the stage in which the situation that occurs after all specified scenarios are applied is communicated to the person concerned. The report should use

Continue reading "Positive for bad software (software testing)"

Review my software please

--Originally published at Blog Oliver

As always we will start defining what is software review and why is important. Software review is a systematic examination of a project made by one or more individuals to find, detect and make sure the platform or project is working as it should. Constantly reviewing the project in different areas give us the following advantages:

  • It improves the productivity of the development team.
  • Fewer defects are found in the final software, which helps reduce the cost of the whole process.
  • The reviews provided at this stage are found to be cost effective
  • As a matter of fact, this process results in dramatic reduction of time taken in producing a technically sound document.

Types of software review

Software Peer Review: Peer review is the process of evaluating the technical content and quality of the product and it is usually conducted by the author of the work product, along with some other developers.

Software Management Review: These reviews take place in the later stages by the management representatives. The objective of this type of review is to evaluate the work status.

Software Audit Reviews: Is a type of external review, where one or more auditors, who are not a part of the development team conduct an independent examination.

Characteristics of a good peer review

Time: Good reviews are made on time and respecting the deadlines, this way the author have the opportunity to make the right changes and choices.

Intention: Make reviews with a willing attitude sometimes more work and time is needed and can get difficult thats why maintaining a positive attitude and doing it with a good intention is important.

Guidelines and Scope: Before starting to review a project, reading the guidelines is important this way we can now the functionalities and aims of the

Continue reading "Review my software please"

How to know if my software is valid?

--Originally published at Blog Oliver

First of all lest define what is V&V (Verification and Validation) and why it is important. According to IEEE Standard Glossary of Software Engineering Terminology, V&V is defined as a process used to determine wether

  • Requirements for a system or component are complete and correct.
  • Products of each development phase fulfill the requirements or conditions imposed by the previous phase.
  • Final systems or components comply with specified requirement

In other words V&V helps us to know if our project satisfied all the specific requirements we set. The problem is that there are many perceptions of what V&V is and what is not, thats why V&V have so many different standards with different requirements and is one of the most difficult specialization you can follow in the area.

Example of V&V International Standards

P1012 – Standard for System, Software, and Hardware Verification and Validation by IEEE Computer Society – “This verification and validation (V&V) standard is a process standard that addresses all system, software, and hardware life cycle processes. This standard is compatible with all life cycle models”

IEEE 1012-2016/Cor 1-2017 – IEEE Standard for System, Software and Hardware by IEEE – “Verification and validation (V&V) processes are used to determine whether the development products of a given activity conform to the requirements of that activity and whether the product satisfies its intended use and user needs”

Steps of a project Validation

1. Create a validation plan: The first step in the validation process is to create a validation plan (VP) that identifies who, what, and where.

2. Define system requirements: defining what you expect the system to do

3. Create the validation protocol and test specifications: The test plan describes the objectives, scope, approach, risks, resources, and schedule of the software test.

4. Testing: Tests are executed based on the

Continue reading "How to know if my software is valid?"

Software review

--Originally published at Erick learning experience

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 Continue reading "Software review"

Tools for V&V

--Originally published at Erick learning experience

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:, 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

Continue reading "Tools for V&V"

My experience on testing

--Originally published at Erick learning experience

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

Continue reading "My experience on testing"

Models and Standards for Software (yes software)

--Originally published at Blog Oliver

In my last post I talked a little about the introduction of software quality and some basic concepts and descriptions. This time we will talk more about specific standards and models used in the industry.

CMMI (Capability Maturity Model Integration), is a model that describes the best practices for a company to improve their processes. It was created thanks to the fast increment of popularity in software development, in the beginning this process was only used in defense programs. The government financed a two year program where more than 200 hundred experts in the area gathered and created the most known model nowadays.

CMMI helps companies to have better communication inside the organization because everyone use the same language. It helps to improve clients satisfaction and companies can create more efficient projects with better quality. CMMI works with different maturity levels, each layer helps our project to achieve continuous improvement and better performance. According to the official CMMI web site the five maturity levels are the following:

Maturity Level 0: Incomplete
Maturity Level 1: Initial
Maturity Level 2: Managed
Maturity Level 3: Defined
Maturity Level 4: Quantitatively Managed
Maturity Level 5: Optimizing

Next we will talk about TSP/PSP which are a set of practices to allow software developers and programmers to administrate their time and be more efficient. Team Software Process (TSP) is a process that helps to create and improve team work, it allows teams to establish objectives, create plan works, give feedback of completed objective and finally delivered efficient, reliable and quality software. It focuses mainly in two primary aspects, creating a good team and managing this team in order to allow a better performance. PSP (Personal Software Process) is just the antecesor of TSP and it was more focused in improving the personal aspect of every developer, TSP is more team orientated as

Continue reading "Models and Standards for Software (yes software)"

Software quality 101

--Originally published at Blog Oliver

Quality standards are implemented or used in many areas for example in food chains, cloth or car industries, this allows different products or services to maintain certain qualities and specifications. Imagine you want to buy a car and you decide to buy the one you see in a specific exhibition, they will make another exactly the same just for you. The time has come and you go to see your new car but is not what you expected. The color is opaque, it feels slower and its not like the other even though you bought the same model, color and specifications. Thats why quality controls exist to ensure the standards and conditions that a product or service must meet in order to be delivered.

Diagram of software quality

Software industry is not the exception we must have strict regulations and standards of quality in order to develop the best software we can. Depending on the area it will be used it can cause severe damage or consequences. For example imagine a program used in a radiology device malfunctioning and exposing patients to more radiation than they should be. Or a problem in software used in air traffic control, leading to a crash. Now-days we depend on software to live our daily lives so its important to have a regulation to determine the characteristics and specifications software must have.

According to software quality focus mainly in the following 8 attributes:

  1. Functional suitability (Functional completeness)
  2. Reliability (Availability)
  3. Operability (Learnability)
  4. Performance efficiency (Resource use)
  5. Security (Integrity)
  6. Compatibility (Interoperability)
  7. Maintainability (Modularity)
  8. Transferability (Adaptability)

This 8 attributes focus on delivering a quality software with all the right specifications and standards. As we can see most of them involves more that just good coding or using the best programming practices, it also involves all

Continue reading "Software quality 101"