Ingeniería de Software

Mapa conceptual de Ingeniería de Software I

Get Started. It's Free
or sign up with your email address
Ingeniería de Software by Mind Map: Ingeniería de Software

1. Tipos de Software

1.1. Concepto de software y programa.

1.1.1. Para realizar una tarea en una computadora, es necesario darle instrucciones a través del software. Software es el nombre asignado a las aplicaciones o programas que se ejecutan en la computadora. El contenido y el determinismo de la información son factores importantes a considerar para determinar la naturaleza de una aplicación de software. El contenido se refiere al significado y a la forma de la información de entrada y salida.

1.2. Software de Sistemas

1.2.1. Programas que han sido escritos para servir a otros programas. Se caracterizan por una fuerte interacción con el hardware de la computadora Compartir recursos Sofisticada gestión de procesos Estructuras de datos complejas Múltiples interfaces externas

1.3. Software de Tiempo Real

1.3.1. Coordina/analiza/controla sucesos del mundo real conforme ocurren. Integra diferentes componentes: Recolección de datos Dar formato a la información recibida del exterior De análisis para transformar la información De Control/salida que responda al exterior De Monitorización que coordine a todos los componentes En un tiempo de entre 1 mili segundo a 1 segundo.

1.4. Software de Gestión

1.4.1. El proceso de la información comercial constituye la mayor de las áreas de aplicación del software. Han evolucionado hacia el software de sistemas de información de gestión (SIG) que accede a una o más bases de datos que contienen información comercial Por ejemplo: nóminas, cuentas de haberes-débitos, inventarios, etc.

1.5. Software de Ingeniería y científico

1.5.1. Está caracterizado por los algoritmos (conjunto finito de instrucciones o pasos que sirven para ejecutar una tarea o resolver un problema ) de manejo de números. Pero las nuevas aplicaciones del área de ingeniería se han alejado de los algoritmos convencionales numéricos. El diseño asistido por computadora (del inglés CAD), la simulación de sistemas y otras aplicaciones interactivas, han comenzado a coger características del software de tiempo real e incluso del software de sistemas.

1.6. Software empotrado

1.6.1. Reside en memoria de sólo lectura Se utiliza para controlar productos y sistemas de los mercados industriales y de consumo Ejecuta funciones muy limitadas Ejemplo: El control de las teclas de un horno de microondas, control de la gasolina de un automóvil, sistemas de frenado, etc.

1.7. Software de computadoras personales

1.7.1. El mercado del software de computadoras personales ha germinado en las pasadas dos décadas. Aplicaciones que pertenecen a esta categoría: -El procesamiento de textos -Hojas de cálculo -Los gráficos por computadora -Multimedia -Entretenimientos -Gestión de bases de datos -Aplicaciones financieras, de negocios y personales -Redes o acceso a bases de datos externas

1.8. Software basado en Web

1.8.1. Las páginas Web buscadas por un explorador son software que incorpora instrucciones ejecutables (por ejemplo, HTML, Perl, o Java), y datos (por ejemplo, hipertexto y una variedad de formatos de audio y visuales).

1.9. Software de Inteligencia Artificial

1.9.1. Este tipo de Software hace uso de algoritmos no numéricos para resolver problemas complejos para los que no son adecuados el cálculo o el análisis directo.

1.10. Características que diferencian a un software de otro.

1.10.1. - Complejidad - Significado y forma de la información de entrada y salida. - Compartir recursos - La interacción con el Hardware (HW) - El objetivo para lo que fueron diseñados

2. Disciplina de la ingeniería de software

2.1. Disciplina importante de la Computación

2.1.1. • La ingeniería de software es una disciplina formada por un conjunto de métodos, herramientas y técnicas que se utilizan en el desarrollo de los programas informáticos (software). • Esta disciplina trasciende la actividad de programación, que es el pilar fundamental a la hora de crear una aplicación. • El ingeniero de software se encarga de toda la gestión del proyecto para que éste se pueda desarrollar en un plazo determinado y con el presupuesto previsto.

2.1.2. La ingeniería de software, por lo tanto, incluye el análisis previo de la situación, el diseño del proyecto, el desarrollo del software, las pruebas necesarias para confirmar su correcto funcionamiento y la implementación del sistema.

2.1.3. Desarrollo importante en 1990

2.1.3.1. • La Ingeniería Computacional se fortalece como un campo separado de la ingeniería Electrónica. • La Ciencia Computacional crece rápidamente y se convierte en una disciplina académica. • La Ingeniería de Software emerge como un área dentro de las Ciencias Computacionales. • La Ingeniería de Software empieza a desarrollarse como una disciplina.

2.2. Descripción de la disciplina.

2.2.1. Es la disciplina del desarrollo y mantenimiento de software confiable y eficiente que satisface todos los requisitos que los clientes han definido.

2.2.1.1. Ha evolucionado en respuesta a factores tales como el creciente impacto de los sistemas de software grandes y costosos en una amplia gama de situaciones, y la creciente importancia del software en aplicaciones de seguridad crítica.

2.2.1.2. Los estudiantes de ingeniería de software aprenden más acerca de la fiabilidad y mantenimiento de software y se centran más en las técnicas de desarrollo y mantenimiento del software correcto desde su inicio.

2.2.1.3. El estudiante de esta disciplina debe aprender a evaluar las necesidades de los clientes y desarrollar un software útil que cumpla con esas necesidades.

2.2.1.4. Saber proporcionar software realmente útil y utilizable es de vital importancia

3. Los Sistemas de Información en las empresas

3.1. Retos Gerenciales

3.1.1. Integración: Sistemas diferentes sirven a diferentes funciones. Conectar niveles organizativos es difícil y costoso.

3.1.2. Incrementar el alcance de la visión de los directivos: Las grandes inversiones en sistemas con tiempos de desarrollo (implementación) elevados deben seguir objetivos comunes.

3.2. Principales tipos de Sistemas de Información (SI)

3.2.1. Transaction Processing Systems (TPS): Sistemas básicos del negocio que sirven a los niveles operativos Sistema computarizado que realiza y recolecta información de la rutina diaria de transacciones necesarias para llevar adelante el negocio

3.2.2. Knowledge Management Systems (KMS): Plasmar los conocimientos de la organización en un soporte digital. Manuales de procedimientos. Formación (incluye el e-learning, cápsulas, etc.). Transmisión del conocimiento. Desarrollos colaborativos. Comunicación total (horizontal, vertical, diagonal).

3.2.3. Management Information System (MIS): Utilizados a nivel de directivos medios Inputs: Grandes volúmenes de datos Outputs: informes con datos procesados (procesos simples) Decisiones estructuradas o semi-estructuradas. Orientados a informes de control. Datos presentes y pasados. Orientación interna.

3.2.4. Decision Support System (DSS): Utilizan poco volumen de datos Generalmente se requiere interacción Analizar decisiones Utilizado por profesionales y staff

3.2.5. Executive Support System (ESS): Inputs: datos agregados Outputs: Proyecciones Se utilizan a nivel estratégico por la alta dirección Diseñado para uso individual Enlaza al CEO con todos los niveles Mantenimiento muy caro Grandes necesidades de personal de soporte

4. Responsabilidad y Ética en la Profesión

4.1. ¿Cuáles son los retos fundamentales que afronta la ingeniería del software?

4.1.1. El reto de la heterogeneidad. Desarrollar técnicas para construir software confiable que sea lo suficientemente flexible para adecuarse a esta heterogeneidad.

4.1.2. El reto de la entrega. Reducir los tiempos de entrega para sistemas grandes y complejos sin comprometer la calidad del sistema.

4.1.3. El reto de la confianza. Desarrollar técnicas que demuestren que los usuarios pueden confiar en el software. Los retos no son independientes. Es necesario desarrollar nuevas herramientas y técnicas, así como formas innovadoras de combinación y uso de métodos de ingeniería del software existentes.

4.2. Responsabilidad profesional y ética

4.2.1. La ingeniería del software se lleva a cabo dentro de un marco legal y social que limita la libertad de los ingenieros.

4.2.2. Los ISW deben aceptar que su trabajo comprende responsabilidades más amplias que simplemente la aplicación de habilidades técnicas.

4.2.3. Deben comportarse de una forma ética y moral responsable.

4.2.4. No basta con poseer estándares normales de honestidad e integridad.

4.2.5. 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.

4.2.6. Existen áreas donde los estándares de comportamiento aceptable no están acotados por las leyes, sino por la responsabilidad profesional.

4.2.6.1. Algunas de éstas son

4.2.6.1.1. Confidencialidad. Respetar la confidencialidad de sus empleadores o clientes, independientemente de que se haya firmado un acuerdo formal de confidencialidad.

4.2.6.1.2. Competencia. No debe falsificar su nivel de competencia, ni aceptar conscientemente trabajos que están fuera de su capacidad.

4.2.6.1.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.2.6.1.4. Uso inapropiado de las computadoras. No debe emplear sus habilidades técnicas para utilizar de forma inapropiada las computadoras de otras personas. Desde los relativamente triviales (utilizar juegos en la máquina de un empleado, por ejemplo) hasta los extremadamente serios (difusión de virus).

4.3. Código de Ética (ACM/IEEE)

4.3.1. Los ingenieros de software deberán comprometerse consigo mismos en convertir el análisis, especificación, diseño, desarrollo, prueba y mantenimiento de software en una profesión respetable y beneficiosa. De acuerdo con su compromiso con la salud, seguridad y bienestar del público, los Ingenieros de Software deberán apegarse a Ocho Principios

5. Cualidades del software

5.1. CORRECTO:

5.1.1. Un software es correcto si se comporta de acuerdo a su especificación La definición supone: - La existencia es una especificación de requisitos. - La posibilidad de determinar sin ambigüedad la correspondencia entre la especificación y el diseño. - Lo correcto del software puede probarse ejecutándolo o mediante análisis.

5.2. CONFIABLE:

5.2.1. El software se comporta de acuerdo con lo esperado por el usuario. - A diferencia de la corrección, la confiabilidad es algo relativo. - El mercado puede admitir algunos errores en el software siempre que en general se comporte en forma esperada. - La confiabilidad es relativa: un SW puede aún ser confiable si la consecuencia de un error no es seria; o si la cantidad de errores por unidad de tiempo no es alta.

5.3. ROBUSTO:

5.3.1. Si se comporta en forma razonable aún en situaciones no anticipadas. - Datos de entrada incorrectos o fallas de hardware son las situaciones mas frecuentes. - La cantidad de código que se dedica a hacer el software robusto depende de la experiencia de los usuarios o lo crítico de su misión. - Si algo se especifica como requerimiento, cumplirlo es cuestión de corrección; si no está en los requerimientos es cuestión de robustez.

5.4. EFICIENCIA:

5.4.1. Si usa su recursos de forma eficiente - Muy lento, baja la productividad del proceso. - Usa mucho disco puede ser muy caro ejecutarlo. - Usa mucha memoria puede afectar la performance de otros sistemas - Los criterios de eficiencia varían con la tecnología y el tiempo

5.5. AMIGABLE:

5.5.1. Si los usuarios lo encuentran fácil de utilizar

5.5.1.1. Depende de los usuarios.

5.5.1.1.1. Novatos: Es mejor largos mensajes explicativos

5.5.1.1.2. Expertos: Aprecian los atajos.

5.5.2. La interfaz es parte esencial de ser amigable.

5.6. VERIFICABLE:

5.6.1. Si sus propiedades pueden ser verificadas - La corrección y el desempeño son verificables fácilmente. - La verificación puede hacerse mediante análisis o testing. También se verifica Monitoreos de código Diseño modular Disciplina en la codificación Lenguaje de programación adecuado

5.7. REUTILIZABLE/REUSABLE:

5.7.1. Software ya construido se usa con pocos o ningún cambio - La reutilización es mas apropiada para componentes que para sistemas completos - Las bibliotecas (librerías) son los ejemplos más conocidos. - Debe apuntarse a ella desde el diseño. - La reutilización es una cualidad difícil (imposible) de conseguir a posteriori. - La orientación a objetos tiene potencial para mejorar la reutilización y la evolución.

5.8. PORTABLE:

5.8.1. Si puede ejecutarse en distintos ambientes (HW - SO, etc) - Una forma de lograr portabilidad es suponer la mínima configuración. - Esto penaliza los sistemas que podrían ejecutarse mejor haciendo uso del ambiente disponible. - Otra opción es determinar sobre la marcha las disponibilidades del ambiente.

5.9. INTEROPERABLE:

5.9.1. Si puede coexistir y cooperar con otros sistemas - Las componentes reutilizables son interoperables. - La estandarización de las interfaces promueve la interoperabilidad. - Los sistemas abiertos son casos típicos de sistemas interoperables.

5.10. PRODUCTIVO:

5.10.1. Eficiencia del proceso de desarrollo de software - La productividad de un equipo de desarrollo es generalmente menor que la suma de las productividades individuales. - Existen métricas para medir la productividad (LOCK, puntos de función, etc.) - La automatización y el soporte del software de desarrollo aumenta la productividad.

5.11. VISIBLE:

5.11.1. Si todos sus pasos están claramente documentados, y se puede saber su estado de avance en cada momento. - Diseño, testing, codificación e integración pueden suceder simultáneamente, pero deben coordinarse. - La visibilidad ayuda a evaluar el impacto de las decisiones. - También es esencial cuando existe rotación en el personal.

5.12. COHESIÓN :

5.12.1. Medida de la relación entra las partes de un componente.

5.12.2. Coincidental: No relacionados.

5.12.3. Lógica: Funciones similares.

5.12.4. Temporal: Ejecución simultánea.

5.12.5. Procedural: Secuencia de control.

5.12.6. Comunicacional: Comparten el Input (entrada).

5.12.7. Secuencial: Output de uno es input de otro.

5.12.8. Funcional: Todas las partes son necesaria para la función.

5.12.9. Objeto: Todas las acciones actúan sobre los mismos datos del objeto

5.13. ACOPLAMIENTO :

5.13.1. Medida de la interdependencia de distintas componentes - Sistemas muy acoplados: Comparten variables o información de control - Sistemas desacoplados: Interfaces definidas con listas de parámetros.

5.14. COMPRENSIBLE:

5.14.1. Si es fácil de comprender cómo funciona

5.14.2. Características que afectan la comprensibilidad del sistema:

5.14.3. Cohesión y acoplamiento

5.14.4. Nombres

5.14.5. Documentación

5.14.6. Complejidad

5.14.7. Si un sistema es comprensible, es también mantenible y verificable.

5.14.8. Desde un punto de vista del usuario, ser comprensible es ser amigable y robusto.