Clase 1 - Introducción Flashcards

1
Q

¿Qué es la Ingeniería de Software?

A

La Ingeniería de Software es la aplicación de un enfoque sistemático (nos debería dar un sistema para generar un software de alta calidad), disciplinado (que debería hacer), y cuantificable (para poder medir y clasificar) al desarrollo, operación, y mantenimiento del software.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Qué es un software?

A

Es una colección de programas, procedimientos, documentación y datos asociados que determinan la operación de un sistema de computación.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Cuales son los desafíos de la Ingeniería del Software?

A

Escala

El problema de la escala.

A veces, los métodos usados para desarrollar sistemas pequeños no son escalables para sistemas grandes. De manera similar, métodos usados para solucionar problemas grandes suelen no ser escalables para solucionar problemas pequeños. Sin embargo, lo que se desea es generar soluciones a problemas que puedan ser escalables. Dos dimensiones a considerar para la escalabilidad

  • Métodos de ingeniería.
  • Administración del proyecto.

<aside>
💡 Los métodos de la Ingeniería de Software deben ser escalables.

</aside>

Consideraremos un proyecto como muy grande cuando cuando posea más de 1000 KLOC, como grande de 100 a 1000 KLOC, mediano cuando posea de 10 a 100 KLOC y pequeño cuando tengan menos de 10 KLOC.

<aside>
💡 Está de más destacar que estas medidas son relativas y que pueden cambiar con el tiempo.

</aside>

  • EjemploPej. el método que usemos para contar personas en una habitación (puede ser contar por filas o por columnas) no será el mismo que tomaremos para realizar un censo en un país y eso que en ambos casos, estamos contando personas

Productividad

La Ingeniería de Software está motivada por el cronograma y el costo, en donde

  • El costo hace referencia al costo de producción, el cual está liderado por el costo de la mano de obra (medido por person-month).
  • El cronograma hace referencia al tiempo de producción, el cual debe ser lo más corto posible (medido en **time-to-market**).

Entonces, la productividad es medida usando KLOC / person-month, dado que esto captura ambos conceptos.

<aside>
⚠️ Mientras más alta sea, menor es el costo y/o menor es el tiempo.

</aside>

Calidad

La Ingeniería del **Software** usa la definición de calidad propuesta por el estándar IEEE, el cual se basa en seis atributos principales llamados características

<aside>
💡 La calidad de un **********software********** es difícil de medir.

</aside>

CARACTERÍSTICAS (estándar ISO)

  • Funcionalidad, capacidad de proveer funciones que cumplen con las necesidades establecidas o implicadas en los requerimientos.
  • Confiabilidad, capacidad de realizar las funciones requeridas bajo las condiciones establecidas durante un tiempo específico.
  • Usabilidad, capacidad de ser comprendido, aprendido y usado.
  • Eficiencia, capacidad de proveer un desempeño adecuado de acuerdo a la cantidad de recursos utilizados.
  • Mantenibilidad, capacidad de ser modificado con el propósito de corregir, mejorar o adaptar.
  • Portabilidad, capacidad de ser adaptado a distintos entornos sin aplicar acciones extras a las provistas en el producto.
  • Características (desde Boehm ‘76)
    • Correctitud: cuando un programa se comporta según las especificaciones.
    • Confiabilidad: cuando un programa se comporta de la misma manera a lo largo del
      tiempo en un mismo entorno operativo.
    • Robustez: la medida en que un programa puede recuperarse de errores o entradas
      inesperadas.
    • Rendimiento: la medida en que un programa utiliza los recursos informáticos de
      forma económica. El rendimiento está directamente determinado por la cantidad de
      instrucciones que debe ejecutar un programa para realizar sus operaciones.
    • Portabilidad: el grado en que una implementación puede ejecutarse en diferentes
      plataformas sin ser modificada.
    • Interoperabilidad: la medida en que un sistema puede interactuar sin problemas con
      otros sistemas, generalmente mediante el uso de estándares.
    • Seguridad: la medida en que solo las personas autorizadas pueden acceder a la
      información en un sistema de software.
    • Verificabilidad: El esfuerzo requerido para verificar que el software hace lo que está
      destinado a hacer.
    • Mantenibilidad: La medida en que el software se puede corregir, adaptar o
      perfeccionar. Esto depende principalmente de cuán comprensible sea la implementación de un programa.
    • Reutilización: La medida en que los componentes de un programa se pueden utilizar para fines no deseados.
    • Learnability: La facilidad con la que una persona puede aprender a operar un programa.
    • Eficiencia del usuario: La velocidad con la que una persona puede realizar tareas con un
      programa.
    • Accesibilidad: La diversidad de habilidades físicas o cognitivas que pueden operar con
      éxito el software.
    • Utilidad: La medida en que el software resuelve un problema.
    • Privacidad: La medida en que un sistema impide el acceso a información destinada a una
      audiencia o uso en particular.
    • Coherencia: La medida en que la funcionalidad relacionada en un sistema aprovecha las
      mismas habilidades, en lugar de requerir nuevas habilidades para aprender a usarlas.
    • Usabilidad: Esta cualidad engloba todas las cualidades anteriores. Lo usamos para
      representar cualquier cualidad que afecte la capacidad de alguien para usar un sistema.
    • Sesgo: Las múltiples formas en que el software puede discriminar, excluir o ampliar o
      reforzar las estructuras discriminatorias o excluyentes en la sociedad

Hay dos consecuencias importantes de tener múltiples conceptos de calidad

  1. La calidad no se reduce a un número o un parámetro.
  2. El concepto de calidad depende del proyecto.

<aside>
📌 La meta como desarrollador es satisfacer los objetivos de calidad **especificados previamente** para el proyecto en cuestión.

</aside>

Consistencia y repetitividad

Consiste en asegurar que los resultados exitosos puedan repetirse. Si se produce un sistema tras otro con buena calidad, entonces podemos decir que los métodos utilizados para desarrollar ese software estarían generando consistencia y es importante debido a que con consistencia es posible predecir el resultado de un proyecto con una precisión razonable.

<aside>
⚠️ Sin consistencia sería difícil estimar costos.

</aside>

Cambio

Los cambios en las empresas o instituciones son lo más habitual. Es por eso, que el software debe poder cambiar para adaptarse a dichos cambios, es decir, las prácticas utilizadas por la Ingeniería deben preparar al software para que sea fácilmente modificable.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Por qué el desarrollo se divide en etapas?

A

Es el enfoque que toma la Ingeniería del Software, en donde un proceso se divide en varias fases las cuales terminan con una salida definida y poseen un orden preciso entre ellas.

La razón principal de esta división es dividir el problema completo en un conjunto de fases a desarrollar, donde cada una maneja una preocupación diferente del software. Incluso, un proceso dividido en fases nos permite verificar la calidad y el progreso en el final de cada fase. Estas fases a menudo son entregadas a un equipo de trabajo o a personas individualmente por lo que facilitan a su vez saber **donde** el **software**** está fallando y “echar culpas”.

Las fases en las cuales se divide el desarrollo son las siguientes:

  • El análisis de requisitos y especificación, cuyo objetivo es entender y comprender el problema.
  • La arquitectura y diseño, para decidir cual es el plan para la solución.
  • La codificación, para implementar la solución planteada.
  • El testing, para verificar los programas creados.
  • La entrega, instalación y mantenimiento.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly