Tools for V&V

Tools for Version Control

Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later.

Local Control System:

Many people’s version-control method of choice is to copy files into another directory. This is very common because it is so simple, but it is also incredibly error prone. It is easy to forget which directory you’re in and accidentally write to the wrong file or copy over files you don’t mean to.

Centralized Version Control Systems:

These systems have a single server that contains all the versioned files, and a number of clients that check out files from that central place.

Git:

  • Provides strong support for non-linear development.
  • Distributed repository model.
  • Compatible with existing systems and protocols like HTTP, FTP, ssh.
  • Capable of efficiently handling small to large sized projects.
  • Pluggable merge strategies.
  • Toolkit-based design.

CVS:

  • Client-server repository model.
  • Multiple developers might work on the same project parallelly.
  • Keeps a historical snapshot of the project.
  • ‘Update’ command to keep local copies up to date.
  • Can uphold different branches of a project.

Tools for Testing

HPE Unified Functional Testing

 HPE Unified Functional Testing offers testing automation for functional and regression testing for software applications, and offers various features like:

  • Integration with Mercury 
  • Error handling mechanism
  • Creation of parameters for objects, checkpoints, and data-driven tables

Selenium

Selenium is a testing framework to perform web application testing across various browsers and platforms like Windows, Mac, and Linux. Selenium helps the testers to write tests in various programming languages like Java, PHP, C#, Python, Groovy, Ruby, and Perl.

Tools for process administration of V&V

Notion:

A very innovative tool that serves as a all-in-one workspace. It supports many features, for productivity, design, and of course, task management. An alternative to Jira, and great for managing the status of processes. It also supports markdown.

Jira:

Jira is a great software management tool that is widely used in many companies. It is very robust and offers many features that help the management of tasks and processes, and it can be integrated with other tools.

Software Testing

Software Testing is the process of evaluating and verifying that a software product or application does what it is supposed to do. The benefits of testing include preventing bugs, reducing development costs and improving performance.

There are four main levels of testing:

  • Unit Testing: Validating that each software unit performs as expected. A unit is the smallest testable component of an application. In an object-oriented environment, this is usually at the class level, and the minimal unit tests include the constructors and destructors.
  • Integration Testing: Ensuring that software components or functions operate 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.
  • Acceptance Testing: This includes one of the next types:
    • User acceptance testing
    • Operational acceptance testing
    • Contractual and regulatory acceptance testing
    • Alpha and beta testing

While we are testing software, we have to assume different roles, so the job can be done correctly:

  • Manager: The manager is the responsible of defining the testing activities, check the team has the necessary resources to perform the testing activities, prepare the status report of testing activities, interact with clients.
  • Test Engineer: The test engineer has to understand what needs to be tested. Also, he decides the way it is tested, informs the test leader about what resources will be required for the testing activities, and many more.

Testing Environments:

  • Setup of test server with support of needed applications
  • Network setup
  • Test PC setup for running the software product
  • Provide bug reporting tools
  • Create test data for testing environment

To test the software, there are different techniques, here I write some of them:

  • Boundary Value Analysis (BVA)
  • Decision Table Based Testing
  • State Transition
  • Error guessing

Software Review

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 software. Software review consists of testing the product and making sure that it meets the requirements stated by the client.

Some important points about software review:

  • Improves the productivity
  • It’s more effective
  • Plans time and costs
  • Eliminate bugs and garbage in the code

There exist three types of software review:

  • 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 Manager 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.

Software review is a very important part of SDLC, it 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.

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

  • Entry Evaluation
  • Management Preparation
  • Review Planning
  • Preparation
  • Examination and Exit Evaluation

Verification and Validation of Software (V&V)

In Software Development, the terms verification and validation are used very often. We use these concepts almost every day while we are working in some project. The thing is, that they have different meanings and many people think that this is a synonym. Let’s define each:

  • Verification: The evaluation of whether or not a product, service, or system complies with a regulation, requirement, specification, or imposed condition. It is often an internal process. Contrast with validation. Simply “Are we building the system right? Concerned with the team for the customer”
  • Validation: The assurance that a product, service, or system meets the needs of the customer and other identified stakeholders. It often involves acceptance and suitability with external customers. Contrast with verification. Simply “Are we building the right system? Concerned with the customer”

How is it used in SDLC phases:

PhaseVerificationValidation
Requirements ElicitationThe analyst should verify that each requirement is unique and it has a purpose and origin, as well he/she verify that the requirements are doable, in scope, and testable.The analyst should validate the requirements with the customer to better understand them through different analysis techniques.
Architecture & DesignThe architect and software designer will verify that the software designs are meeting the non-functional requirements, for example, performance and usability.If the software has a UI, should be validated with the customer and the analyst to ensure meeting the customers’ requirements and their expectations.
Implementation (Coding)Similarly, during implementation and coding, the developers start doing unit and integration test for their code, and they may have peer review and static code analysis.During the implementation, the developers may find part of the requirements is not clear or incomplete, they may need to validate that with the customer.
TestingIn this phase, testing and quality team should test the requirements and ensure that all test cases have been passed, all functionalities are working fine and there is enough and acceptable code coverage.The testing team should ensure that the software meets the business requirements and is fit for use by building the user acceptance test cases and validate it with the customers.
DeploymentAuditing of installation and configuration of the environment, run smoke tests to ensure everything is working fine with each release.Making sure that the software is working after installation and configuration.
Operational SupportVerify that the software is up without downtime, there are no data issues and logs are clear.Validating that the software operation is smooth. There are no logical errors or something is broken, evaluate the changes and new requirements.

International Standard For V&V Regulations

ISO 9001 Quality management systems – Requirements requires verification and validation to be planned and carried out and records kept.

IEEE 1012 – Standard for Software Verification and Validation provides a comprehensive how-to for software V&V planning and execution.

Planning V&V

This action includes the commencement, arrangement of reaction, contract, arranging, execution and control, survey and assessment, and conveyance and finish exercises, honesty levels, and so on.

The role of standards in Software Quality

The role of standards in Software Quality

CMMI

This was created for the U.S. Department of Defense to assess the quality of their softwares. CMMI is not used only for software, but also in other companies.

It is based in three areas:

  • Proccess development
  • Service establishment and managment
  • Product and service acquisition

These are the levels of the CMMI:

TSP/PSP

This model is a complement to the CMMI. The PSP model is oriented to work yourself, then the TSP is made to work and improve for teams,and the CMMI is Organizational.

This is very nice because first of all you need to know how to work alone, and then you can learn to work in teams.

ISO-15504

This model establishes requirements for an evaluation of process. Any requirements can be applied to evaluations models, so this can be applied to any product, not just softwares.

This model contains a reference that defines a process and capability dimension and can be divided in five categories:

  • Customer-supplies
  • Engineering
  • Supporting
  • Management
  • Organization

This model is the most «formal», because it is approved and applied by many organizations. Also, it is the most «complicated» model, so this guarantees that the product will be very well qualified.

MOPROSOFT

It is a process reference model developed in Mexico, this standard is composed of four parts:

  • Part 01 Concepts and products definition
  • Part 02 Process requirements (MoProSoft)
  • Part 03 Process implementation guidelines
  • Part 04 Evaluation principles (EvalProSoft)

The MoProSoft process model consists of three layers or categories:

  • High Management: contains the Business Management process.
  • Management: composed of the Process Management, Projects Management and Resources Management processes.
  • Operation: includes the Specific Project Management process (SPM), Software Development and Maintenance process (SDM).

IDEAL method

The IDEAL model is named for the five phases an organization runs through in performing a change initiative: Initiating, Diagnosing, Establishing, Acting, Learning.

It’s an organizational improvement model which serves as a kind of roadmap for initiating, planning, and implementing process improvement actions for defect reductions.

This model is similar to the waterfall method, you first detect your problems, then you prepare a plan of action and then you follow it.

Software Quality

SOFTWARE QUALITY

When we are developing an app, it is very important that we make sure it works as we want. We must check that every one of our requirements is correct. For this, we use the Software Quality.

When we talk about software quality we refer to similar concepts:

Software Quality Atrributes Aproach

Focus on Process

Software Quality focus on the whole process of software development, this as its name says, ensure the quality of the whole process. Software development is done by different stages, thats way in order to achieve quality, you need to ensure that in the processes of a software product every step is done careful and target to satisfy the customers requirements.

Ensuring Software Quality

Making sure everything in the project works in an excellent way is hard to get. That’s why there exist many methodologies that help us to be sure our work is doing perfect.

The Quality Assurance

This method implements a systematic plan of all actions needed to provide adequate confidence that an item or product conforms to establish technical requirements:

  • Plan:
    • Plan and establish the process related objectives and determine the processes that are required to deliver the product.
  • Do
    • Development and testing of Processes and also “do” changes in the processes
  • Check
    • Monitoring of processes, modify the processes, and check whether it meets the predetermined objectives
  • Act
    • Implement actions that are necessary to achieve improvements in the processes

The role of standards in Software Quality

One way of measuring software quality is precisely through standards, for example we have the Software ISO standard. The standards are a way to define how are we going to be working or on what we need to focus. It is a process that assures that all software engineering processes, methods, activities and work items are monitored and comply against the defined standards, and they are approved by some organisation.

Welcome To my blog

This blog is for my Software Quality and Testing class. My name is Luis Eduardo Núñez Altamirano and I am studying Computer Systems Engineering at Tecnológico de Monterrey in Guadalajara, Mexico.

I will be posting and updating new content and every time will be a different topic, according to what we see in the class, but all related to the Testing and check the Quality of softwares.

Topics:

  • Software Quality
    • Defining Software Quality
    • A focus on process
    • Ensuring Software Quality
    • The role of standards in Software Quality
  • Models and Standards for Software Process Improvement
    • CMMI
    • TSP/PSP
    • ISO-15504
    • MOPROSOFT
    • IDEAL method
  • Verification and Validation of Software (V&V)
    • V&V in the life cycle of software development
    • International standards for V&V of Software
    • Planning V&V
    • Administration of a V&V Plan
  • Software Review
    • Definition and characteristics of review
    • Activities and roles for each review
    • How to review the key work products: plans, requirements, design, and code
  • Software Testing
    • Software testing process
    • Types and levels of testing
    • Activities and roles in testing
    • Testing environments
    • Test Case Design techniques (open and closed views)
    • Process for control and management of defects in artifacts
  • Tools for V&V
    • Tools for version control
    • Tools for testing
    • Tools for process administration of V&V

I hope I learn a lot of things along this semester. Thanks for reading.

El fin ha llegado

Hemos llegado al final de este curso TC2004-Análisis y modelación de sistemas de software, y puedo decir que ha sido una clase muy diferente al resto pero que sin duda me llevo muchísimos conocimientos y aprendizajes.

Este ha sido el primer blog que he tenido, y sinceramente yo al principio pensé que iba a ser algo muy aburrido tener que escribir cada semana, sin embargo no fue así. Ha sido una herramienta muy útil que nos permite expresar nuestras ideas y nuestros conocimientos, nos permite dar a conocer nuestros puntos de vista sobre algún tema y al ser público permite que otras personas lo lean y estén conociendo nuevo contenido.

Sin duda esta ha sido una herramienta que sin duda seguiré utilizando para el futuro, para otras materias, por hobby o incluso para el trabajo.

Después del primer y segundo parcial se hacían reflexiones sobre lo aprendido en ese tiempo, sin embargo, después de la segunda reflexión aún vimos tres temas que abordaré rápidamente aquí.

Revisión de código

La revisión de código es uno de los temas más importantes que hay para realizar un proyecto, es algo que puede parecer muy sencillo pero en realidad es una tarea sumamente importante y a la que se le tiene que dedicar tiempo y debe ser realizada por expertos.

Existen varias técnicas para llevar a cabo este proceso, pero las más importantes y las más utilizadas son:

  • Formal Code Review (FCD)
  • Lightweight Code Review
    • Pair programming
    • Over the shoulder inspection
    • Email pass-around inspection
    • Tool-assisted code review

Verificación y validación

La verificación y validación son dos conceptos muy similares y ambos sumamente importantes de entender. Cuando se habla de verificación se refiere a probar que el proyecto está cumpliendo con los requerimientos que el cliente ha especificado, se realiza mientras se está desarrollando. La validación, se refiere a comprobar que el software cumple con las expectativas que el cliente solicita, y se lleva a cabo una vez completado el proyecto.

Al igual que en la revisión de código, existen varias técnicas para realizar estos procesos, algunas de ellas son:

  • Verificación:
    • Revisiones
    • Juntas
    • Pláticas
    • Reuniones
  • Validación:
    • Testeo de cajas
    • Testeo de aceptación

Testing en Orientado a Objetos

Cuando hablamos de testing en oo estamos hablando de hacer pruebas pero en el paradigma orientado a objetos, parecido al tema anterior pero más específico. Se deben de realizar todas las pruebas necesarias para garantizar que ya es un programa listo para entregar.

Testing en OO

Hay tres diferentes etapas para realizar las pruebas, al ser este paradigma de objetos, se pueden llevar a cabo las pruebas de manera individual o de todo el sistema:

  • Testing de unidad
  • Testing de subsistema
  • Testing de sistema

Pasados estos filtros, se garantiza que el programa ya no tiene errores y está listo para ser entregado al cliente.

Ahora, después de revisar estos temas, yo puedo concluir que en este semestre aprendí todo lo que hay detrás de desarrollar un software. Normalmente lo primero que hacemos es correr a nuestras computadoras para empezar a escribir código, pero es necesario tener toda la parte de diseño previo y todas las partes que vienen después que son las pruebas.

La parte de autoaprendizaje me gustó, ya que es una metodología diferente a la que estamos acostumbrados a tener, en donde el profesor explica todos los temas en el salón. Esto nos incita a la investigación y a buscar información real que nos ayuda a aprender y a explorar. Además, el profesor Ken Bauer siempre fue un gran guía y apoyo para nosotros.

Además, el proyecto me pareció muy interesante ya que fue un caso real, en el que trabajamos con el profesor Diego Ávalos, en el que nosotros tuvimos que desarrollar todo el proceso de diseño de un software, hacer entrevistas, definir los requerimientos, etc.

Este fue un muy buen semestre por todas mis materias en las que aprendí bastante, mis compañeros con los que me llevo muy bien y toca esperar con ánimos el que sigue.

Testing en OO

En estos tiempos uno de los paradigmas más utilizados es el orientado a objetos. Esto es debido a que es un paradigma relativamente moderno y que facilita la programación, ya que está diseñado para facilitar la creación y mantenimiento de los software. Así, cuando es necesario quitar o modificar algún elemento, puede hacerse el cambio único sin tener que desmantelar todo el código.

Como vimos en mi post anterior, una parte sumamente importante para el desarrollo de un proyecto es revisar que todo funciona cómo debe de ser. Se debe de probar que todo esté en orden y que está listo para ser un programa completo para entregar, así como para poder tener la documentación.

Como se habló en otro de mis post, existen una gran variedad de sistemas de modelación de software, y en este caso yo me enfocaré en el ya mencionado orientado a objetos, en especial en cómo deben de probarse y en qué casos.

  • Testing de unidad: Este se refiere a una verificación individual, es decir, probar que cada atributo esté de acuerdo a lo que dice la documentación, que los métodos funcionen correctamente, etc. Este es el nivel más bajo en el tema de las verificaciones.
  • Testing de subsistema: Se refiere a probar las distintas clases y módulos que hay en un subsistema. En este proceso es muy importante verificar las comunicaciones entre los diferentes subsistimos que hay y que todos funcionen con seguridad.
  • Testing de sistema: Este paso se refiere a probar ya todo el sistema completo. Hay que verificar que cumpla con los requerimientos y que no existan fallos en el producto final. Este paso es el más importante y el más tardado, por lo que es importante que se realice en equipos especializados para llevar a cabo esta tarea.

Al terminar estos tres pasos, debe ser una garantía que ya no existen errores. Por eso es que se prueba en diferentes filtros, desde aparte individual hasta la parte del sistema completo funcionando, así, se asegura que el proyecto llegue al cliente como debe ser.

Y así, podemos darnos cuenta de la importancia que tiene la verificación y las pruebas en un proyecto. Debe de haber una perfecta revisión de que todo va bien al momento de estar desarrollando, y una vez terminado se deben de pasar los filtros de seguridad adecuados para corroborar que lo que se creó no tiene errores.

Verificación y validación

Cuando se está desarrollando un software, hay muchas maneras y métodos de hacerlo, cada quién sigue una metodología particular a su gusto, sin embargo, existe un formato común con ciertos requerimientos que se tienen que tener para poder realizarlo, que aplican para todos los proyectos y que no se pueden omitir. Uno de estos pasos «obligatorios» son la verificación y la validación del código.

Primero vamos a definir qué es cada uno de estos conceptos:

  • Verificación: Se comprueba que el software cumple los requisitos funcionales y no funcionales de su especificación.
  • Validación: Comprueba que el software cumple las expectativas que el cliente espera.

Ahora que entendemos qué es cada una, podemos darnos cuenta que aunque cada proyecto sea construido de diferentes maneras, estos dos pasos son totalmente necesarios para un correcto desarrollo. Con la verificación nos podemos dar una idea sobre si el proyecto está tomando un camino correcto al esperado, y la validación nos ayuda a comprobar que efectivamente se logró lo que se esperaba.

Al ser dos conceptos diferentes, se utilizan distintas herramientas y formas para aplicarlos, a continuación nos podremos dar una idea de cuáles pueden ser:

Verificación:

  • Revisiones
  • Juntas
  • Pláticas
  • Reuniones

Validación:

  • Testeo de cajas (negra, gris)
  • Testeo de aceptación

Como podemos notar, para hacer una verificación no es necesario salir del equipo de los mismos desarrolladores, los miembros encargados de crear el proyecto pueden ellos mismos elaborarlo, sin embargo para hacer una correcta validación es necesario pasar por distintas pruebas y debe ser validado por un equipo por un equipo especial designado a tal tarea, exterior a los creadores.

Ahora, después de haber entendido las diferencias y los usos de estos dos conceptos, podemos darnos cuenta de la verdadera importancia que tienen en un proyecto de cualquier magnitud, porque nos ayudan a entregar algo con calidad y que es lo que realmente se está buscando, sin quedar mal con los clientes de entregar algo que no era o haber entregado algo con fallas.

Diseña un sitio como este con WordPress.com
Comenzar