Software Testing

Software testing is one of the most important activities in the life cycle of any software, since with it we can detect easily if the software works or if it doesn’t. Software Testing is a process in which you perform evaluations of the software and the system to check if it follows the requirements, works as expected and is bug-free.

Types of Software Testing

To understand the way software testing works you need to know that there are many different types of testing and each one with its own subtypes. In this blog we will mainly talk about the software testing approaches and the software testing levels.

Software Testing Approaches

  • White Box Testing.- This type of testing is done by via looking at the structure of the code, you test the internal part of it, designing test cases for it.
  • Black Box Testing.– This type of testing is done mainly by looking at the inputs and outputs of the system or the program. You design test cases which only look at the input and the output, and see if the expected output matches the real output of the program.
  • Grey Box Testing.- In this type of testing you perform a mixture of Black box and a mixture of White Box testing, you choose tests that align with what you want out of the program.

Software Testing Levels

  • Unit Testing.- This level of testing is done via testing each module of the program as separate units, ensuring that each function and every unit of the application works correctly as expected by its own.
  • Integration Testing.- In this type of testing you check if the connections or transfer of data within the units works as expected.
  • System Testing.- In this type, you check the system as a whole, ensuring that the whole system works as is expected when all the units work together as one.
  • Acceptance Testing.- In this type of testing you mainly check if the system follows the requirements of the client. Checking if it has met the criteria for delivery.

You could also divide software testing into functional and non functional, where in one you test the functional requirements of the program and in the other you test the non functional ones.

Roles of Software Testing

  • QA Manager.- The one who manages the whole team related to testing, ensuring they are all working as a team and following the guidelines of the company and of the client.
  • QA Analyst.- The one whose main job is analyzing the results of the tests, looking for where the bugs are, what is happening, and the one who also designs the tests.
  • Tester.- The person whose in charge of testing the system using the test cases.
  • Other jobs.- Sometimes in software testing you get other roles like the one in charge of the automation of the tests or the one who tests the performance of the system.

Test Case Design

Since Test Cases are the base of testing, you need to ensure that they are good and are well designed. To do that there are different techniques which you can use to design them. These techniques are defined into 3 categories:

  • Designing test cases using the requirements specification and black box testing.- Examples: Use Case Testing, Decision Table Testing.
  • Designing test cases from the structure of the system or its components. Examples: Branch coverage, path coverage.
  • Designing test cases based on the tester’s experience or intuition. Examples: Error guessing, Exploratory Testing.

Testing Environments

One of the main ways to test is using a testing environment, which is an environment designed solely for testing before launching to the live server. It allows to deploy application and ensure it is bug free before pushing to the product.

Software Review

Software review is an essential part to maintain software quality. Before, the processes, standards and models for assuring software quality were presented, but now, it is time to delve into the actual tasks for verification and validation. Starting with the title of this blog post. As always, the definiton of the topic will be needed in order to continue. Software Review can be defined as:

“It is a systematic inspection of code in order to find errors, enhance the product, and to validate its vital features and components”

This serves the purpose of checking if the software is meeting its requirements, and to adjust development accordingly. There are many benefits that come with applying software reviews to all the stages of the Software Development Life Cycle (SDLC), including the necessary software quality, reduction in the time of production and making testing time & cost effective.

There are three main types of software review, that have different roles and are applied in different stages of the SDLC.

Software Peer Review

These reviews are done by the creator of the code, along with other developers. This helps to check the quality of the software, to find defects and solve then. It is the most basic model of review, and that is why is the most used one. There many types of software peer review.

  • Code Review: a systematic evaluation of the code structure is done, against software standards and procedures.
  • Pair Programming: two or more developers work together, and review each other’s code.
  • Informal: a review that is conducted without the need of a large group or the documentation.
  • Walkthrough: this is a well structured review conducted by a lead team member, usually from the quality assurance department. It is done to detect errors in the code. There are diffetent roles in this review:
    • Author: the creator of the code, acts as an observer and answers questions
    • Presenter: is the one that presents the product, and usually develops the agenda.
    • Moderator: the one that in charge of making everyone follow the agenda, and encourages participation from reviewers.
    • Reviewers: they evaluate the work, to make sure that the standards and guidelines are followed, the requirements are met, and the product is on the right track.
    • Scribe: in charge of taking notes, record the detected errors, comments, suggestions, and unsolved questions.
  • Technical Review: a team of qualified personnels examine the software.
  • Inspection: a formal type of peer review, where defined processes are used in order to review the code.
Software Management Review

This review is applied at the later stages of the development by the management representatives. This is to check the work status, and it is done in order to decide the next major steps of the project.

Software Audit Reviews

It is an external review , where auditors that are not part of the development team do an examinatio of the code. This is done by managerial level people.

Process of Software Review

The IEEE defined a standard for the steps that are required in order to create a complete software review process:

  • Entry Evaluation: a check-list by entry criteria tha ensures that all conditions are met to have a successful review.
  • Management Preparation: a management representative checks that the software review has all the required resources.
  • Review Planning: an objective is set, and the team of resources is formed based on it.
  • Preparation: the reviewrs prepare the reviewing tasks.
  • Examination nad Exit Evaluation: the evaluation is done, and reviewers share their results, and verify that all review tasks are done.
Review Key Products

There are important parts of the software development process that should be evaluated: plans, requirements, design, and code. For these for key work products exist different standards that can be applied to each one of them. Although eviews can be distributed diffetently for each key product:

Key ProductPeer to Peer ReviewWalkthrough ReviewInspection ReviewManagement Review
Plans✔✔✔✔
Requirements✔✔
Code✔
Design✔✔
References

Software Review. (2020). Software Review. ProfessionalQA. Retrieved from https://professionalqa.com/software-review

Melo, W., Shull, F., Travassos, G. (2001). Software Review Guidelines. Coppe/UFRJ. Retrieved from https://www.cos.ufrj.br/uploadfile/es55601.pdf

LalSingh, A. (2009). Guidelines to review Work Products. Rass Tools Limited. Retrieved from https://es.slideshare.net/AshokKumar1213/guidelines-to-review-work-products

Verificación y Validación de Software

En la gestión de proyectos de software , las pruebas de software y la ingeniería de software , la verificación y validación ( V&V ) es el proceso de comprobar que un sistema de software cumple con las especificaciones y cumple con su propósito previsto.

También puede denominarse control de calidad del software . Normalmente es responsabilidad de los probadores de software como parte del ciclo de vida del desarrollo de software .

En términos simples, la verificación del software es: “Suponiendo que deberíamos construir X, ¿nuestro software logra sus objetivos sin errores ni lagunas?” Por otro lado, la validación del software es: “¿Era X lo que deberíamos haber construido? ¿X cumple con los requisitos de alto nivel?”

ISO / IEC / IEEE 12207 Ingeniería de software y sistemas: los procesos del ciclo de vida del software es un estándar internacional para los procesos del ciclo de vida del software.

Introducido por primera vez en 1995, pretende ser un estándar primario que define todos los procesos necesarios para desarrollar y mantener sistemas de software, incluidos los resultados y / o actividades de cada proceso.

Les comparto igual un ejemplo de un documento para la planeación de un V&V plan este esqueleto lo pueden encontrar en internet es de uso libre.

Software Review

And for our last topic of this partial we haaaaave… sooftware review!!! *claps*

  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 an important part of the software life cycle, assisting engineers in validating quality, functionality and other vital features and components in the sofware. It can be seen as a systematic examination of a document by one or more individuals who try and find any mistakes in it, specially during the early stages of this cycle, some examples of this documents are “test plans” or “test cases”.

We can pinpoint the main objective of software review and it’s characteristics by understanding what is the purpose or the objectives of using this process:

  1. Improve the productivity of the development team.
  2. Make the testing process time and cost effective.
  3. Finish our product with as few defects as possible, reaching the definition listed in our requirements as close as we can.
  4. Eliminate inadequacies, garbage code and anything which is not listed as a requirement

Productivy guys!!!

Finally, we can say there are 3 main types of software reviews:

Software Peer Review:

Focuses on the process of assessing the technical content and quality of the product, conducted by the author of the work product along with some other developers.

Software Management Review:

Software Management Review evaluates the work status. In this section decisions regarding downstream activities are taken.

Software Audit Review:

It’s a type of external review in which one or more critics, not 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.

As for the processes and activities we usually have in software review:

  1. Entry Evaluation:A standard check-list is used by entry criteria in order to ensure an ideal condition for a successful review.
  2. Management Preparation:During this stage of the process, a responsible management ensures that the software review has all the required resources, which includes things like staff, time, materials, and tools.
  3. Review Planning:To undergo a software review, an objective is identified. Based on the objective, a recognized team of resources is formed.
  4. Preparation:The reviewers are held responsible for preparing group examination to do the reviewing task.
  5. Examination and Exit Evaluation:In the end, the result made by each reviewer is combined all together. Before the review is finalized, verification of all activities is done that are considered necessary for an efficacious software review.

How to get that little blue check mark on your site or profile… I mean, validating and verifying software (V&V)

As always, let’s get to what we’re gonna be talking about in this post first:

  1. V&V in the life cycle of software development
  2. International standards for V&V of Software
  3. Planning V&V
  4. Administration of a V&V Plan

Before everything, we shall ask our main questions.

What is verification and validation?

Just by hearing those two words, we can get a pretty basic definition, which would be verification: checking that something completes all the requirements it needs and validation: the process that we follow to verificate a product, thing or whatever you could think.

When talking about the life cycle in software, validation and verification is a step used during almost the whole process of development, so we’ll see in the following table what happens in each one, very briefly:

PhasesValidationVerification
RequirementsValidate requirements along with the client to ensure proper understanding of what’s going to be done.Verifying that all requierements are unique and doable.
Architecture and DesignAll types of design that might end up being used have to be validated with the costumer, as to meet their expectations.We verify that all designs are meeting the non-functional requirements (like performance or usability)
ImplementationFor each requirement done, we have to validate with the client if that’s what they wanted.When doing unit and integration tests, or while having peer review.
TestingCheck that all functionality meets the client expectations and that all messages are clear.All test cases need to pass this part, as to ensure that everything is working as intended.
DeploymentAll software after installation should be working as intented.Configuring environment and running smoke tests.

As to international standards, ISO has always been there to mantain a certain level needed for validating different things, including software. As to what I could say about this, is simply that by having a certain level required for stuff to be valid and verified by certain organisms, we can mantain a same procedure for developing new stuff, such as software, I’ll also leave this article here so that people can indulge in really technical stuff if they feel like it, because I dont feel like it.

https://dqs-cfs.com/2019/10/verification-and-validation-why-the-new-standard-iso-iec-17029-matters/

Planning and administrating V&V, the real challenge

For this, we have a term that already exists and depicts pretty well what was to be done. Verification and Validations Plans. This pretty much works by going hand with hand on your normal software life cycle, but implementing everything that’s needed to make a V&V correctly:

  • Explaining the test and objective of the project.
  • Define what items you’re gonna be testing, using the required documentation.
  • What features need to be tested? Along with all the data you’ll need.
  • What DOESN’T need to be tested? This should be a small list, and you can include items that need too much time and effort to be properly tested at earlier phases.
  • How is your testing team gonna approach the requirements? By defining a pass/fail criteria, you can prevent later confusion on how to validate and verificate diverse stuff.
  • An approach for handling any mistakes and errors that could stop your testing, otherwise you’ll lose time on making all test cases needed, with their design specification and procedures.
  • Environmental needs (I think this one pretty much speaks for itself? Please don’t run some software on a all mighty computer that your client does NOT have).
  • Approval from the client for all requirements.
  • Operation and maintenance in case a step was missed or something went wrong.
  • An open space of possible upgrades or replacement.

So, this was it for Validation and Verification, if you have anything to share, like experiences, knowledge on the topic, or just a plain comment on how you dislike my blog, please share in the comments so that other people can also enjoy a different perspective!

Calidad de Software (Software Quality)

Al paso del tiempo en este mundo del Software podemos ver que empezamos programando un simple Hola Mundo!, de ahí pasamos a las variables, ciclos, y paso a paso hemos subido a cosas mas complicadas con el paso del tiempo, por lo que las cosas o elementos que tenemos que tener a consideración ha ido en aumento. Es por ello que hoy vengo a escribirles un poco acerca de la Calidad de Software.

Best quality concept. Quality control switch knob on maximum position. 3d illustration

¿Que es la calidad de Software?

En pocas palabras la Calidad de Software es el campo de estudio y practica que describe los atributos deseados o esperados del producto que se esta construyendo. Hay 2 panoramas que podemos observar: El manejo de defectos y la calidad de los atributos.

El manejo de los defectos

Un defecto del software puede ser identificado como la falla de no abordar los requisitos del usuario final.

Los defectos que podemos observar aquí incluye desde los requerimientos que se perdieron o los mal entendidos que se tiene con estos, un error de diseño, lógico, de datos, tiempo de procesamiento, validaciones o simplemente errores de código.

El manejo de los defectos es basado en el conteo y administración de los errores, estos errores comúnmente se dividen en severidad, por lo que esto nos sirve para darles un numero y así usarlos para la planificación. En un nivel más avanzado se usan herramientas para el manejo de estos, como la implementan de fases de detección, tablas de control o la capacidad de procesamiento.

Calidad de los atributos

Este enfoque de la calidad del software se ejemplifica mejor con modelos de calidad fija, como ISO / IEC 25010: 2011. Esta norma describe una jerarquía de ocho características de calidad, cada una compuesta de subcaracterísticas:

Asegurar la calidad del Software

Asegurar la calidad de software se confunde a menudo con la calidad del proceso con la calidad del producto, lo que conlleva a tener falsas expectativas a momento de desarrollar el software, de hecho muchas empresas hoy en día no tienen una organización o mentalidad de calidad del producto.

Un plan estrategico que deberian de establecer para el control de la calidad de manera atuomatizada:

Producto vs Proyecto.
Calidad de Proceso, Producto y Servicio.
Proceso del SQAP y la familia Squire.
Continuous Integration.
Grupo de QA: Certificación de Productos.
Continuous Delivery: time to market.

Who even needs models and standards for software processes? Ah, that’s right… us.

So, here we are again! This time to talk about a one teensy weensy but ever so crucial little tiny detail in software processes! Models and standards.

(have a cookie if you got the reference in that small paragraph before seeing the image)

These are the following topics i’ll try to cover in this blog:

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

CMMI

Capability Maturity Model Integration (CMMI), is a processes model that helps an organization promote their members so that they can have a better performance. The questions this model ask are related to how good we work, our improvement and if our processes are as good as they should be and working as necessary, so we can call this model a book of ‘whats’ and ‘hows’, giving us a hint on what to work in.

TSP/PSP

Whenever we talk about time management, personal improvement on programmers, and guidance on organizations that use a CMMI model, then we’re either talking about PSP/TSP practices, or you’re somehow in an alternate universe where things are incredibly wrong.

something just doesn't add up - pondering retard | Meme Generator

PSP concentrates in work practices in a more individual manner, so that we can organize our day through day activities and handle product quality. This practice can be carried with a team, called the TSP (Team Process Software), which is in turn commanded by a gestion system, and of course, a team leader that evaluates the individual progress of each member of the team.

TSP, is insted, a method of stablishing teamwork and improving it, using two basic components:

  • Work team formation
  • Work team gestion

The major problems that are solved with this, are predicting time and cost in business, lack in productivity, and software development and cycles, along with product quality.

YAY TEAMWORK! - Yay Teamwork! | Meme Generator

ISO-15504

This new norm presents us the following objectives:

  • It’s necessary to propose and develop an evaluation stand in software processes.
  • Evaluate progress using experimentation.
  • Promote the evaluation techonlogy to a global state.

This specific standard evaluates software life cycles and requisites and evaluating each one of the evaluation steps in the ISO standard 15288.

MOPROSOFT

MOPROSOFT (in spanish, Modelo de Procesos para la Industria del Software de México) is a model for the development and maintenance of software, focused on the processes of a basic structure company, taking in mind three organization levels: High Direction, Gerency and Operation, looking to standarize all of what they do, both in effectivity and integrity.

I.D.E.A.L.

Initiating, Diagnosing, Establishing, Acting & Learning, this model serves as a roadmap to initiate, plan, and implementation of process improvement actions. As we can see, this has five main “steps”:

  • Initiating: Initiate the change, lay the groundwork for the changes that WILL happen in the next phases.
  • Diagnosing: Where are we? Was this the place we wanted to be at this point? Analysing in this phase is essential.
  • Establishimg: Plan what you’re gonna do, how are you gonna reach your goal? Prioritize tasks, change implementation and establish the teams.
  • Acting: Do what you planned, nothing more to say for this one.
  • Learning: Learn from the mistakes you made, improve and adapt new techniques for the future, so that the next IDEAL cycle will be better.
IDEAL Cycle — Initiating, Diagnosing, Establishing, Acting & Learning

And that’s all models we’re gonna see today, hope you enjoyed and learn something new (for I surely did), and if you care to answer, which one do you think is better? Or should all of them be implemented somehow? I wanna know!

Software Quality

Time to start with an actual mastery topic! So, in the following blogs, there are basically four sub-topics to follow:

  • Defining Software Quality
  • Focus on process
  • Ensuring Software Quality
  • The role of standards in Software Quality

What is software quality?

By definition, it’s the field of study and practice that describes the desirable aspects of software products. What do we mean by this? We can put it down as the part of software development dedicated to improving and designing all software products, trying to establish the minimum of what’s required in it.

Software Quality Assurance (SQA) ensures how we handle the quality in the processes of a software product, establishing and evaluating all of these in a “process-focused action”, so that in the end, we end up having a product completely functional, with the basic minimum quality being accomplished in all cases, and a happy user in most cases.

The challenge in ensuring quality

In this industry, even if we test an infinite amount of times, against all possible errors that we can think of, we developers can never actually declare that our software is free of defects, unlike how our counterpart, the product manufactures, can. We have some reasons as to why this happens:

Complexity, this one pretty much talks about how many possible paths we have when designing our software, if we first click this, and then that? If I use this button and then go back to click this other one? Imagine this but with a complete application that has many sections. Visibility, this one is pretty clear, manufacturers can see in their products if maybe there’s a splint in one side, or this one part isn’t reinforced enough, us, on the other side, we can’t physically see what’s wrong with what we’re doing, so we have a lot more troubles detecting errors.

Why do we have quality standards?

What happens when we need to work with people that have had a completely different way of learning development and work than we did? How are we supposed to keep a straight line of work to organize our software product and meet all standards that we know along those that the other person knows? That’s right, quality standards. By having a general rule and approach to how something should be built, we can establish a base for everyone to work in.


Blog introduction

Hiya there! If you’re reading this, either you somehow got into this page by clicking in some weird place, or for some unknown reason you actually want to read what I’m writing in here. So, whatever the reason, welcome!.

So, might as well write some small introduction in here so you can at least know who I am. My name is Daniel Rubio, 20 years old (21 in a week, yay!), software engineer student in the ‘marvelous’ school that is Tec de Monterrey, here in Guadalajara. I’ll list a couple thing I like since that should help me go a little bit in depth about each of them:

  • Reading. One of the things I completely love to do. In this aspect I do have to clear a prejudice that a lot of people have, and that is that I only like to read the genders I enjoy, meaning that no, I’m not an expert in all themes or cultural stuff. For me, reading is about inmersing yourself in a whole new world (Aladdin vibes? anyone?), imagining yourself in the current place the characters are right now, feeling like you’re right next to them in whatever they’re doing, grieving for characters that have been with you throughout the entire book, but were killed just a couple pages ago. As you can maybe imagine now, my favorite gender for novels is science fiction, so I’mma throw a few recommendations for you to maybe read one of these days if you feel like it.
  • – Insignia (by S.J. Kincaid) – 3 books series
  • The Secrets of the Immortal Nicholas Flamel (by Michael Scott) – 6 books series
  • – Tunnels (Roderick Gordon and Brian Williams) – 6 books series. This one is a small hidden gem, slightly slow start for the first book but it has an amazing concept.
  • – Percy Jackson books (Rick Riordan) – 15 books, divided in 3 series of 5 books each. This might seem like a BIG amount of books, but believe me, they are completely worth it, you can learn a lot of mythology stuff, have a good time and enjoy a lengthy plot.
  • If you ever read one of these because of this blog, tell me how you liked them! I always enjoy talking about books i’ve read before.

  • Team sports. This is kind of general, and it doesn’t include all team sports, but I can safely say that I enjoy a lot of them, included amongst those are soccer, basketball, handball and water polo. I also enjoy some other individual stuff, but that’s mostly for the times I don’t have the time to spend some time with friends doing the other ones.
  • Videogames. This shouldn’t be all the way down here, since it’s pretty much one of my main things, but welp, I don’t really care. For this, I’m not sure how to go on detail, but I can say that my favorite genders are rpg’s, mmo’s, survival and adventure games, and sandbox, that’s not to say that I dont enjoy other gender’s, but I’m always gonna try a game if it’s in that list. I’ll throw a few personal favorites so you can try them out and tell me if you liked them!
    – Borderlands franchise (1 to 3, also try the telltale one).
    – Subnautica, survival game in the ocean, reaaaally scary but it’s amazing!

    – Modded minecraft (have you ever built a completely automated system that can create whatever item you want? It takes a lot of thinking and designing, even some small knowledge of networks! it’s amazing)

    – Albion Online, mmorpg, sandbox style that lets you do anything you want, you’ll need a guild to play the game to the fullest, tho.
    – Terraria, kind of the step-brother of minecraft, but on a more adventure-like environment.
    PERSONAL FAVORITE, Kingdom Hearts (there’s a lot of games in here, all part of the story), this one personally had me ever since I was a child, combining Disney and Final Fantasy characters doesn’t sound like a good idea, but believe me, it was a complete success. I mean, just look at how epic this looks!

    – Dark Souls, hard but incredibly enjoyable.
    – Dont starve together, another survival.
    – ARK survival evolved, once again, another survival, in a dinosaur island.
    – Final Fantasy XIII (there’s the normal one, part 2, and part 3), all three games really good, it’s an rpg.

    I could keep going, but I’ll just stick with those.
  • Programming. I guess this one comes a bit with the job of being a software engineering, but I mean, there IS some people that work in this industry and don’t like to do it, so there’s that. I still don’t have a lead on what I want to end up doing, but the only thing I can safely say I dislike, is web development, nope, nope and more nopes, that is not for me, i’d rather make some nice project making some sort of app or tool that helps you with something, like the car agency management that I did in Java, my videogame done in Unity with C#, a mobile app with Java and Android Studio (so far, I think the most complex project I’ve done), and some other smallish project done mostly with Java and a few tools like apex from oracle, and cisco packet tracer.

I’m kind of extending this a bit too long, so just to end it, I’ll add that I’m always happy to meet new people, so don’t hesitate to ever contact me, whatever the reason. Cheers!