Verification Approaches - Georgia Tech - Software Development Process

Udacity
23 Feb 201503:13

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

00:00

🛠️ 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

La verificación de software es el proceso de asegurar que un software funcione correctamente sin errores. En el video, se menciona como una necesidad dado que los programas pueden contener fallos, y la verificación es clave para reducir la probabilidad de errores graves.

💡Testing

También conocido como verificación dinámica, el testing es el proceso de ejecutar un software con entradas específicas para observar si produce el resultado esperado. Se menciona que esta es la forma más popular de verificación en la industria del software.

💡Verificación estática

Es un método de verificación que analiza el software sin ejecutarlo, inspeccionando el código fuente para detectar posibles errores. A diferencia del testing, la verificación estática puede abarcar todas las posibles entradas del programa, lo que la hace más completa en ciertos aspectos.

💡Inspecciones

También conocidas como revisiones o walkthroughs, las inspecciones son actividades manuales en grupo donde se revisan los artefactos del software, como el código, para encontrar defectos. Son ampliamente usadas en la industria por su efectividad.

💡Pruebas formales de corrección

Este es un enfoque que utiliza un análisis matemático para demostrar que un programa cumple con su especificación formal. Es el método más riguroso, pero también uno de los más complejos de implementar.

💡Dominio de entrada

Se refiere al conjunto de todas las posibles entradas que un programa puede recibir. Durante el proceso de testing, se seleccionan casos específicos dentro de este dominio para verificar si el software funciona correctamente.

💡Dominio de salida

Es el conjunto de todos los resultados posibles que puede generar un programa. En un caso de prueba, el dominio de salida es el lugar donde se compara el resultado esperado con el real, para verificar la corrección del software.

💡Caso de prueba

Un caso de prueba es una combinación de un valor de entrada específico y un resultado esperado. Su propósito es comprobar si el software genera la salida correcta dada una entrada particular.

💡Suite de pruebas

Una suite de pruebas es un conjunto de casos de prueba diseñados para verificar diferentes aspectos de un programa. Esta colección es fundamental para asegurar que el software sea probado de manera exhaustiva.

💡Especificación formal

Una especificación formal es un documento que define matemáticamente el comportamiento esperado de un programa. Este tipo de especificación es esencial en las pruebas formales de corrección, ya que sirve como la base para probar la corrección del software.

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

play00:00

Now that we got out of the way this

play00:01

initial set of basic definitions. Let's go back to our

play00:04

main concept, which is software verification. We said that software

play00:08

is buggy, and because software is buggy, we need to

play00:11

verify the software as much as we can. But how

play00:14

can we verify software? There are several ways to verify

play00:17

a software system. Among those, we will discuss four mainstream

play00:21

approaches. The first one is testing, also called dynamic verification.

play00:25

The second approach is static verification. The third approach is

play00:29

inspections. And finally, we're going to consider a fourth approach which is

play00:33

formal proofs of correctness. So what I'm going to do

play00:36

next, I'm going to first provide an overview of these approaches and

play00:39

then discuss some of them in more depth and please

play00:41

note that although we will discuss all four approaches we will

play00:44

spend most of our time on software testing. As software

play00:47

testing is the most popular and most used approach in industry.

play00:50

So let's start with our overview and in particular

play00:53

with testing. Testing a software system means exercising the system

play00:58

to try to make it fail. More precisely, let's consider

play01:01

a program. Its input domain, which is the set of

play01:04

all the possible inputs for the program and, its output

play01:06

domain, which is a set of all the possible corresponding

play01:09

outputs. Given this context, we can define what a test

play01:13

case is. A test case is a pair that consists

play01:16

of a, an input from the input domain D,

play01:19

and then, expected output O from the output domain.

play01:22

And O is the element in the output domain

play01:25

that a correct software would produce when ran against I.

play01:29

We can also define the concept of test suite,

play01:32

which is a set of test cases, and we're going to

play01:34

use these two concepts of test case and test

play01:37

suite quite a bit in the rest of the lessons.

play01:41

Subject verification, tries to identify specific classes of problems

play01:44

in the program. Such as null pointer dereferences. And

play01:47

unlike testing, what it does is that it does

play01:49

not just consider individual inputs, it instead considers all

play01:53

possible inputs for the program. So it consider in

play01:56

a sense all possible executions of the program and

play01:59

all possible behaviors of the program, that's why we

play02:02

save the verification unlike testing it's complete. The 3rd technique

play02:06

we are going to consider is inspections,

play02:08

and inspections are also called reviews or walkthroughs.

play02:12

And unlike the previous techniques, inspections are a

play02:15

human intensive activity, more precisely, they are a

play02:18

manual and group activity in which several

play02:22

people from the organization that developed the software,

play02:25

look at the code or other artifacts developed

play02:29

during the software production and try to identify

play02:31

defects in these artifacts. And interestingly inspections

play02:35

have been shown to be quite effective in

play02:37

practice and that's the reason why they're used

play02:39

quite widely in the industry. Finally, the last

play02:42

technique I want to mention is Formal

play02:45

Proof (of correctness). Given a software specification, and

play02:49

actually a formal specification, so a document that

play02:53

formally defines and specifies the behavior, the expected

play02:57

behavior of the program. A form of proof of

play03:00

correctness proves that the program being verified, actually implements

play03:05

the program specification and it does that through a

play03:07

sophisticated mathematical analysis of the specifications and of the code.

Rate This

5.0 / 5 (0 votes)

Связанные теги
verificación softwarepruebas dinámicaspruebas estáticasinspeccionespruebas formalescalidad del softwareanálisis matemáticodetección de erroresindustria softwareseguridad informática
Вам нужно краткое изложение на английском?