Fundamentos de Desarrollo de Software: Conceptos Clave y Mejores Prácticas


1. Conceptos Básicos de Software

1.1. Componentes del Software:

El software se compone de:

  • Programa en lenguaje de programación
  • Estructura y la base de datos
  • Documentación de desarrollo
  • Documentación de usuarios
  • Manual de procedimientos

Todo esto es directa responsabilidad del equipo de desarrollo del software. VERDADERO

1.2. Características del Software:

Son características del software:

  • Ser lógico
  • No se deteriora
  • Se desarrolla
  • No hay repuesto
  • Es a medida de necesidades
  • Posee fallos por ser un desarrollo humano

FALSO porque el software se deteriora.

1.3. Expectativas del Software:

Del software se espera que sea:

  • Fiable: Dando la respuesta que se espera de él.
  • Eficiente: Logrando el objetivo de dar satisfacción al requerimiento del usuario.
  • Amigable: Exigiendo poco entrenamiento y logrando que sea intuitivo y sencillo en su utilización.
  • Usable: Que logre la inmediata adaptación de la tarea a lo que el software exige.

VERDADERO

2. Proceso de Desarrollo de Software

2.1. Modelo General del Proceso:

El modelo general del proceso de desarrollo de software contempla en este orden:

  • Comunicación con el cliente / usuario
  • Planeación de las actividades a ejecutar
  • Modelado de análisis y diseño
  • Construcción
  • Pruebas (Pruebas de caja blanca/negra)
  • Despliegue o puesta en producción

FALSO: La prueba nunca es después de la producción.

2.2. Pruebas de Caja Negra:

Para realizar las pruebas de caja negra se tiene en cuenta:

  • Las rutas independientes
  • La relevancia de cada ruta independiente para sujetarse a pruebas futuras
  • Pruebas internas de control del código (condiciones, flujo de datos, bucles, etc.) con datos válidos e inválidos
  • La inferencia de datos y los resultados esperados

FALSO: La complejidad ciclomática es de caja blanca.

2.3. Programación con Enfoque en Procedimientos:

La programación con enfoque en procedimientos tiene en cuenta:

  • Las funcionalidades
  • La secuencia de instrucciones

FALSO: En el enfoque a procedimientos es el programa quien lleva el control. CRC es un código de detección de errores, no una técnica de clasificación de clases.

2.4. Metodología de Desarrollo Incremental:

La metodología de desarrollo incremental se caracteriza por:

  • Aumento iterativo de las funciones entregadas
  • Flujos de trabajo paralelos pero desfasados
  • Requerimientos no completamente conocidos al inicio del desarrollo

FALSO: Los flujos no son lineales y los requerimientos no son conocidos totalmente al inicio.

3. Programación Orientada a Objetos

3.1. Conceptos de Orientación a Objetos:

Cuando hablamos de «orientación a objetos» pensamos en cuestiones tales como:

  • Métodos lógicos, rápidos y detallados para el desarrollo de software complejo
  • Negocio en evolución
  • Utilización de UML con diagramas que aportan herramientas de análisis y diseño
  • Reciclaje como forma de reducir costos de desarrollo
  • El objeto involucrando a los datos y el código
  • La clase representando cosas o eventos de la realidad
  • La categorización de objetos en clases y subclases
  • Herencia

VERDADERO

3.2. Interfaz de Usuario:

La interfaz de usuario debe:

  • Evitar acciones innecesarias
  • Ser flexible
  • Reducir la carga de memoria del usuario
  • Permitir el control de las interrupciones y reversiones
  • Lograr expertise
  • Minimizar el tiempo de entrenamiento
  • Gestionar los tiempos de respuesta comunicando al usuario
  • Ser consistente con la tarea que con el aplicativo se ejecuta

FALSO: Debe ser flexible y no es obligatorio usar el estándar del mercado.

3.3. Principios de la Prueba de Software:

Entre los principios directrices de la prueba podemos encontrar:

  • La prueba debe ser rastreable al requisito
  • Su planeamiento se inicia cuando se dispone del código en condiciones de probar
  • Se prueba desde lo más pequeño a lo más grande (desde la unidad de los módulos hacia la integración)
  • Se deben procurar pruebas lo más exhaustivas posibles, dentro de las limitaciones de tiempo y costo
  • La ejecución de la prueba no garantiza la detección del error, solo aumenta la probabilidad de encontrarlo

FALSO: No es posible realizar pruebas exhaustivas por tiempo y costo asociado. Las pruebas no garantizan que se detecte el error, solo aumentan la probabilidad.

3.4. Diagrama de Secuencia:

Es útil utilizar un diagrama de secuencia para describir en forma detallada los métodos que deben construirse de las distintas clases. VERDADERO

3.5. Caso de Uso:

El caso de uso, como herramienta, es de suma utilidad pues describe la interacción del sistema con el usuario y exhibe las funciones que el sistema realizará para dar la respuesta. VERDADERO

FALSO: No contempla el pseudocódigo. Los casos de uso detallan la relación entre actores y sistema a través de las funciones, mostrando el alcance del sistema y cómo responde al actor.

4. Metodologías Ágiles

4.1. Características de las Metodologías Ágiles:

Las metodologías ágiles contemplan:

  • La satisfacción del cliente como meta central
  • Dar valor al negocio
  • Requerimientos cambiantes
  • Documentación mínima
  • Sencillez en el diseño
  • Trabajo colaborativo con el cliente
  • Mínima ingeniería

FALSO: Contemplan que los requerimientos son cambiantes por la realidad del mercado.

4.2. Prototipos:

Los prototipos se caracterizan por ser:

  • Modelos a escala del software lo más realista posible
  • Un modelo operacional parcial
  • El inicio del proceso que se mejora iterativamente hasta el producto entregable

FALSO: Solo es una maqueta que busca el refinamiento de los requerimientos del usuario.

5. Diseño de Software

5.1. Principios de Diseño:

El diseño contempla un conjunto de principios que la profesión entiende como directrices, entre ellos:

  • Rastreabilidad a los requerimientos
  • La interfaz de usuario debe desarrollarse con extremo cuidado
  • El diseño de datos es tan importante como el funcional, y ambos se influyen mutuamente
  • El diseño a nivel componente debe considerar la independencia funcional

VERDADERO (con la aclaración sobre la importancia del diseño de datos).

5.2. Arquitectura de Negocio:

Es relevante para el desarrollo de un software conocer la arquitectura de negocio para dar efectiva respuesta a sus necesidades. Así se identifican:

  • Áreas de negocio en las que la organización actúa
  • Procesos de negocio (de negocio propiamente dichos o primarios, de soporte y de apoyo, y de servicios generales)
  • Funciones de negocio definidas por el modelo organizacional adoptado para hacer frente al negocio, y que desde la visión del software, tienen especial relevancia para su construcción, integrándose para soportar informáticamente a los procesos de negocio

VERDADERO

5.3. Estilos Arquitectónicos de Software:

Constituyen típicos estilos arquitectónicos de software los siguientes:

  • Centrado en datos
  • Flujo de datos
  • Llamado y retorno
  • De capas

FALSO: Prototipos y espiral son metodologías de desarrollo, no estilos arquitectónicos.

5.4. Historias de Usuario:

Ventajas de la historia de usuario:

  • Describe necesidades concretas
  • Se origina en una fuente externa (usuario o área definidora)
  • Permite el trabajo colaborativo con el usuario
  • Facilita la estimación de esfuerzos (presupuestos)

FALSO: No utiliza herramientas gráficas obligatoriamente.

5.5. Diagramas de Flujo:

Los Diagramas de Flujos constituyen herramientas muy difundidas para el análisis y el diseño, caracterizándose por:

  • Ser herramientas de comprensión y decisión temprana sobre aspectos de la lógica del sistema
  • Permiten la comprensión de la relación entre el sistema y subsistemas, y entre el sistema y su entorno
  • Su desarrollo implica un proceso descendente desde un gráfico de alto nivel de agregación y abstracción (diagrama de contexto) hacia gráficos con mayor nivel de detalle
  • Permiten la comunicación sencilla con los usuarios
  • Exhiben la relación entre las entidades o terminales, los procesos y los almacenes de datos
  • A partir de los DFD se realiza el mapeo de flujos de transformación y de transacción, como buena práctica para el diseño

FALSO: Permiten ver qué hará la organización y el software según su conceptualización, sin implicaciones técnicas específicas.

5.6. Clases:

Las clases se componen de atributos y sus métodos. En forma genérica, podemos decir que existen clases de entidad, de interfaz / límites, y de control o coordinación. VERDADERO. Las de control y coordinación están en el diagrama de secuencia.

5.7. Herramientas UML:

Algunas de las herramientas más usadas del UML son:

  • Diagrama de casos de uso
  • Escenario de caso de uso
  • Diagrama de secuencia
  • Diagrama de clases
  • Diagrama de actividad

FALSO: DER y diagrama de contexto no pertenecen a UML.

5.8. Contenido de los Casos de Uso:

Los casos de uso en su contenido dependen esencialmente del estándar utilizado, pero en general contienen los siguientes elementos:

  • Nombre
  • Actores
  • Área responsable
  • Objetivo o meta
  • Condiciones previas
  • Instancias de tareas / de interacción con el software y las situaciones de excepciones
  • Prioridad
  • Riesgo
  • Frecuencia de uso
  • Características especiales de interfaz de usuario
  • Salida del sistema

Verdadero

6. Conceptos de C#

6.1. Operador ==:

El operador == de C# siempre resulta en true cuando las expresiones de ambos lados se resuelven en referencias al mismo objeto. VERDADERO

6.2. Variables y Objetos:

  • Dos variables pueden hacer referencia a un mismo objeto. FALSO
  • Una variable puede no apuntar a ningún objeto (valor null). FALSO

6.3. Copia de Objetos:

Cuando se iguala una variable a otra (var a = b) no siempre se crea una copia del objeto referenciado. Esto depende del tipo de dato del objeto referenciado (tipos por valor o por referencia). FALSO

6.4. Clases e Instancias:

Una clase es la definición a partir de la cual se construye una instancia de objeto. VERDADERO

6.5. Responsabilidad del Modelo:

El modelo es responsable de validar que se cumplan las reglas del negocio. VERDADERO

6.6. Secuencia de Elementos:

Numere del 1 al 5 los siguientes elementos en secuencia desde el ingreso del usuario hasta la persistencia en archivos o base de datos:

  1. Formulario (Ingreso del usuario)
  2. Presentador
  3. Modelo
  4. Módulo
  5. Almacenamiento (Persistencia en archivos o base de datos)

6.7. Representación de Datos:

  • ¿Con qué clase representaría la duración de un plazo fijo? TimeSpan
  • ¿Cuál es la clase más apropiada para almacenar una fecha? DateTime

6.8. Afirmaciones sobre Clases:

Marque las afirmaciones correctas:

  • Una clase es la definición a partir de la cual se construye una instancia de objeto. VERDADERO
  • Una clase estática es aquella de la que sólo existe una única instancia. VERDADERO
  • Un objeto de tipo Dictionary representa una colección de pares clave/valor. VERDADERO
  • Un método estático debe invocarse utilizando el nombre de la clase que lo contiene. VERDADERO
  • El .Net Framework es una colección de librerías que contienen clases. VERDADERO

6.9. Evaluación de Expresiones Booleanas:

bool resultado = ((true && true) && (false == false)) || (1 == 1) || (5 * 5 == 24);

La variable resultado será… true

6.10. Colecciones:

¿En qué tipo de clase de colección almacenaría ud. la lista de pacientes que deben ser atendidos por el médico, teniendo en cuenta que debe respetarse el orden de llegada? Queue<Paciente>

6.11. Objetos en Memoria:

¿Cuántos objetos Alumno se mantienen en memoria?

var a = new Alumno();
var b = a;
var a = new Alumno();
var c = b;
var b = null; 

1

6.12. Value Types:

Seleccione todos los Value Types: bool, DateTime, long, int64, double, single.

6.13. Instanciación de Objetos:

¿Qué significa la siguiente sintaxis?

Auto obj = new Auto();

Estamos instanciando un objeto de tipo Auto.

6.14. Declaración de Arrays:

¿Qué instrucción es más apropiada para declarar una variable que almacene exactamente 15 números enteros?

var lista = new int[15];

6.15. Método TryParse:

Dada la línea de código:

var variable1 = int.TryParse(Console.ReadLine(), out var variable2);

Indique las afirmaciones correctas:

  • variable1 es de tipo bool.
  • Si el usuario ingresa «hola» se produce un error. FALSO. No se produce un error, variable1 será false.
  • Si el usuario ingresa «44» variable1 será false. FALSO. variable1 será true.
  • Si el usuario ingresa «44» variable2 será igual a 44.
  • Si el usuario ingresa «44» variable1 es igual a 44. FALSO. variable1 será true.
  • variable1 es de tipo int. FALSO. variable1 es de tipo bool.
  • Si el usuario ingresa «hola» variable1 será false.

6.16. Diferencia en Segundos:

Dadas las variables horaInicio y horaFin, seleccione el código que determina la diferencia en segundos entre las dos.

var segundos = new TimeSpan(horaFin - horaInicio).TotalSeconds;

6.17. Zonas Horarias:

¿Y si es relevante la zona horaria (ej: 15.30 GMT -3)? TimeZoneInfo

6.18. Bucle For:

Seleccione la opción que completa la instrucción for produciendo la secuencia de números 0, 2, 4, 6, …. 18 (todos los pares entre 0 y 18 inclusive). int i = 0; i < 20; i += 2

6.19. Representación de Precio:

¿Con qué clase representaría ud. el precio de un producto? decimal (es más preciso para valores monetarios que double)

6.20. Pacientes por Documento:

¿Y si los pacientes fuesen llamados arbitrariamente por el médico, por número de documento? Dictionary<long, Paciente>

6.21. Afirmaciones sobre Código:

Marque las afirmaciones verdaderas teniendo en cuenta el siguiente fragmento de código:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Ingrese un numero decimal negativo:");
        var ingreso = Console.ReadLine();
        var esCorrecto = decimal.TryParse(ingreso, out var resultado);
    }
}
  • Puede producirse un error en tiempo de ejecución, en caso de que ingreso sea null. VERDADERO
  • WriteLine es un método de instancia. FALSO. Es un método estático.
  • Main es un método estático de la clase Program.
  • WriteLine es un método estático de la clase Console.
  • Program es una instancia de la clase Console. FALSO. Program es una clase.
  • esCorrecto es una variable de tipo bool y resultado de tipo decimal.

6.22. Lista de Enteros:

¿Qué instrucción es más apropiada para declarar una variable que almacene una cantidad arbitraria de números enteros? var lista = new List<int>();

6.23. .NET Framework:

El .Net Framework es un lenguaje de programación orientado a objetos. FALSO. .NET es un framework, no un lenguaje.

6.24. Bucle Foreach:

Complete la instrucción foreach para obtener las facturas del mes pasado.

foreach(...)
{
    Console.WriteLine(factura);
}

La opción correcta es: var factura in Archivo.ObtenerFacturas(DateTime.Today.AddMonths(-1))

6.25. Palabra Clave Void:

¿Qué significa la palabra reservada void que se emplea en un método? Se refiere a que el método no tiene valor de retorno.

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *