Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Unidad V Aplicaciones
Semestre 2023-2
7 de Mayo de 2023
Tema 5.1
Análisis del problema y elaboración del algoritmo
Desde hace unos 25 años, el software cada vez está más presente en los negocios,
empresas, en nuestras vidas cotidianas y debemos ser conscientes de ello. Hasta
el punto de que casi cualquier acción que queramos realizar a lo largo del día implica
interactuar con el software de uno u otro modo. Desde el programa informático de
citas que utiliza nuestro dentista, a los carteles informativos que vemos en el metro,
las máquinas que controlan nuestro cuerpo durante una operación, sacar dinero de
un cajero, el hecho de llamar por teléfono, que se extraiga el tren de aterrizaje de
un avión, o realizar una compra.
Podríamos pasarnos un día entero poniendo ejemplos sobre lo incluida que está la
informática en nuestras vidas. La sociedad cada día requiere de sistemas
informáticos más completos, robustos y eficaces o lo que es lo mismo, sistemas de
software de gran calidad. Sobre todo en aquellos de los que dependen nuestras
propias vidas, ya que lo cierto es que se produzca un error en el programa de citas
por mucho que nos afecte no es vital, pero siempre querremos evitar un fallo en la
máquina que controla nuestra vida mientras estamos bajo los efectos de la
anestesia general en una operación.
Con este ejemplo queda claro que el impacto de un fallo de un sistema a otro es
muy diferente: pérdida de tiempo, problema medioambiental, pérdidas económicas
o incluso de vidas humanas. Y por ello, tendrán diferente coste de control. Pero sin
duda alguna, el factor común a todas ellas es que se debe cuidar mucho la calidad
de los servicios disponibles para nuestro bienestar. Es en este punto donde entra la
ingeniería de software y más en concreto la fase de calidad de software. Una fase
que día a día cobra más fuerza porque la experiencia está demostrando que fallos
en el software van a existir, así que cuanto antes se localicen, menores serán las
consecuencias que puedan ocasionar. Un fallo puede ser ocasionado por diversos
motivos :
- El principal es el fallo humano. Ya sea un fallo en documentación, en codificación,
o provocado por las condiciones en las que se generó el software, como presión
temporal, complejidad de infraestructura o código o cambio tecnológico.
- En otras ocasiones son las condiciones ambientales las que pueden ocasionar
fallos al modificar el hardware y afectar a la ejecución del software. Magnetismo,
radiación, contaminación, etc
Partimos del hecho de que un programador no puede resolver un problema que
no entiende. Por esta razón, la primera etapa en todo proceso de construcción de
software consiste en tratar de entender el problema que tiene el cliente, y expresar
toda la información que él suministre, de manera tal que cualquier otra persona
del equipo de desarrollo pueda entender sin dificultad lo que espera el cliente de
la solución. Esta etapa se denomina análisis y la salida de esta etapa la llamamos
la especificación del problema.
Sería una pérdida de tiempo y de recursos para el ingeniero civil, intentar construir
la carretera si no ha entendido y definido claramente los tres puntos antes
mencionados. Y más que tiempo y recursos, habrá perdido algo muy importante
en una profesión de servicio como es la ingeniería, que es la confianza del cliente.
En general, todos los problemas se pueden dividir en estos tres aspectos. Por
una parte, se debe identificar lo que el cliente espera de la solución. Esto se
denomina un requerimiento funcional. En el caso de la programación, un
requerimiento funcional hace referencia a un servicio que el programa debe
proveer al usuario.
El proceso debe ser entendido como un orden en el cual se debe desarrollar una
serie de actividades que van a permitir construir un programa. El proceso
planteado tiene tres etapas principales, todas ellas apoyadas por herramientas y
lenguajes especiales:
Cada una de las etapas de desarrollo está apoyada por herramientas y lenguajes,
que van a permitir al programador expresar el producto de su trabajo. En la etapa
de construcción de la solución es conveniente contar con un ambiente de
desarrollo que ayuda, entre otras cosas, a editar los programas y a encontrar los
errores de sintaxis que puedan existir.
El último elemento que forma parte de la solución son las pruebas. Allí se tiene
un programa que es capaz de probar que el programa que fue entregado al cliente
funciona correctamente. Dicho programa funciona sobre un conjunto predefinido
de datos, y es capaz de validar que para esos datos predefinidos (y que simulan
datos reales), el programa funciona bien.
Diagrama de flujo: Representan de forma visual el flujo de los datos a través del
tratamiento de información. Los diagramas de flujo describen que operaciones y en
que secuencia se requieren para solucionar un problema dado. Los diagramas de
flujo se dibujan generalmente usando algunos símbolos estándares.
-Los Diagramas de flujo deben escribirse de arriba hacia abajo, y/o de izquierda a
derecha. -
Los símbolos se unen con líneas, las cuales tienen en la punta una flecha que indica
la dirección que fluye la información procesos, se deben de utilizar solamente líneas
de flujo horizontal o verticales (nunca diagonales). -Se debe evitar
el cruce de líneas, para lo cual se quisiera separar el flujo del diagrama a un sitio
distinto, se pudiera realizar utilizando los conectores. Se debe tener en cuenta que
solo se van a utilizar conectores cuando sea estrictamente necesario.
-No deben quedar líneas de flujo sin conectar.
-Todo texto escrito dentro de un símbolo debe ser legible, preciso, evitando el uso
de muchas palabras. –-
Todos los símbolos pueden tener más de una línea de entrada, a excepción del
símbolo final.
-Solo los símbolos de decisión pueden y deben tener más de una línea de flujo de
salida (unam.mx, s.f.).
Pseudocódigo: Es una técnica que sirve para escribir programas de computadora
en lenguaje natural de tal manera que se facilite la comprensión, prueba y posterior
codificación en un lenguaje de programación específico
Es muy fácil pasar de pseudocódigo a un programa en algún lenguaje de
programación, si se siguen las reglas se puede observar claramente los niveles que
tiene cada operación.
Prueba de escritorio: Todo algoritmo debe ser probado antes de ser ejecutado para
tener la certeza de que lograremos el objetivo. La forma de probarlo es siguiente
cada uno de los pasos que indica el algoritmo. A esto le llamaremos prueba de
escritorio. En la prueba de escritorio, un algoritmo bien hecho siempre debe
funcionar
Al poner en marcha los pasos del algoritmo para determinar si logrará o no el
objetivo, tal vez se tengan que hacer algunas modificaciones hasta logar el objetivo
esperado. El algoritmo debe ser lo suficientemente detallado para que no exista
duda alguna al ejecutarse.
Tema 5.2
Codificación e implementación
Durante esta etapa se realizan las tareas que comúnmente se conocen como
programación; que consiste, esencialmente, en llevar a código fuente, en el lenguaje
de programación elegido, todo lo diseñado en la fase anterior. Esta tarea la realiza
el programador, siguiendo por completo los lineamientos impuestos en el diseño y
en consideración siempre a los requisitos funcionales y no funcionales (ERS)
especificados en la primera etapa.
Se suele hacer estimaciones de un 30% del tiempo total insumido en la
programación, pero esta cifra no es consistente ya que depende en gran medida de
las características del sistema, su criticidad y el lenguaje de programación elegido.7
En tanto menor es el nivel del lenguaje mayor será el tiempo de programación
requerido, así por ejemplo se tardaría más tiempo en codificar un algoritmo en
lenguaje ensamblador que el mismo programado en lenguaje C.
Mientras se programa la aplicación, sistema, o software en general, se realizan
también tareas de depuración, esto es la labor de ir liberando al código de los errores
factibles de ser hallados en esta fase (de semántica, sintáctica y lógica). Hay una
suerte de solapamiento con la fase siguiente, ya que para depurar la lógica es
necesario realizar pruebas unitarias, normalmente con datos de prueba; claro es
que no todos los errores serán encontrados sólo en la etapa de programación, habrá
otros que se encontrarán durante las etapas subsiguientes. La aparición de algún
error funcional eventualmente puede llevar a retornar a la fase de diseño antes de
continuar la codificación.
Las pruebas integrales se tienen que aplicar justo después de haber llevado a cabo
cada prueba unitaria con la intención de probar los métodos aplicados en el
desarrollo. Si no existen ningún problema de código y las pruebas unitarias han
terminado de forma exitosa se podrá pasar al test integral para asegurarse de que
en este punto no se produce ningún tipo de problema en la combinación de
elementos unitarios. El motivo principal se encuentra en que el test integral lleva a
cabo la revisión conjunta de los diferentes elementos que están presentes con el
objetivo de formar el software. Se realiza la comprobación para ver que todo
funciona de una manera adecuada en conjunto, dado que no es extraño que se
produzcan alteraciones en el rendimiento.
Durante este proceso en el cual se verifican los distintos tipos de integración, los
especialistas tendrán que ensamblar los módulos independientes, dar forma al
software al completo y verificar el proceso a conciencia. Una de las ventajas de este
protocolo se encuentra en la oportunidad de llevar a cabo pruebas de una manera
paralela, lo que aporta flexibilidad extra en el proceso de calendarización. Para ello
se optará por la elección de frameworks en los que las pruebas se puedan
combinar con el desarrollo y con la supervisión simplificada de los procesos,
especialmente en aquellos casos en los que las pruebas puedan ser un poco más
complejas. El resultado garantizará que el proyecto de software pueda avanzar
hacia su siguiente fase antes de darse por finalizado.
Cada fase del testing tiene unas exigencias y unos puntos clave en los que nos
debemos fijar. Eso es algo que siempre tenemos que tener en cuenta para que el
testing resulte satisfactorio y no terminemos sufriendo demasiadas complicaciones.
Por lo tanto, en la fase de la prueba funcional en lo único que nos tendremos que
fijar es en que se produzca el tipo de soporte que tenemos en mente cuando
hablamos del software en cuestión. Analizaremos las salidas y las entradas que se
produzcan al software, así como los resultados. No importa en este caso si en el
diseño del software se ha encontrado algún tipo de defecto o posible mejora, dado
que la cuestión en esta prueba consiste en comprobar el funcionamiento. Por lo
tanto, hemos pasado a un proceso que después de comprobar que todo está en su
sitio nos indica si realmente tiene un buen rendimiento, algo clave para poder
colocarse en el perfil del cliente y comprobar que vaya a obtener el nivel de
satisfacción requerido.
Para finalizar el tema del esfuerzo necesario a emplear en pruebas, diremos que
teniendo en cuenta los problemas generales que hemos identificado (ámbito,
alcance y costes) utilizaremos los conocimientos teóricos sobre el diseño de casos
de prueba para poder definir un conjunto finito y viable y que por supuesto, aporte
fiabilidad y calidad, ya sea a un software nuevo o a uno ya existente.
Mantenimiento
Tipos de mantenimiento: