Validación y verificacion de software

Los objetivos de las actividades de verificación y validación son valorar y mejorar la calidad de los productos del trabajo generados durante el desarrollo y modificación del software.

Los atributos de la calidad deben ser la corrección, la perfección, la consistencia, la confiabilidad, la utilidad, la eficacia, el apego a los estándares y la eficacia de los costos totales.

Hay dos tipos de verificación: formal y del ciclo de vida. Esta última consiste en el proceso de determinar el grado de los productos de trabajo de una fase dada del ciclo de desarrollo cumplen con las especificaciones establecidas durante las fases previas. La verificación formal es una rigurosa demostración matemática de la concordancia del código fuente con sus especificaciones.

La validación es la evaluación del software al final del proceso de desarrollo del software para determinar su conformidad con los requisitos IEEE.

La verificación y validación implican la valoración de los productos de trabajo para determinar el apego a las especificaciones, incluyen las especificaciones de requisitos, la documentación del diseño, diversos principios generales de estilo, estándares del lenguaje de instrumentación, estándares del proyecto, estándares organizacionales y expectativas del usuario, al igual que las meta especificaciones para los formatos y notaciones utilizadas en la especificación de productos diversos.

¿Qué es verificación?

La verificación se enfoca más al proceso de evaluación del sistema o componentes ya que permite determinar si los productos de una determinada fase del desarrollo satisfacen las condiciones impuestas en el inicio de la etapa.

¿Qué se debe tener en la verificación?

  • Consistencia: vigilar que la información sea coherente.
  • Precisión: corrección de la sintaxis.
  • Completitud: lagunas en capacidad deductiva.

Lo que se hace en la verificación:

Diseño de interfaz de usuario

El diseño de interfaz de usuario o ingeniería de la interfaz es el diseño de computadoras, aplicaciones, máquinas, dispositivos de comunicación móvil, aplicaciones de software, y sitios web enfocado en la experiencia de usuario y la interacción.

Normalmente es una actividad multidisciplinar que involucra a varias ramas es decir al diseño y el conocimiento como el diseño gráfico, industrial, web, de software y la ergonomía; y está implicado en un amplio rango de proyectos, desde sistemas para computadoras, vehículos hasta aviones comerciales.

Su objetivo es que las aplicaciones o los objetos sean más atractivos y además, hacer que la interacción con el usuario sea lo más intuitiva posible, conocido como el diseño centrado en el usuario. En este sentido las disciplinas del diseño industrial y gráfico se encargan de que la actividad a desarrollar se comunique y aprenda lo más rápidamente, a través de recursos como la gráfica, los pictogramas, los estereotipos y la simbología, todo sin afectar el funcionamiento técnico eficiente.

Imagen relacionada

 


Patrones de diseño de software

Los patrones de diseño son soluciones para problemas típicos y recurrentes que nos podemos encontrar a la hora de desarrollar una aplicación.

Aunque nuestra aplicación sea única, tendrá partes comunes con otras aplicaciones: acceso a datos, creación de objetos, operaciones entre sistemas etc. En lugar de reinventar la rueda, podemos solucionar problemas utilizando algún patrón, ya que son soluciones probadas y documentadas por multitud de programadores.

Patrones de diseño hay muchos. Muchísimos. Y siguen apareciendo patrones nuevos cada poco tiempo. El desarrollo de aplicaciones es una disciplina en constante cambio. Por tanto los problemas a los que nos enfrentamos los desarrolladores también cambian. Así que las herramientas utilizadas, también se van actualizando y mejorando.

Es imposible conocer todos los patrones de diseño. Lo más útil es tener un catalogo de patrones que podamos consultar. A la hora de desarrollar una aplicación, podremos consultar nuestro catálogo buscando patrones que nos ayuden a solucionar problemas de diseño concretos.

Existen diversas maneras de agrupar los patrones de diseño. Quizá la más extendida es agruparlos según su propósito. En este caso tendríamos las siguientes categorías:

  • Patrones creacionales: utilizados para instanciar objetos, y así separar la implementación del cliente de la de los objetos que se utilizan. Con ellos intentamos separar la lógica de creación de objetos y encapsularla.
  • Patrones de comportamiento: se utilizan a la hora de definir como las clases y objetos interaccionan entre ellos.
  • Patrones estructurales: utilizados para crear clases u objetos que incluidos dentro de estructuras más complejas.

Arquitectura de software

El concepto de arquitectura de software se refiere a la estructuración del sistema que, idealmente, se crea en etapas tempranas del desarrollo. Esta estructuración representa un diseño de alto nivel del sistema que tiene dos propósitos primarios: satisfacer los atributos de calidad (desempeño, seguridad, modificabilidad), y servir como guía en el desarrollo. Al igual que en la ingeniería civil, las decisiones críticas relativas al diseño general de un sistema de software complejo deben de hacerse desde un principio. El no crear este diseño desde etapas tempranas del desarrollo puede limitar severamente el que el producto final satisfaga las necesidades de los clientes. Además, el costo de las correcciones relacionadas con problemas en la arquitectura es muy elevado. Es así que la arquitectura de software juega un papel fundamental dentro del desarrollo.

El ciclo de desarrollo de la arquitectura

Dentro de un proyecto de desarrollo, e independientemente de la metodología que se utilice, se puede hablar de “desarrollo de la arquitectura de software”. Este desarrollo, que precede a la construcción del sistema, esta dividido en las siguientes etapas: requerimientos, diseño, documentación y evaluación. Cabe señalar que las actividades relacionadas con el desarrollo de la arquitectura de software generalmente forman parte de las actividades definidas dentro de las metodologías de desarrollo.

Requerimientos. La etapa de requerimientos se enfoca en la captura, documentación y priorización de requerimientos que influencian la arquitectura. Como se mencionó anteriormente, los atributos de calidad juegan un papel preponderante dentro de estos requerimientos, así que esta etapa hace énfasis en ellos. Otros requerimientos, sin embargo, son también relevantes para la arquitectura, estos son los requerimientos funcionales primarios y las restricciones.

Diseño. La etapa de diseño es la etapa central en relación con la arquitectura y probablemente la más compleja. Durante esta etapa se definen las estructuras que componen la

Continue reading "Arquitectura de software"

Diseño de software

el diseño de software es la actividad de ciclo de vida de ingeniería de software en la que los requerimientos de software son analizados para causar una descripción de la estructura interna del software que servirá como base para su construcción. Más precisamente, un diseño de software (el resultado) debe describir la arquitectura de software – es decir cómo el software está en estado de descomposición y organizado en los componentes – y las interfaces entre esos componentes. También debe describir los componentes en un nivel del detalle que permiten su construcción.

El diseño de software tiene un papel importante en el desarrollo de software, ya que permite que ingenieros de software produzcan modelos distintos que moldean una clase de plano de la solución a ser implementado. Podemos analizar y valorar a estos modelos para determinar cual de estos permitirá o no, cumplir con una gama de requerimientos

 


Pruebas de software

Un conjunto de actividades de pruebas suele orientase a comprobar determinados aspectos de un sistema software (o de una parte del mismo).

En primer lugar tenemos las Pruebas Funcionales. Típicamente encontraremos el comportamiento del sistema, subsistema o componente software descrito en especificaciones de requisitos o casos de uso, aunque también puede no estar documentado (“que funcione como el sistema al que sustituye”) . Es decir, con las funciones establecemos “lo que el sistema hace”.

Estas pruebas se definen a partir de funciones o características (como decimos, bien descritas en documentos o bien interpretadas por los probadores) y su interoperabilidad con sistemas específicos, pudiendo ejecutarse en todos los niveles de prueba (componentes, integración, sistema, etc).

Se consideran Pruebas de Caja Negra (“black-box testing”) puesto que valoramos el comportamiento externo del sistema. Las Pruebas de Seguridad o las Pruebas de Interoperabilidad entre sistemas o componentes son casos especializados de las pruebas funcionales.

En segundo lugar figuran las Pruebas no Funcionales que incluyen las pruebas de: Rendimiento, Carga, Estrés, Usabilidad, Mantenibilidad, Fiabilidad o Portabilidad, entre otras. Por tanto se centran en características del software que establecen “cómo trabaja el sistema“.

Estas pruebas también pueden ejecutarse en todos los niveles de prueba Las características no funcionales del software se pueden medir de diversas maneras, por ejemplo, por medio de tiempos de respuesta en el caso de pruebas de rendimiento o por número máximo de sesiones en pruebas de estrés.

A continuación, en tercer lugar, tenemos las Pruebas Estructurales. Nuevamente pueden ejecutarse en todos los niveles de pruebas (ya sabéis: componentes, integración, sistema, etc.) y encajan muy bien si hemos utilizado técnicas de especificación de la estructura o arquitectura del Software. Es posible aplicar técnicas estáticas de análisis de código.

Para expresar el alcance con un conjunto de pruebas (“test suite”) que ha cubierto la estructura o arquitectura en cuestión, se utiliza

Continue reading "Pruebas de software"

UML diagrams

What is it?

The Unified Modeling Language (UML) is a general-purpose, developmental, modeling language in the field of software engineering, that is intended to provide a standard way to visualize the design of a system.

UML was originally motivated by the desire to standardize the disparate notational systems and approaches to software design developed by Grady Booch, Ivar Jacobson and James Rumbaugh at Rational Software in 1994–95, with further development led by them through 1996.

There are 14 types of diagrams each one is important to the develoment of software:

  1. Class Diagram

     

  2. Component Diagram

     

  3. Deployment Diagram

     

  4. Object Diagram

     

  5. Package Diagram

     

  6. Profile Diagram

     

  7. Composite Structure Diagram

     

  8. Use Case Diagram

     

  9. Activity Diagram

     

  10. State Machine Diagram

     

  11. Sequence Diagram

     

  12. Communication Diagram

     

  13. Interaction Overview Diagram

     

  14. Timing Diagram

 

Class diagram:

Class diagrams are arguably the most used UML diagram type. It is the main building block of any object oriented solution. It shows the classes in a system, attributes and operations of each class and the relationship between each class.

In most modeling tools, a class has three parts, name at the top, attributes in the middle and operations or methods at the bottom. In large systems with many related classes, classes are grouped together to create class diagrams. Different relationships between classes are shown by different types of arrows.

UML Class Diagram Example

Use case diagram:

As the most known diagram type of the behavioral UML diagrams, Use case diagrams give a graphic overview of the actors involved in a system, different functions needed by those actors and how these different functions are interacted.

It’s a great starting point for any project discussion, because you can easily identify the main actors involved and the main processes of the system.

Use Case Diagram in UML

 

 

 


The invention of the wheel of the XX century

The wheel is one of the most important inventions almost any machine include a wheel the wheel allowed to the humans transport heavy objects a work that was for four people was a work that it could be done by two persons this was important because they could transport more materials and do it faster

At the beginning the wheel was not even a wheel they humans used to use logs this was us effective because they have to use a lot of logs and also they have to move the logs with the time they discover that the axis and made the life easier for all.

Where I want to go it´s that the software is the wheel of the XX century software like the wheel is in almost all new technology most of the people think that software is just the complicate programs that we use to write like word or games but software can be more simple even microwaves have a software is not so complicate but it have it without software the computers would be useless.

The invention of the software have made the life easier managers use software to be more organized, students to do homework also  we use it for entertainment but when did software engineering start? The term software engineering started to be used in 1955 but it wasn´t consider an engineering yet the science committee of NATO(North Atlantic Treaty Organization) patronized two conferences one in 1968 and other in 1969 these conferences marked the beginning of  the software engineering

 

 

The software crisis

The software crisis stated in 1969 this crisis showed all the problems with the software this were cost the software were extremely expensive, property damage  and dead can sound rare that the software can kill someone but as we

Continue reading "The invention of the wheel of the XX century"

We are better than monkeys

The ethic is one f the things that makes the human being diferent of the animals and also this hability of feel empathy to others persons have allowed progres of course we are humans and we are not perfects and nobody is asking for it but it is importat to remember that we have to be betters every day and don´t be stupid monkeys figthing betwen us.

Simpsons_pelea_de_monos

Everything in the life have a code the doctors have a code even the lawyers have a code although it doesn´t seem so why the people that writte code in a computer shouldn´t have a code? Of course there are a code of ethic in software engineering it is composed by 8 principles.

1. PUBLIC – Software engineers shall act consistently with the public interest:

  • This means that no matter how much you hate the society you have to create things thinking on them you can´t do something that hurts people also you have to think in the persons that have disabilities like Guitar hero that have a color-blind mode.

2. CLIENT AND EMPLOYER – Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest:

  • Here you are between the sword and the wall you have to please to your boss and the client this is difficult because you boss only see the client as money and the client see the company as a monster hungry of money here you have to find the balance.

3. PRODUCT – Software engineers shall ensure that their products and related modifications meet the highest professional standards possible:

  • This is easy just don´t  deliver garbage

4. JUDGMENT – Software engineers shall maintain integrity and independence in their professional judgment: