Software Testing

  1. Software testing process
  2. Types and levels of testing
  3. Activities and roles in testing
  4. Testing environments
  5. Test Case Design techniques (open and closed views)
  6. Process for control and management of defects in artifacts

Software testing process

Is a process conducted for acquiring information about the quality of the software in hand. It should yield a perspective from the user side that can work as a path to understand how the product would behave in a real environment, and what undesired effects could occur. To put this in practice a component of the system must be executed to evaluate some properties of interest. And it could yield a result composed of one of the following:

  • meets the requirements that guided its design and development,
  • responds correctly to all kinds of inputs,
  • performs its functions within an acceptable time,
  • is sufficiently usable,
  • can be installed and run in its intended environments
  • achieves the general result its stakeholders desire.

Levels of testing

There are three main levels of testing:

Unit testing

Unit testing refers to tests that verify the functionality of a specific section of code, usually at the function level. In an object-oriented environment, this is usually at the class level, and the minimal unit tests include the constructors and destructors.

These types of tests are usually written by developers as they work on code, to ensure that the specific function is working as expected. One function might have multiple tests, to catch corner cases or other branches in the code. Unit testing alone cannot verify the functionality of a piece of software, but rather is used to ensure that the building blocks of the software work independently from each other.

Integration testing

Integration testing is any type of software testing that seeks to verify the interfaces between components against a software design. Software components may be integrated in an iterative way or all together . Normally the former is considered a better practice since it allows interface issues to be located more quickly and fixed.

System testing

System testing tests a completely integrated system to verify that the system meets its requirements. For example, a system test might involve testing a login interface, then creating and editing an entry, plus sending or printing results, followed by summary processing or deletion of entries, then logoff.

There is a fourth level that may be included by developers. This may be in the form of operational acceptance testing or be simple end-user (beta) testing, testing to ensure the software meets functional expectations. Based on the ISTQB Certified Test Foundation Level syllabus, test levels includes those four levels, and the fourth level is named acceptance testing. Tests are frequently grouped into one of these levels by where they are added in the software development process, or by the level of specificity of the test.

Acceptance testing

Commonly this level of Acceptance testing include the following four types:

  • User acceptance testing
  • Operational acceptance testing
  • Contractual and regulatory acceptance testing
  • Alpha and beta testing

Roles in testing


Responsible for:

  • Defining the testing activities
  • Test planning
  • Check the team has the necessary resources to perform the testing activities
  • Verify testing is going hand in hand with the development at all phases
  • Prepare the status report of testing activities
  • Interactions with customers
  • Updating the project manager about the status of testing activities

Test Engineer

Responsible for:

  • Understanding what needs to be tested
  • Decide how it is going to be tested
  • Inform the test lead about what resources will be required for the testing activities
  • Develop test cases and prioritize testing activities
  • Execute test cases and report defects, defining severity and priority for each defect
  • Carry out regression testing

Testing environments

  1. Setup of test server with support of needed applications
  2. Network setup
  3. Test PC setup for running the software product
  4. Provide bug reporting tools
  5. Create test data for testing environment

Test case design techniques

  • Boundary Value Analysis (BVA): based on testing at the boundaries between partitions.
  • Decision Table Based Testing: for every function, a table is created to list down all types of combinations of inputs and its respective outputs.
  • State Transition: the testing team provides both positive and negative input test values to evaluate the system behavior.
  • Error guessing: the test analysts use their experience to guess potential problematic parts of the application and write test cases to expose those errors.

Defect Management Process

A defect management cycle contains 6 stages:

  1. Discovery of defect
  2. Defect categorization
  3. Fixing of defect by developers
  4. Verification by testers
  5. Defect closure
  6. Defect reports

Pan, Jiantao (Spring 1999). “Software Testing”(coursework). Carnegie Mellon University. RetrievedNovember 21, 2017.

Software Review

(Peer Review and/or Code Inspection)

  1. Definition and characteristics of review
  2. Activities and roles for each review
  3. How to review the key work products: plans, requirements, design, and code

Software Review is systematic inspection of a software by one or more individuals who work together to find and resolve errors and defects in the software during the early stages of Software Development Life Cycle (SDLC). Software review is an essential part of Software Development Life Cycle (SDLC) that helps software engineers in validating the quality, functionality and other vital features and components of the software. It is a whole process that includes testing the software product and it makes sure that it meets the requirements stated by the client.

Usually performed manually, software review is used to verify various documents like requirements, system designs, codes, test plans and test cases.

Objectives of Software Review:
The objective of software review is:

  1. To improve the productivity of the development team.
  2. To make the testing process time and cost effective.
  3. To make the final software with fewer defects.
  4. To eliminate the inadequacies.

Process of Software Review:

Types of Software Reviews:
There are mainly 3 types of software reviews:

  1. Software Peer Review:
    Peer review is the process of assessing 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.
    Peer review is performed in order to examine or resolve the defects in the software, whose quality is also checked by other members of the team. Peer Review has following types:
    • (i) Code Review:
      Computer source code is examined in a systematic way.
    • (ii) Pair Programming:
      It is a code review where two developers develop code together at the same platform.
    • (iii) Walkthrough:
      Members of the development team is guided but author and other interested parties and the participants ask questions and make comments about defects.
    • (iv) Technical Review:
      A team of highly qualified individuals examines the software product for its client’s use and identifies technical defects from specifications and standards.
    • (v) Inspection:
      In inspection the reviewers follow a well-defined process to find defects.
  2. Software Management Review:
    Software Management Review evaluates the work status. In this section decisions regarding downstream activities are taken.
  3. Software Audit Review:
    Software Audit Review is a type of external review in which one or more critics, who are not a part of the development team, organize an independent inspection of the software product and its processes to assess their compliance with stated specifications and standards. This is done by managerial level people.

Advantages of Software Review:

  • Defects can be identified earlier stage of development (especially in formal review).
  • Earlier inspection also reduces the maintenance cost of software.
  • It can be used to train technical authors.
  • It can be used to remove process inadequacies that encourage defects.

GeeksForGeeks (2019). Software Engineering | Software Review. Retrieved from:

Models and Standards for Software Process Improvement

  1. CMMI
  2. TSP/PSP
  3. ISO-15504
  5. IDEAL method


Capability Maturity Model Integration (CMMI) is a model that helps organizations to improve their processes.

This model evaluates three specifics sections:

  • Process and service development.
  • Service establishment and management.
  • Product and service acquisition.

It has a behavioral model that can classify the organizations, so they identify different levels of maturity which indicates how an organization will act on different situations:

  • Initial
  • Managed
  • Defined
  • Quantitatively managed
  • Optimizing
  • Initial


PSP (Personal Software Process) and TSP (Team Software Process) are based on stablishing goals, concrete a plan, measure of work, however, PSP focuses on personal processes while TSP focuses on multiple individuals observed as a whole team work while using the same principles of PSP with additional steps.



It is the international standard known as Software Process Improvement Capability Determination. It is a tool with the objective of proposing and developing a model for the evaluation of software processes. It establishes the requirements for an evaluation of processes and the models of evaluation, spanning the areas of process improvement, capability, and maturity.

It is conformed by:

  1. Vocabulary and concepts
  2. Realization of an evaluation
  3. Conducting an evaluation
  4. Guide about the use for the improvement of the process and the determination of its capability
  5. An example of an evaluation model of processes in the life cycle of software
  6. An example of an evaluation of the life cycle of the system
  7. Evaluation of organizational maturity
  8. An example model of evaluation of processes for the management of IT services
  9. Profiles of objective process
  10. Security extension


It’s a model for the constant improvement and evaluation of development processes and system maintenance . It was developed by “Asociación Mexicana para la Calidad en Ingeniería de Software” with the collaboration of UNAM


  • Facilitates the compliance of other models
  • It’s simple to adopt
  • Low cost on implementation

This model focuses more in management and it has three categories:

  • High Management (Management of business)
  • Management (Management of processes, projects and resources)
  • Operation ( Management of specific projects and development and maintenance)

IDEAL method

An improvement model for the CMMI product suite, serving as a roadmap for initiating, planning, and implementing process improvement actions in this standard. It is named after the five phases required to perform a change initiative:


Lay the groundwork for a successful improvement. Current way of doing business needs to change, and the appropriate resources to do so are allocated.


Where you are vs where you want to be. Analysis to determine what are the current practices and highlight potential areas of improvement opportunities.


Plan how objectives will be reached. Recommendations of the analysis phase are prioritized, and plans are developed to conduct these activities.


Do the work that was established in the plan. Implement the designed activities.


Learn from the experience and improve. Collect lessons that can be applied to future rounds of the IDEAL life cycle.

Gerardo Salgado. (2017). MoProSoft: Un modelo para mejorar la calidad del software en México. 2020, November 1, Retrieved from:

Version Control

  1. Tools for version control
  2. Tools for testing
  3. Tools for process administration of V&V

Version control can be broken down to managing changes done to a product, monitoring the state at which a configuration is. This ‘process’ is used in the software development industry to develop a project in the best way possible, since any modification is easy to compare with previous code or edition.

Tools for version control


When you need a software to do everything mentioned above git should come to mind, a free software available on all platforms, capable of handling any project’s size and in any shape, multiple workflows and local branches. It also is open source and completely free!

Tools for testing


Selenium was designed as a software testing environment for web based apps, really easy to learn since it doesn’t require a scripting language for testing, thanks to its record/play feature. Developed in Java and also open source, seems like a good tool to try.

Tools for process administration of V&V


It is a software design tool for drawing process (DFD), data (ERD), class and screen models. These are the most popular models in structured analysis & design, information modeling, UML and user interface design.
It supports code generation, integrated code browsing, linked text specifications or foreign documents and data dictionary. Using WinTranslator to generate diagrams from source code.

  1. Data Flow Diagrams
  2. Data Models
  3. Class Diagrams
  4. Screen Models
  5. Data Dictionary

Collins-Sussman, Ben; Fitzpatrick, B.W. and Pilato, C.M. (2004). Version Control with Subversion. O’Reilly.

Verification and Validation of Software

Verification and Validation can be defined as the process of investigating that a software system satisfies specifications and standards and it fulfills the required purpose. Barry Boehm described verification and validation as the following:

Verification: Are we building the product right?
Validation: Are we building the right product?

Another way of saying this would be that verification involves analysis over the development process of the product and validation confirms this verification process was correct.

Verification is the process of verifying that a software achieves its objective without errors. It is the process to ensure whether the product that is developed is correct or not. Check if the developed product meets the requirements we have. Verification is a static test.

Activities involved in verification:

  1. Inspections
  2. Reviews
  3. Walkthroughs
  4. Desk-checking

Validation is the process of checking whether the software product is up to the mark or in other words product has high level requirements. It is the process of checking the validation of product i.e. it checks what we are developing is the right product. it is validation of actual and expected product.
Validation is the Dynamic Testing.

Activities involved in validation:

  1. Black box testing
  2. White box testing
  3. Unit testing
  4. Integration testing

An easy way to wrap this up is to clarify that validation comes after verification and that both processes are of equally importance.

Software Engineering | Verification and Validation. (2019, April 17). GeeksforGeeks.

Software Quality & clear code

Software quality can be directly linked to how easily it is to maintain it, being able to recognize what a certain part of the code does. This leads us to the importance of writing clear code, not necessarily clever code, just easy to the eyes of any one who reads it for any purpose.

Code should be easy to read

Why would you read another person’s code?

We have to work together as engineers, and collaborate on a piece of
software. Software engineering is the collaboration of software engineers over time.
This collaboration consists of everyone being capable of reading and understanding
your code.

Guiding principles

  • Clarity:
    Readability is line length and variable names, brace position, the hand to hand combat
    of style guides and code review guidelines that regulate the use of whitespace.
    Clarity, on the other hand, is the property of the code on the page, what exactly is
    written and what the code is going to do.
    Clarity is important because all software is written by people to be read by other
    people, being able to make code that can be easily understood by a person comes
    before making sure it can be understood by a machine.
  • Simplicity:
    Complexity is the opposite of simplicity, and it can be defined as not understanding a
    part of the code and how to fix it, just the fear of changing something and breaking the
    whole thing. Complexity turns reliable software into unreliable software, and this
    should be avoided, thus resulting in simplicity.
  • Productivity:
    How much time is spent doing useful work instead of waiting for tools or lost in a
    foreign code-base.


Recently we learned about APIs and some of the applications they have on modern day websites, apps and other devices and generally how useful they are.

Was really interesting to hear it from such a big fish in the area, Kin Lane knows so much about APIs that I have to admit I got lost at some point, you can clearly see that he is an expert on the subject and has worked on it for years.

About me

Some crucial information about me.

I’m a computer systems engineer college student on Tec de Monterrey, with a particular interest on videogame development, complex problem solving and user oriented software.

Currently working on my own software projects alongside my lifelong friend and colleague Eduardo M. which forces us to constantly learn new things and become more proficient on software developing.

My main hobbies consist of:

  • Sports; watching and playing football, playing tennis, watching F1 (former shifter racer myself) and playing chess
  • Playing videogames (most recently in a serious fashion rocket league)
  • Exercising and going out with friends (not as much this days)
  • Watching movies/series and reading books
  • Watching documentaries/informative videos on YouTube

I would describe myself as an honest and loyal person, that has a strict morality and expect the same from the people around me. I am a skeptical person and always try to get to the bottom of things, sometimes to the point of over analyzing. I like to constantly learn from others and like to share my knowledge to those who ask for it or my help to those who need it.