ingenieria de software
DESCRIPTION
ÂTRANSCRIPT
La Ingeniería del Software es una disciplina o área de la Informática que ofrece
métodos y técnicas para desarrollar y mantener software de calidad que
resuelven problemas de todo tipo. Existen varias definiciones sobre esta
ciencia de la computación que permiten describir este proceso.
Estado del arte de la Ingeniería del Software
La Ingeniería del Software es una disciplina o área de la Informática o Ciencias
de la Computación, que ofrece métodos y técnicas para desarrollar y mantener
software de calidad que resuelven problemas de todo tipo. Hoy día es cada vez
más frecuente la consideración de la Ingeniería del Software como una nueva
área de la ingeniería, y el ingeniero del software comienza a ser una profesión
implantada en el mundo laboral internacional, con derechos, deberes y
responsabilidades que cumplir, junto a una, ya, reconocida consideración social
en el mundo empresarial y, por suerte, para esas personas con brillante futuro.
La Ingeniería del Software trata con áreas muy diversas de la Informática y de
las ciencias de la computación, tales como construcción de compiladores,
sistemas operativos o desarrollos de Intranet/Internet, abordando todas las
fases del ciclo de vida del desarrollo de cualquier tipo de sistemas de
información y aplicables a una infinidad de áreas tales como: negocios,
investigación científica, medicina, producción, logística, banca, control de
tráfico, meteorología, el mundo del derecho, la red de redes Internet, redes
Intranet y Extranet, etc.
Definición del Término Ingeniería del Software
Según Diccionario de la Real Academia Española de la Lengua
El término Ingeniería se define en el Diccionario de la Real Academia Española
de la Lengua (DRAE) como: Conjunto de conocimientos y técnicas que
permiten aplicar el saber científico a la utilización de la materia y de las fuerzas
de energía.
Profesión y ejercicio del ingeniero, y el término ingeniero se define como:
Persona que profesa o ejerce la ingeniería.
Según la Real Academia de Ciencias Exactas, Físicas y Naturales
Ingeniería: Es el conjunto de conocimientos y técnicas cuya aplicación permite
la utilización racional de los materiales y de los recursos naturales, mediante
invenciones, construcciones u otras realizaciones provechosas para el hombre.
Evidentemente, si la Ingeniería del Software es una nueva ingeniería, parece
lógico que reúna las propiedades citadas en las definiciones anteriores. Sin
embargo, ni el DRAE ni la Real Academia Española de Ciencias han incluido
todavía el término es sus últimas ediciones; en consecuencia vamos a recurrir
para su definición más precisa a algunos de los autores más acreditados que
comenzaron en su momento a utilizar el término o bien en las definiciones
dadas por organismos internacionales profesionales de prestigio tales como
IEEE o ACM.
Definiciones de Ingeniería de Software
Definición 1: Ingeniería de Software es el estudio de los principios y
metodologías para desarrollo y mantenimiento de sistemas de software.
Definición 2: Ingeniería de Software es la aplicación práctica del conocimiento
científico en el diseño y construcción de programas de computadora y la
documentación asociada requerida para desarrollar, operar (funcionar) y
mantenerlos. Se conoce también como desarrollo de software o producción de
software.
Definición 3: Ingeniería de Software trata del establecimiento de los principios
y métodos de la Ingeniería a fin de obtener software de modo rentable que sea
fiable y trabaje en máquinas reales.
Definición 4: La aplicación de un enfoque sistemático, disciplinado y
cuantificable al desarrollo, operación (funcionamiento) y mantenimiento del
software; es decir, la aplicación de ingeniería al software.
El producto y el proceso de la Ingeniería del Software
El producto
El software de computadora se ha convertido en el alma máter. Es la máquina
que conduce a la toma de decisiones comerciales. Sirve para la investigación
científica moderna y de resolución de problemas de ingeniería. Es el factor
clave que diferencia los productos y servicios modernos. Está inmerso en
sistemas de todo tipo: de transportes, médicos, de telecomunicaciones,
militares, procesos industriales, entretenimientos, productos de oficina, la lista
es casi interminable. El software es casi ineludible en un mundo moderno. A
medida que nos adentremos en el siglo XXI, será el que nos conduzca a
nuevos avances en todo, desde la educación elemental a la ingeniería
genética.
El software de computadora es el producto que diseñan y construyen los
ingenieros del software. Esto abarca programas que se ejecutan dentro de una
computadora de cualquier tamaño y arquitectura, documentos que comprenden
formularios virtuales e impresos y datos que combinan números y texto y
también incluyen representaciones de información de audio, vídeo e imágenes.
Los ingenieros de software lo construyen, y virtualmente cualquier persona en
el mundo industrializado lo utiliza, bien directa o indirectamente. Es importante
porque afecta muy de cerca cualquier aspecto de la vida y está muy extendido
en el comercio y en las actividades cotidianas.
Los pasos son construir software de computadora como construimos cualquier
otro producto satisfactorio, aplicando un proceso que conduce a un resultado
de alta calidad, que satisface las necesidades de las personas que usarán el
producto. Debes aplicar un enfoque de ingeniería de software.
Desde el punto de vista de un ingeniero de software, el producto obtenido son
los programas, documentos y los datos que configuran el software de
computadora. Pero desde el punto de vista de los usuarios el producto obtenido
es la información resultante que de algún modo mejora el mundo de los
usuarios.
El proceso
Como el software, al igual que el capital, es el conocimiento incorporado, y
puesto que el conocimiento está inicialmente disperso, el desarrollo del
software implícito, latente e incompleto en gran medida, es un proceso social
de aprendizaje.
El proceso es un diálogo en el que se reúne el conocimiento y se incluye en el
software. El proceso proporciona una interacción entre los usuarios y los
diseñadores, entre los usuarios y las herramientas de desarrollo, y entre los
diseñadores y las herramientas de desarrollo [tecnología]. Es un proceso
interactivo donde la herramienta de desarrollo se usa como medio de
comunicación, con cada iteración del diálogo se obtiene mayor conocimiento de
las personas involucradas.
Cuando se trabaja para construir un producto o un sistema, es importante
seguir una serie de pasos predecibles, un mapa de carreteras que le ayude a
obtener el resultado oportuno de calidad. El mapa de carreteras a seguir es
llamado proceso del software.
Lo construyen los ingenieros del software y sus gestores adaptan el proceso a
sus necesidades y entonces lo siguen. Además las personas que han solicitado
el software tienen un papel a desempeñar en el proceso del software. Es
importante porque proporciona estabilidad, control y organización a una
actividad que puede, si no se controla, volverse caótica.
Los pasos son a un nivel detallado, el proceso que adoptemos depende del
software que estamos construyendo. Un proceso puede ser apropiado para
crear software de un sistema de aviación, mientras que un proceso diferente
por completo puede ser adecuado para la creación de un sitio web.
Desde el punto de vista de un ingeniero de software, los productos obtenidos
son programas, documentos y datos que se producen como consecuencia de
las actividades ingenieriles definidas por el proceso.
Hay una cantidad de mecanismos de evaluación del proceso de software que
permiten a las organizaciones determinar la madurez de su proceso. Sin
embargo, la calidad, oportunidad y viabilidad a largo plazo del producto que se
está construyendo, son los mejores indicadores de la eficiencia del proceso que
estamos utilizando.
Análisis de requerimientos: Se extraen los requisitos del producto de
software. En esta etapa la habilidad y experiencia en la ingeniería del software
es crítica para reconocer requisitos incompletos, ambiguos o contradictorios.
Usualmente el cliente/usuario tiene una visión incompleta/inexacta de lo que
necesita y es necesario ayudarle para obtener la visión completa de los
requerimientos. El contenido de comunicación en esta etapa es muy intenso ya
que el objetivo es eliminar la ambigüedad en la medida de lo posible.
Especificación: Es la tarea de describir detalladamente el software a ser
escrito, de una forma rigurosa. Se describe el comportamiento esperado del
software y su interacción con los usuarios y/o otros sistemas.
Diseño y arquitectura: Determinar cómo funcionará de forma general sin
entrar en detalles incorporando consideraciones de la implementación
tecnológica, como el hardware, la red, etc. Consiste en el diseño de los
componentes del sistema que dan respuesta a las funcionalidades descritas en
la segunda etapa también conocidas como las entidades de negocio.
Generalmente se realiza en base a diagramas que permitan describir las
interacciones entre las entidades y su secuenciado.
Programación: Se traduce el diseño a código. Es la parte más obvia del
trabajo de ingeniería de software y la primera en que se obtienen resultados
“tangibles”. No necesariamente es la etapa más larga ni la más compleja
aunque una especificación o diseño incompletos/ambiguos pueden exigir que,
tareas propias de las etapas anteriores se tengan que realizarse en esta.
Prueba: Consiste en comprobar que el software responda/realice
correctamente las tareas indicadas en la especificación. Es una buena praxis
realizar pruebas a distintos niveles (por ejemplo primero a nivel unitario y
después de forma integrada de cada componente) y por equipos diferenciados
del de desarrollo (pruebas cruzadas entre los programadores o realizadas por
un área de test independiente).
Documentación: Realización del manual de usuario, y posiblemente un
manual técnico con el propósito de mantenimiento futuro y ampliaciones al
sistema. Las tareas de esta etapa se inician ya en el primera fase pero sólo
finalizan una vez terminadas las pruebas.
Mantenimiento: En esta etapa se realizan un mantenimiento correctivo
(resolver errores) y un mantenimiento evolutivo (mejorar la funcionalidades y/o
dar respuesta a nuevos requisitos).
Modelos de desarrollo de software
Existen varios modelos, paradigmas y filosofías de desarrollo, en los cuales se
apoya la ingeniería de software para la construcción del software, entre ellos se
puede citar:
Modelo en cascada (modelo tradicional)
Modelo de prototipos
Modelo Espiral
Desarrollo por etapas
Desarrollo iterativo y creciente o Iterativo e Incremental
Modelo de desarrollo rápido de aplicaciones (Rapid Application
Development, RAD ó DRA)
Desarrollo concurrente
Proceso Unificado de Desarrollo RUP (Proceso Unificado de Rational)
CAPAS DE LA INGENIERÍA DE SOFTWARE
El enfoque de ingeniería del software cuenta con un compromiso
organizacional con la calidad porque no es posible incorporar la ingeniería del
software en una organización que no está centrada en conseguir calidad.
La ingeniería del software es una tecnología multicapa. Se puede ver como un
conjunto de componentes estratificados, que reposan sobre ese enfoque de
calidad.
Estos componentes que forman parte de la ingeniería del software son:
Procesos: un marco de trabajo que ayuda al jefe de proyecto a controlar
la gestión del proyecto y las actividades de ingeniería.
Métodos: las actividades técnicas requeridas para la creación de
productos de trabajo.
Herramientas: la ayuda automatizada para los procesos y métodos.
Procesos
El fundamento de la ingeniería del software es la capa de proceso. El proceso
define un marco de trabajo para un conjunto de áreas clave de proceso que se
deben establecer para la entrega efectiva de la tecnología de la ingeniería del
software.
La capa de proceso define el proceso que se usará para construir el software y
las actividades y tareas que un jefe de proyecto tiene que gestionar. Por lo
tanto, las áreas claves del proceso forman la base del control de gestión de
proyectos del software y establecen el contexto en el que se aplican los
métodos técnicos, se obtienen productos de trabajo (modelos, documentos,
datos, informes, formularios, etc.), se establecen hitos, se asegura la calidad y
el cambio se gestiona adecuadamente. El proceso de la ingeniería del software
es la unión que mantiene juntas las capas de tecnologías y que permite un
desarrollo racional y oportuno de la ingeniería del software.
La capa de proceso:
Permite al jefe de proyecto planificar una ejecución exitosa del proyecto. La
capa de proceso proporciona una hoja de ruta del trabajo de ingeniería del
software. Ayuda al jefe de proyecto en la creación de un plan de trabajo viable
que aísle tareas de trabajo, responsabilidades, los productos de trabajo
producidos, y los mecanismos usados para asegurar calidad en dichos
productos de trabajos. Permite la ejecución de proyectos software dentro de un
marco de tiempo razonable.
Proporciona a las personas involucradas el contexto de su trabajo. La capa de
proceso guía a las personas involucradas proporcionando el marco de trabajo
en el que entienden el contexto de las tareas a realizar.
Se pueden ver todas las actividades, incluyendo las actividades técnicas, como
parte del proceso. Además, cualquier recurso, incluyendo herramientas usadas
para construir el software también encajan en el proceso. La capa de proceso
es, por lo tanto, el fundamento de la ingeniería del software y da soporte a las
capas de métodos y herramientas.
Importancia de un proceso
Un proceso es útil porque proporciona claridad en cómo ha de realizarse el
trabajo. Cualquier conjunto de actividades humanas complejas se puede
convertir en caótico si no hay guías para que las personas puedan realizar las
actividades. Un proceso definido responde a las siguientes cuestiones:
¿Quién se comunica con quién?
¿Cómo se coordinan las actividades interdependientes?
¿Quién es responsable de qué trabajo?
¿Quién produce qué productos de trabajo, y cómo se evalúan?
Un proceso:
‐Identifica todas las actividades y tareas de la ingeniería del software
‐Define el flujo de trabajo entre las actividades y tareas
‐Identifica los productos de trabajo que se producen
‐Especifica los puntos de control de calidad requeridos
Algunas personas ven el desarrollo de software con una perspectiva que
requiere habilidades artísticas y de artesanía y que es inherentemente caótico.
Se resisten a la idea de usar un proceso definido porque lo ven como incómodo
y burocrático y por lo tanto dificulta la creatividad.
Aunque no hay duda de que el desarrollo de software requiere creatividad, la
mayoría del software de calidad en la industria se desarrolla por el esfuerzo
coordinado de más de una persona. Para cualquier esfuerzo de equipo, el
control coordinado es mejor alternativa que la anarquía. La hoja de ruta
proporcionada por un proceso es útil para las personas que construyen
productos software o que gestionan proyectos.
Todos los enfoques de la construcción de software tienen un proceso, pero en
muchos casos, son ad hoc, invisibles y caóticos. Una buena ingeniería de
software hace que el proceso de software sea más visible, predecible y más útil
para aquellos que construyen software.
La capa de proceso abarca las siguientes cuestiones:
‐El marco de trabajo de proceso común (CPF)
‐Actividades y tareas de la ingeniería de software
‐Puntos de control de calidad
‐Definiciones de productos de trabajo
‐Gestión de proyectos
‐Aseguramiento de la calidad del software
‐Gestión de la configuración del software
‐Monitorización de proyectos
‐Medidas y métricas
Métodos
La capa de proceso identifica las tareas de ingeniería que se deben realizar
para construir software de alta calidad.
La siguiente capa, la capa de métodos se centra en las actividades técnicas
que se deben realizar para conseguir las tareas de ingeniería. Proporciona el
“cómo” y cubre las actividades de ingeniería fundamentales.
Los métodos abarcan una gran gama de tareas que incluyen análisis de
requisitos, diseño, construcción de programas, pruebas y mantenimiento. Los
métodos de la ingeniería del software dependen de un conjunto de principios
básicos que gobiernan cada una de las áreas de la tecnología e incluyen
actividades de modelado y otras técnicas descriptivas.
La construcción de software implica una amplia colección de actividades
técnicas. La capa de métodos contiene los métodos definidos para realizar
esas actividades de forma eficiente. Se centra en cómo se han de realizar las
actividades técnicas. Los personas involucradas usan los métodos para realizar
las actividades de ingeniería fundamentales necesarias para construir el
software.
Las actividades técnicas fundamentales para construir software son:
‐Análisis: el análisis es el fundamento de todos los trabajos de ingeniería que
siguen. Durante el análisis, se crea el modelo de lo que es requerido por el
software.
‐Diseño: las actividades de diseño siguen el análisis y traducen el modelo del
análisis en cómo el producto proporciona estas funciones por medio del
software.
‐Codificación: una vez que el diseño es completo, la codificación traduce el
modelo de diseño en una forma ejecutable.
‐Pruebas: el proceso de pruebas ayuda a destapar errores en el código y el
diseño subyacente.
También se realizan actividades de soporte: revisiones técnicas y soporte de
métricas.
Para varias actividades de proceso, la capa de métodos contiene el
correspondiente conjunto de métodos técnicos para usar. Esto abarca un
conjunto de reglas, los modos de representación gráficos o basados en texto, y
las guías relacionadas para la evaluación de la calidad de la información
representada.
Para definir la capa de métodos, es necesario seleccionar un método adecuado
de un amplio rango de métodos disponibles.
Consideramos las actividades de análisis y diseño. Hay una amplia variedad de
métodos disponibles. El equipo de proyecto debería seleccionar el método que
es más apropiado para el problema, el entorno de desarrollo y el conocimiento
y experiencia de los miembros del equipo.
Herramientas
La capa de herramientas proporciona soporte a las capas de proceso y
métodos centrándose en el significado de la automatización de algunas de las
actividades manuales. Las herramientas se pueden utilizar para automatizar las
siguientes actividades:
‐Actividades de gestión de proyectos
‐Métodos técnicos usados en la ingeniería del software
‐Soporte de sistemas general
‐Marcos de trabajo para otras herramientas
La automatización ayuda a eliminar el tedio del trabajo, reduce las posibilidades
de errores, y hace más fácil usar buenas prácticas de ingeniería del software.
Cuando se usan herramientas, la documentación se convierte en una parte
integral del trabajo hecho, en vez de ser una actividad adicional. De ahí que la
documentación no se tenga que realizar como actividad adicional. Las
herramientas se pueden utilizar para realizar actividades de gestión de
proyecto así como para actividades técnicas.
Existen una gran variedad de herramientas para múltiples actividades. Entre
ellas se pueden destacar las siguientes:
‐Herramientas de gestión de proyectos
‐Herramientas de control de cambios
‐Herramientas de análisis y diseño
‐Herramientas de generación de código
‐Herramientas de pruebas
‐Herramientas de reingeniería
‐Herramientas de documentación
‐Herramientas de prototipos
Estas herramientas soportan las capas de proceso y de métodos en varias
actividades.
Responsabilidad profesional y ética
Como otras disciplinas de la ingeniería, la ingeniería del software se lleva a
cabo dentro de un marco legal y social que limita la libertad de los ingenieros.
Los ingenieros de software deben aceptar que su trabajo comprende
responsabilidades más amplias que simplemente la aplicación de habilidades
técnicas. Deben comportarse de una forma ética y moral responsable si es que
desean ser respetados como profesionales.
No basta con decir que usted siempre debe poseer estándares normales de
honestidad e integridad. No debería utilizar su capacidad y sus habilidades
para comportarse de forma deshonesta o de forma que deshonre la profesión
de la ingeniería del software. Sin embargo, existen áreas donde los estándares
de comportamiento aceptable no están acotados por las leyes, sino por la más
tenue noción de responsabilidad profesional. Algunas de éstas son:
1. Confidencialidad. Usted normalmente debe respetar la confidencialidad
de sus empleadores o clientes independientemente de que se haya
firmado un acuerdo formal de confidencialidad.
2. Competencia. No debe falsificar su nivel de competencia, ni aceptar
conscientemente trabajos que están fuera de su capacidad.
3. Derechos de propiedad intelectual. Debe ser consciente de las leyes
locales que gobiernan el uso de la propiedad intelectual, como las
patentes y el copyright. Debe asegurarse de que la propiedad intelectual
de los empleadores y clientes está protegida.
4. Uso inapropiado de las computadoras. No debe emplear sus
habilidades técnicas para utilizar de forma inapropiada las computadoras
de otras personas. El uso inapropiado de las computadoras va desde los
relativamente triviales (utilizar juegos en la máquina de un empleado, por
ejemplo) hasta los extremadamente serios (difusión de virus).
Las sociedades e instituciones profesionales tiene que desempeñar un papel
importante en el establecimiento de estándares éticos. Organizaciones como la
ACM, el IEEE (Instituto de Ingenieros Eléctricos y Electrónicos) y la British
Computer Society publican un código de conducta profesional o de ética. Los
miembros de estas organizaciones se comprometen a cumplir ese código
cuando se inscriben en ellas. Estos códigos de conducta generalmente se
refieren al comportamiento ético fundamental.
CONCLUSIONES
La ingeniería de software es una disciplina que nos ayuda a desarrollar
sistemas de software a tiempo y a la vez que se cumplan con las expectativas
de calidad y que permanezca dentro del presupuesto. Sus tres elementos
importantes son: algoritmo, estructura de datos y documentos.
El proyecto de software cumple con un ciclo de vida, para todo proyecto de
software se debe elegir el modelo en el que se trabajara, es muy importante
realizar prototipos de los productos de software para el mejor diseño y
entendimiento de lo que requiere el cliente.
Para esto necesitamos información adecuada, podemos utilizar cualquier
técnica de recopilación de información siempre y cuando se haga de la forma
correcta y constante comunicación con el cliente
LINKOGRAFIA
http://www.ecured.cu/index.php/Ingenier%C3%ADa_de_software
http://proyectosguerrilla.com/blog/2013/02/las-cinco-etapas-en-la-ingenieria-del-software/
http://sosagas.blogspot.com/2011/09/capas-de-la-ingenieria-de-software.html
BIBLIOGRAFÍA
Ian Somerville: Ingeniería de Software. Editorial Pearson Educación. S.A.
Séptima Edición. Madrid, 2005.