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 sí 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:
- Formulario (Ingreso del usuario)
- Presentador
- Modelo
- Módulo
- 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.