Verification Approaches - Georgia Tech - Software Development Process
Summary
TLDREl video aborda las principales técnicas de verificación de software, destacando cuatro enfoques principales: pruebas dinámicas (testing), verificación estática, inspecciones y pruebas formales de corrección. Se enfatiza que las pruebas son el método más utilizado en la industria, donde se ejercen los programas para identificar fallos mediante casos de prueba. La verificación estática analiza todos los posibles comportamientos del programa, mientras que las inspecciones son actividades manuales en grupo. Finalmente, las pruebas formales demuestran la corrección de un programa a través de análisis matemático del código y las especificaciones formales.
Takeaways
- 🖥️ El software suele tener errores, por lo que es necesario verificarlo tanto como sea posible.
- 🧪 Existen cuatro enfoques principales para la verificación de software: pruebas, verificación estática, inspecciones y pruebas formales de corrección.
- 🔍 La prueba de software, también conocida como verificación dinámica, implica probar el sistema para tratar de hacerlo fallar.
- 📝 Un caso de prueba se define como un par de un input del dominio de entrada y un output esperado del dominio de salida.
- 📚 Un conjunto de pruebas (test suite) es un conjunto de casos de prueba y se usará mucho en las lecciones posteriores.
- 📊 La verificación estática no considera entradas individuales, sino que analiza todas las posibles entradas y comportamientos del programa.
- 👥 Las inspecciones o revisiones son actividades manuales en grupo, donde el equipo revisa el código o artefactos para identificar defectos.
- 🏢 Las inspecciones son ampliamente utilizadas en la industria debido a su eficacia demostrada.
- 📐 Las pruebas formales de corrección utilizan análisis matemático para demostrar que un programa cumple con su especificación formal.
- 🚀 Aunque se mencionan los cuatro enfoques, el foco principal está en las pruebas de software, ya que son las más populares y usadas en la industria.
Q & A
¿Qué es la verificación de software?
-La verificación de software es el proceso de comprobar que el software funciona correctamente, identificando y corrigiendo posibles errores o fallos en su comportamiento.
¿Cuáles son los cuatro enfoques principales para la verificación de software mencionados en el guion?
-Los cuatro enfoques principales son: pruebas (verificación dinámica), verificación estática, inspecciones y pruebas formales de corrección.
¿Por qué se dice que el software es 'buggy'?
-Se dice que el software es 'buggy' porque a menudo contiene errores o fallos, lo que hace necesario verificar su funcionamiento.
¿Qué es una prueba de software según el guion?
-Una prueba de software es el proceso de ejecutar un sistema de software para intentar que falle. Involucra la creación de casos de prueba que combinan entradas y resultados esperados.
¿Cómo se define un caso de prueba?
-Un caso de prueba se define como un par que consiste en una entrada del dominio de entradas del programa y una salida esperada del dominio de salidas. Esta salida es lo que debería producir un software correcto al procesar la entrada.
¿Qué es un conjunto de pruebas?
-Un conjunto de pruebas es un grupo de casos de prueba diseñados para cubrir múltiples posibles entradas y comportamientos del programa.
¿Cuál es la diferencia principal entre pruebas y verificación estática?
-La principal diferencia es que las pruebas se enfocan en entradas específicas para hacer que el programa falle, mientras que la verificación estática considera todas las posibles entradas y comportamientos del programa, siendo una técnica más completa.
¿Qué son las inspecciones o revisiones en el contexto de la verificación de software?
-Las inspecciones son actividades manuales y grupales donde varias personas revisan el código o los artefactos generados durante la producción del software para identificar defectos. Son ampliamente utilizadas en la industria debido a su efectividad.
¿En qué consiste una prueba formal de corrección?
-Una prueba formal de corrección implica demostrar, mediante un análisis matemático, que el programa implementa correctamente su especificación formal, es decir, el comportamiento esperado definido en un documento.
¿Por qué se dedica más tiempo a hablar de pruebas de software en el guion?
-Se dedica más tiempo a hablar de pruebas de software porque es la técnica más popular y utilizada en la industria para la verificación de software.
Outlines
🛠️ Introducción a la verificación de software
Este párrafo introduce el concepto de verificación de software. Se explica que el software suele tener errores, lo que hace necesario verificarlo a través de varios enfoques. Se mencionan cuatro métodos principales: pruebas dinámicas, verificación estática, inspecciones y pruebas formales de corrección. La mayor parte del enfoque se centrará en las pruebas de software, ya que son las más utilizadas en la industria.
🔍 Pruebas de software: Definición y conceptos clave
En este párrafo se profundiza en el concepto de pruebas de software. Se explica que probar un sistema significa ejercitarlo para intentar que falle. Se introduce el concepto de caso de prueba, que consiste en un par de entrada y salida esperada. También se define el conjunto de pruebas o 'test suite', que es un grupo de casos de prueba utilizados para evaluar un programa.
🧑💻 Verificación estática: Explorando todas las entradas posibles
Aquí se aborda la verificación estática, que busca identificar errores específicos, como desreferencias de punteros nulos. A diferencia de las pruebas, la verificación estática no considera entradas individuales, sino todas las posibles, lo que permite evaluar todos los comportamientos del programa. Esta técnica es considerada completa en comparación con las pruebas dinámicas.
👥 Inspecciones: Revisión manual de software
Este párrafo presenta las inspecciones, también conocidas como revisiones o 'walkthroughs'. Se describe cómo las inspecciones son actividades manuales y en grupo, donde varias personas revisan el código y otros artefactos de software para detectar defectos. Las inspecciones han demostrado ser muy efectivas en la industria, por lo que se utilizan ampliamente.
📜 Pruebas formales: Verificación matemática de especificaciones
En el último párrafo se mencionan las pruebas formales de corrección, que implican una verificación matemática rigurosa del software en comparación con su especificación formal. Se explica que mediante un análisis matemático sofisticado, se puede probar que el programa implementa correctamente lo que se espera según su especificación.
Mindmap
Keywords
💡Verificación de software
💡Testing
💡Verificación estática
💡Inspecciones
💡Pruebas formales de corrección
💡Dominio de entrada
💡Dominio de salida
💡Caso de prueba
💡Suite de pruebas
💡Especificación formal
Highlights
Software is inherently buggy, which necessitates verification.
There are four mainstream approaches to software verification: testing, static verification, inspections, and formal proofs of correctness.
Testing is also known as dynamic verification, and it is the most used approach in the industry.
A test case consists of an input from the input domain and an expected output from the output domain.
A test suite is a collection of test cases, and these concepts are heavily used in testing.
Unlike testing, static verification considers all possible inputs and executions of a program, making it more complete.
Static verification can identify issues like null pointer dereferences.
Inspections (also called reviews or walkthroughs) are human-intensive activities involving manual group efforts to identify defects.
Inspections have been proven to be highly effective and are widely used in the industry.
Formal proofs of correctness involve verifying a program against its formal specification using mathematical analysis.
Testing aims to exercise a system and make it fail to identify defects.
Static verification doesn’t focus on individual inputs but considers all possible program behaviors.
Formal proofs require a formal specification that precisely defines expected program behavior.
Among all the approaches, testing is given the most emphasis as it is the most prevalent in industry practice.
Formal proofs of correctness are the most mathematically sophisticated method of verifying software.
Transcripts
Now that we got out of the way this
initial set of basic definitions. Let's go back to our
main concept, which is software verification. We said that software
is buggy, and because software is buggy, we need to
verify the software as much as we can. But how
can we verify software? There are several ways to verify
a software system. Among those, we will discuss four mainstream
approaches. The first one is testing, also called dynamic verification.
The second approach is static verification. The third approach is
inspections. And finally, we're going to consider a fourth approach which is
formal proofs of correctness. So what I'm going to do
next, I'm going to first provide an overview of these approaches and
then discuss some of them in more depth and please
note that although we will discuss all four approaches we will
spend most of our time on software testing. As software
testing is the most popular and most used approach in industry.
So let's start with our overview and in particular
with testing. Testing a software system means exercising the system
to try to make it fail. More precisely, let's consider
a program. Its input domain, which is the set of
all the possible inputs for the program and, its output
domain, which is a set of all the possible corresponding
outputs. Given this context, we can define what a test
case is. A test case is a pair that consists
of a, an input from the input domain D,
and then, expected output O from the output domain.
And O is the element in the output domain
that a correct software would produce when ran against I.
We can also define the concept of test suite,
which is a set of test cases, and we're going to
use these two concepts of test case and test
suite quite a bit in the rest of the lessons.
Subject verification, tries to identify specific classes of problems
in the program. Such as null pointer dereferences. And
unlike testing, what it does is that it does
not just consider individual inputs, it instead considers all
possible inputs for the program. So it consider in
a sense all possible executions of the program and
all possible behaviors of the program, that's why we
save the verification unlike testing it's complete. The 3rd technique
we are going to consider is inspections,
and inspections are also called reviews or walkthroughs.
And unlike the previous techniques, inspections are a
human intensive activity, more precisely, they are a
manual and group activity in which several
people from the organization that developed the software,
look at the code or other artifacts developed
during the software production and try to identify
defects in these artifacts. And interestingly inspections
have been shown to be quite effective in
practice and that's the reason why they're used
quite widely in the industry. Finally, the last
technique I want to mention is Formal
Proof (of correctness). Given a software specification, and
actually a formal specification, so a document that
formally defines and specifies the behavior, the expected
behavior of the program. A form of proof of
correctness proves that the program being verified, actually implements
the program specification and it does that through a
sophisticated mathematical analysis of the specifications and of the code.
Browse More Related Video
Verification & Validation - Georgia Tech - Software Development Process
¿Pruebas paramétricas o no parametricas?
Diseño de un factor con Minitab 18 (One way - ANOVA)
PyTest: Pruebas Unitarias en Python 🐍 | Unit Tests | Testing Automatizado con Python ✅
Pruebas Bioquímicas: Sistemas multipruebas
Pruebas organolépticas en la leche cruda
5.0 / 5 (0 votes)