jueves, 6 de febrero de 2014

Principios de la ingeniería de software



Principio 1: Rigor y formalidad

En cualquier proceso creativo existe la tendencia a seguir la inspiración del momento de forma no estructurada, sin ser precisos; el desarrollo de software es de por sí una actividad creativa. Por otro lado, el rigor es un complemento necesario de la creatividad en todas las actividades de la ingeniería; únicamente a través de un enfoque riguroso podrán producirse productos más confiables, controlando sus costos e incrementando el grado de confianza en los mismos. El rigor no tiene por qué restringir la creatividad, por el contrario, puede potenciar la creatividad aumentando la confianza del ingeniero en los resultados de la misma, una vez que estos son analizados a la luz de evaluaciones rigurosas. Paradójicamente el rigor es una cualidad intuitiva que no puede ser definida en forma rigurosa, pero sí pueden alcanzarse varios niveles de rigurosidad siendo el más alto la formalidad.

Un ingeniero debe saber cómo y cuándo ser formal si es requerido, entendiendo el nivel de rigor y formalidad que debe ser alcanzado dependiendo de la dificultad conceptual de la tarea y su criticidad, lo que puede variar para diferentes partes del mismo sistema.

Principio 2: Separación de intereses

Este principio permite enfrentarse a los distintos aspectos individuales de un problema de forma de concentrarse en cada uno por separado. La complejidad global puede resolverse mucho mejor concentrándose en los distintos aspectos por separado.

La primer forma en la que se pueden separar los distintos intereses es según el tiempo, lo que permite planificar las distintas actividades y eliminar el trabajo extra que implica cambiar de una a otra en forma no restringida. Esta separación según el tiempo es la motivación que hay tras el ciclo de vida del software; un modelo racional de la secuencia de actividades que deberían seguirse en la producción de software.

Otra forma de separación de intereses es en términos de las cualidades que deberían tratarse por separado, por ejemplo podrían enfrentarse separadamente la eficiencia y correctitud de un programa, primero diseñándolo cuidadosa y estructuradamente para garantizar su correctitud a priori y luego reestructurarlo para mejorar su eficiencia.

Otro tipo importante de separación de intereses permite que distintas visiones del software sean analizadas en forma separada, por ejemplo al analizar los requerimientos de una aplicación podría ser de ayuda concentrarse por un lado en los datos que fluyen de una actividad a otra y por otro lado en el flujo de control que gobierna la sincronización de dichas actividades. Ambas ayudan a entender el sistema y ninguna de las dos provee una visión completa del mismo.

Otra forma más de aplicación de este principio es enfrentar partes del mismo sistema en forma separada, esto es en términos de tamaño. Este es un concepto fundamental que debe dominarse para enfrentar la complejidad de la producción de software, y es tan importante que se trata como un punto aparte bajo el principio de modularidad.

Principio 3: Modularidad

Un sistema complejo puede dividirse en piezas más simples llamadas módulos, un sistema compuesto de módulos es llamado modular

El principio de modularidad tiene tres objetivos principales: capacidad de descomponer un sistema complejo, capacidad de componerlo a partir de módulos existentes y comprensión del sistema en piezas (o pedazos).

Principio 4: Abstracción

La abstracción es un proceso mediante el cual se identifican los aspectos relevantes de un problema ignorando los detalles; es un caso especial del principio de separación de intereses en el cual se separan los aspectos importantes de los detalles de menor importancia. Lo que se abstrae y lo que se considera dependerá del propósito de la abstracción, por lo que podrán hacerse distintas abstracciones de la misma realidad cada una de las cuales proveerá una visión de la realidad que sirve para un propósito específico.

Principio 5: Anticipación al cambio

El software sufre cambios constantemente. Estos cambios pueden surgir por la necesidad de eliminar errores que no fueron detectados antes de liberar la aplicación, o por la necesidad de apoyar la evolución de la aplicación debido a nuevos requerimientos o cambios en los requerimientos existentes.

La anticipación al cambio es posiblemente el principio que más distingue al software de otros tipos de producción industrial. Muchas veces una aplicación de software es desarrollada mientras sus requerimientos aún no están completamente comprendidos, al ser liberado y obtener retroalimentación del usuario debe evolucionar con nuevos requerimientos o cambios a los requerimientos ya existentes los cuales pueden tener distintos orígenes, por ejemplo debido a cambios en el ambiente de la organización

Principio 6: Generalidad

El principio de generalidad establece que al tener que resolver un problema se debe buscar un problema más general que posiblemente esté oculto tras el problema original, puesto que puede suceder que el problema general no sea mucho más complejo (a veces puede ser incluso más simple) que el original y posiblemente la solución al problema general tenga potencial de reuso, o exista en el mercado como paquete o se diseñe un módulo que puede ser invocado por más de un punto en la aplicación en lugar de tener varias soluciones especializadas.

La generalidad es un principio fundamental si se tiene como objetivo el desarrollo de herramientas generales o paquetes para el mercado, ya que para ser exitosas deberán cubrir las necesidades de distintas personas

Principio 7: Incrementalidad

La incrementalidad caracteriza un proceso que se desarrolla en forma de pasos, en incrementos, alcanzando el objetivo deseado mediante aproximaciones sucesivas al mismo, donde cada aproximación es alcanzada a través de un incremento de la previa.


Cuando se construye una aplicación en forma incremental, los pasos intermedios pueden ser prototipos del producto final, esto es solamente una aproximación al mismo.


de:

Jorge Salim Blog

http://jorgesalim.blogspot.mx/2010/02/principios-de-la-ingenieria-de-software.html

0 comentarios:

 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes