Metodologías de programación - Guía rápida

Cuando los programas se desarrollan para resolver problemas de la vida real como la gestión de inventarios, el procesamiento de nóminas, la admisión de estudiantes, el procesamiento de resultados de exámenes, etc., tienden a ser enormes y complejos. El enfoque para analizar problemas tan complejos, planificar el desarrollo de software y controlar el proceso de desarrollo se denominaprogramming methodology.

Tipos de metodologías de programación

Hay muchos tipos de metodologías de programación que prevalecen entre los desarrolladores de software:

Programación procedimental

El problema se divide en procedimientos o bloques de código que realizan una tarea cada uno. Todos los procedimientos tomados en conjunto forman el programa completo. Es adecuado solo para programas pequeños que tienen un bajo nivel de complejidad.

Example- Para un programa de calculadora que hace suma, resta, multiplicación, división, raíz cuadrada y comparación, cada una de estas operaciones se puede desarrollar como procedimientos separados. En el programa principal, cada procedimiento se invoca según la elección del usuario.

Programación orientada a objetos

Aquí la solución gira en torno a entidades u objetos que forman parte del problema. La solución trata sobre cómo almacenar datos relacionados con las entidades, cómo se comportan las entidades y cómo interactúan entre sí para dar una solución cohesiva.

Example - Si tenemos que desarrollar un sistema de gestión de nóminas, tendremos entidades como empleados, estructura salarial, reglas de licencia, etc. en torno a las cuales se debe construir la solución.

Programación funcional

Aquí el problema, o la solución deseada, se divide en unidades funcionales. Cada unidad realiza su propia tarea y es autosuficiente. Luego, estas unidades se unen para formar la solución completa.

Example - Un procesamiento de nómina puede tener unidades funcionales como mantenimiento de datos de empleados, cálculo de salario básico, cálculo de salario bruto, procesamiento de licencias, procesamiento de reembolso de préstamos, etc.

Programación lógica

Aquí el problema se divide en unidades lógicas en lugar de unidades funcionales. Example:En un sistema de gestión escolar, los usuarios tienen roles muy definidos como profesor de clase, profesor de asignatura, asistente de laboratorio, coordinador, responsable académico, etc. Por lo que el software se puede dividir en unidades según los roles del usuario. Cada usuario puede tener diferentes interfaces, permisos, etc.

Los desarrolladores de software pueden elegir una o una combinación de más de una de estas metodologías para desarrollar un software. Tenga en cuenta que en cada una de las metodologías discutidas, el problema debe dividirse en unidades más pequeñas. Para hacer esto, los desarrolladores utilizan cualquiera de los siguientes dos enfoques:

  • Enfoque de arriba hacia abajo
  • Enfoque de abajo hacia arriba

Enfoque modular o de arriba hacia abajo

El problema se divide en unidades más pequeñas, que pueden dividirse aún más en unidades aún más pequeñas. Cada unidad se llamamodule. Cada módulo es una unidad autosuficiente que tiene todo lo necesario para realizar su tarea.

La siguiente ilustración muestra un ejemplo de cómo puede seguir un enfoque modular para crear diferentes módulos mientras desarrolla un programa de procesamiento de nómina.

Enfoque de abajo hacia arriba

En el enfoque ascendente, el diseño del sistema comienza con el nivel más bajo de componentes, que luego se interconectan para obtener componentes de nivel superior. Este proceso continúa hasta que se genera una jerarquía de todos los componentes del sistema. Sin embargo, en el escenario de la vida real es muy difícil conocer todos los componentes del nivel más bajo desde el principio. Por lo tanto, el enfoque de abajo hacia arriba se usa solo para problemas muy simples.

Veamos los componentes de un programa de calculadora.

Un proceso de desarrollo de software típico sigue estos pasos:

  • Recopilación de requisitos
  • Definición del problema
  • Diseño de sistemas
  • Implementation
  • Testing
  • Documentation
  • Capacitación y apoyo
  • Maintenance

Los dos primeros pasos ayudan al equipo a comprender el problema, el primer paso más crucial para obtener una solución. La persona responsable de recopilar los requisitos, definir el problema y diseñar el sistema se denominasystem analyst.

Reunión de requisitos

Por lo general, los clientes o usuarios no pueden definir claramente sus problemas o requisitos. Tienen una vaga idea de lo que quieren. Por lo tanto, los desarrolladores de sistemas deben recopilar los requisitos del cliente para comprender el problema que debe resolverse o qué debe resolverse. La comprensión detallada del problema solo es posible si primero se comprende el área comercial para la que se está desarrollando la solución. Algunas preguntas clave que ayudan a comprender un negocio incluyen:

  • ¿Lo que se está haciendo?
  • Como se esta haciendo
  • ¿Cuál es la frecuencia de una tarea?
  • ¿Cuál es el volumen de decisiones o transacciones?
  • ¿Cuáles son los problemas que surgen?

Algunas técnicas que ayudan a recopilar esta información son:

  • Interviews
  • Questionnaires
  • Estudiar los documentos del sistema existentes
  • Analizar datos comerciales

Los analistas de sistemas deben crear un documento de requisitos claro y conciso pero completo para identificar los requisitos SMART - específicos, medibles, acordados, realistas y basados ​​en el tiempo. El no hacerlo da como resultado:

  • Definición incompleta del problema
  • Metas del programa incorrectas
  • Re-trabajar para entregar el resultado requerido al cliente
  • Aumento de costos
  • Entrega tardía

Debido a la profundidad de la información requerida, la recopilación de requisitos también se conoce como detailed investigation.

Definición del problema

Después de recopilar los requisitos y analizarlos, el enunciado del problema debe establecerse claramente. La definición del problema debe indicar sin ambigüedad qué problema o problemas deben resolverse. Tener una declaración clara del problema es necesario para:

  • Definir el alcance del proyecto
  • Mantenga al equipo enfocado
  • Mantenga el proyecto encaminado
  • Validar que se logró el resultado deseado al final del proyecto

A menudo, se supone que la codificación es la parte más esencial de cualquier proceso de desarrollo de software. Sin embargo, la codificación es solo una parte del proceso y, de hecho, puede llevar la cantidad mínima de tiempo si el sistema está diseñado correctamente. Antes de que se pueda diseñar el sistema, se debe identificar una solución para el problema en cuestión.

Lo primero que debe tenerse en cuenta sobre el diseño de un sistema es que inicialmente el analista de sistemas puede proponer más de una solución. Pero la solución final o el producto puede ser solo uno. El análisis en profundidad de los datos recopilados durante la fase de recopilación de requisitos puede ayudar a llegar a una solución única. Definir correctamente el problema también es crucial para llegar a la solución.

Cuando se enfrentan al problema de múltiples soluciones, los analistas buscan ayudas visuales como diagramas de flujo, diagramas de flujo de datos, diagramas de relación de entidades, etc. para comprender cada solución en profundidad.

Diagrama de flujo

El diagrama de flujo es el proceso de ilustrar los flujos de trabajo y los flujos de datos en un sistema a través de símbolos y diagramas. Es una herramienta importante para ayudar al analista de sistemas a identificar una solución al problema. Representa los componentes del sistema visualmente.

Estas son las ventajas de los diagramas de flujo:

  • La representación visual ayuda a comprender la lógica del programa

  • Actúan como planos para la codificación real del programa.

  • Los diagramas de flujo son importantes para la documentación del programa

  • Los diagramas de flujo son una ayuda importante durante el mantenimiento del programa

Estas son las desventajas de los diagramas de flujo:

  • La lógica compleja no se puede representar mediante diagramas de flujo

  • En caso de cualquier cambio en la lógica o el flujo de datos / trabajo, el diagrama de flujo debe volver a dibujarse por completo

Diagrama de flujo de datos

El diagrama de flujo de datos o DFD es una representación gráfica del flujo de datos a través de un sistema o subsistema. Cada proceso tiene su propio flujo de datos y existen niveles de diagramas de flujo de datos. El nivel 0 muestra los datos de entrada y salida de todo el sistema. Luego, el sistema se divide en módulos y el DFD de nivel 1 muestra el flujo de datos para cada módulo por separado. Los módulos se pueden dividir en submódulos si es necesario y se puede dibujar un DFD de nivel 2.

Pseudocódigo

Una vez diseñado el sistema, se entrega al director del proyecto para su implementación, es decir, su codificación. La codificación real de un programa se realiza en un lenguaje de programación, que solo pueden entender los programadores capacitados en ese lenguaje. Sin embargo, antes de que se produzca la codificación real, los principios operativos básicos, los flujos de trabajo y los flujos de datos del programa se escriben utilizando una notación similar al lenguaje de programación que se utilizará. Tal notación se llamapseudocode.

Aquí hay un ejemplo de un pseudocódigo en C ++. El programador solo necesita traducir cada declaración a la sintaxis de C ++ para obtener el código del programa.

Identificación de operaciones matemáticas

Todas las instrucciones a la computadora finalmente se implementan como operaciones aritméticas y lógicas a nivel de máquina. Estas operaciones son importantes porque:

  • Ocupar espacio en la memoria
  • Tómese su tiempo en la ejecución
  • Determine la eficiencia del software
  • Afecta el rendimiento general del software

Los analistas de sistemas intentan identificar todas las operaciones matemáticas importantes mientras identifican la solución única al problema en cuestión.

Un problema de la vida real es complejo y grande. Si se desarrolla una solución monolítica, plantea estos problemas:

  • Difícil de escribir, probar e implementar un gran programa

  • Las modificaciones después de la entrega del producto final son casi imposibles

  • Mantenimiento del programa muy difícil

  • Un error puede detener todo el sistema

Para superar estos problemas, la solución debe dividirse en partes más pequeñas llamadas modules. La técnica de dividir una gran solución en módulos más pequeños para facilitar el desarrollo, implementación, modificación y mantenimiento se llamamodular technique de programación o desarrollo de software.

Ventajas de la programación modular

La programación modular ofrece estas ventajas:

  • Permite un desarrollo más rápido ya que cada módulo se puede desarrollar en paralelo

  • Los módulos se pueden reutilizar

  • Como cada módulo debe probarse de forma independiente, las pruebas son más rápidas y sólidas

  • Depuración y mantenimiento de todo el programa más fácil

  • Los módulos son más pequeños y tienen un menor nivel de complejidad, por lo que son fáciles de entender.

Identificación de los módulos

Identificar módulos en un software es una tarea alucinante porque no puede haber una forma correcta de hacerlo. Aquí hay algunos consejos para identificar módulos:

  • Si los datos son el elemento más importante del sistema, cree módulos que manejen datos relacionados.

  • Si el servicio proporcionado por el sistema es diverso, divida el sistema en módulos funcionales.

  • Si todo lo demás falla, divida el sistema en módulos lógicos según su comprensión del sistema durante la fase de recopilación de requisitos.

Para la codificación, cada módulo debe dividirse nuevamente en módulos más pequeños para facilitar la programación. Esto se puede hacer nuevamente usando los tres consejos compartidos anteriormente, combinados con reglas de programación específicas. Por ejemplo, para un lenguaje de programación orientado a objetos como C ++ y Java, cada clase con sus datos y métodos podría formar un solo módulo.

Solución paso-a-paso

Para implementar los módulos, el flujo de proceso de cada módulo debe describirse paso a paso. La solución paso a paso se puede desarrollar utilizandoalgorithms o pseudocodes. Proporcionar una solución paso a paso ofrece estas ventajas:

  • Cualquiera que lea la solución puede comprender tanto el problema como la solución.

  • Es igualmente comprensible para programadores y no programadores.

  • Durante la codificación, cada declaración simplemente debe convertirse en una declaración de programa.

  • Puede ser parte de la documentación y ayudar en el mantenimiento del programa.

  • Los detalles a nivel micro como los nombres de los identificadores, las operaciones requeridas, etc. se resuelven automáticamente

Veamos un ejemplo.

Estructuras de Control

Como puede ver en el ejemplo anterior, no es necesario que se ejecute una lógica de programa sequentially. En lenguaje de programación,control structurestomar decisiones sobre el flujo del programa basándose en parámetros dados. Son elementos muy importantes de cualquier software y deben identificarse antes de que comience la codificación.

Algoritmos y pseudocodes ayudar a los analistas y programadores a identificar dónde se requieren estructuras de control.

Las estructuras de control son de estos tres tipos:

Estructuras de control de decisiones

Las estructuras de control de decisiones se utilizan cuando el siguiente paso a ejecutar depende de un criterio. Este criterio suele ser una o más expresiones booleanas que deben evaluarse. Una expresión booleana siempre se evalúa como "verdadero" o "falso". Un conjunto de declaraciones se ejecuta si el criterio es "verdadero" y otro conjunto se ejecuta si el criterio se evalúa como "falso". Por ejemplo, if declaración

Estructuras de control de selección

Las estructuras de control de selección se utilizan cuando la secuencia del programa depende de la respuesta a una pregunta específica. Por ejemplo, un programa tiene muchas opciones para el usuario. La instrucción que se ejecutará a continuación dependerá de la opción elegida. Por ejemplo,switch declaración, case declaración.

Estructuras de control de repetición / bucle

La estructura de control de repetición se utiliza cuando un conjunto de declaraciones debe repetirse muchas veces. El número de repeticiones puede conocerse antes de que comience o puede depender del valor de una expresión. Por ejemplo,for declaración, while declaración, do while declaración, etc.

Como puede ver en la imagen de arriba, tanto las estructuras de selección como las de decisión se implementan de manera similar en un diagrama de flujo. El control de selección no es más que una serie de declaraciones de decisiones tomadas secuencialmente.

Aquí hay algunos ejemplos de programas para mostrar cómo funcionan estas declaraciones:

Un conjunto finito de pasos que se deben seguir para resolver cualquier problema se llama algorithm. El algoritmo generalmente se desarrolla antes de que se realice la codificación real. Está escrito en un idioma similar al inglés, por lo que es fácilmente comprensible incluso para quienes no son programadores.

A veces, los algoritmos se escriben usando pseudocodes, es decir, un lenguaje similar al lenguaje de programación a utilizar. El algoritmo de escritura para resolver un problema ofrece estas ventajas:

  • Promueve la comunicación efectiva entre los miembros del equipo.

  • Permite el análisis del problema en cuestión

  • Actúa como modelo para la codificación

  • Ayuda a depurar

  • Se convierte en parte de la documentación del software para referencia futura durante la fase de mantenimiento.

Estas son las características de un algoritmo bueno y correcto:

  • Tiene un conjunto de entradas

  • Los pasos están definidos de forma única

  • Tiene un número finito de pasos

  • Produce la salida deseada

Algoritmos de ejemplo

Tomemos primero un ejemplo de una situación de la vida real para crear un algoritmo. Aquí está el algoritmo para ir al mercado a comprar un bolígrafo.

El paso 4 de este algoritmo es en sí mismo una tarea completa y se puede escribir un algoritmo separado para él. Creemos ahora un algoritmo para verificar si un número es positivo o negativo.

Flowchartes una representación esquemática de la secuencia de pasos lógicos de un programa. Los diagramas de flujo utilizan formas geométricas simples para representar procesos y flechas para mostrar relaciones y flujo de datos / procesos.

Símbolos de diagrama de flujo

A continuación, se muestra un gráfico de algunos de los símbolos comunes que se utilizan para dibujar diagramas de flujo.

Símbolo Nombre del símbolo Propósito
Start / Stop Se utiliza al principio y al final del algoritmo para mostrar el inicio y el final del programa.
Proceso Indica procesos como operaciones matemáticas.
De entrada y salida Se utiliza para denotar entradas y salidas de programas.
Decisión Significa declaraciones de decisión en un programa, donde la respuesta suele ser Sí o No.
Flecha Muestra relaciones entre diferentes formas.
Conector en la página Conecta dos o más partes de un diagrama de flujo, que están en la misma página.
Conector fuera de página Conecta dos partes de un diagrama de flujo que se distribuyen en distintas páginas.

Directrices para desarrollar diagramas de flujo

Estos son algunos puntos a tener en cuenta al desarrollar un diagrama de flujo:

  • El diagrama de flujo solo puede tener un símbolo de inicio y un símbolo de parada

  • Se hace referencia a los conectores en la página mediante números

  • Se hace referencia a los conectores fuera de la página mediante alfabetos

  • El flujo general de procesos es de arriba a abajo o de izquierda a derecha.

  • Las flechas no deben cruzarse entre sí

Diagramas de flujo de ejemplo

Aquí está el diagrama de flujo para ir al mercado a comprar un bolígrafo.

Aquí hay un diagrama de flujo para calcular el promedio de dos números.

Como saben, la computadora no tiene inteligencia propia; simplemente sigue elinstructions dado por el usuario. Instructionsson los componentes básicos de un programa informático y, por tanto, de un software. Dar instrucciones claras es crucial para construir un programa exitoso. Como programador o desarrollador de software, debe adquirir el hábito de escribir instrucciones claras. Aquí hay dos formas de hacerlo.

Claridad de Expresiones

La expresión en un programa es una secuencia de operadores y operandos para realizar un cálculo aritmético o lógico. Aquí hay algunos ejemplos de expresiones válidas:

  • Comparando dos valores
  • Definición de una variable, objeto o clase
  • Cálculos aritméticos usando una o más variables
  • Recuperando datos de la base de datos
  • Actualizar valores en la base de datos

Escribir expresiones inequívocas es una habilidad que debe desarrollar todo programador. Aquí hay algunos puntos que se deben tener en cuenta al escribir tales expresiones:

Resultado inequívoco

La evaluación de la expresión debe dar un resultado claro. Por ejemplo, los operadores unarios deben usarse con precaución.

Evite las expresiones complejas

No intente lograr muchas cosas en una sola expresión. Divídanse en dos o más expresiones en el momento en que las cosas comiencen a complicarse.

Sencillez de instrucciones

No es solo para las computadoras que necesita escribir instrucciones claras. Cualquiera que lea el programa más tarde (¡incluso usted mismo!) Debería poder entender lo que la instrucción está tratando de lograr. Es muy común que los programadores no se familiaricen con sus propios programas cuando los revisan después de un tiempo. Esto indica que el mantenimiento y la modificación de dichos programas sería bastante difícil.

Escribir instrucciones sencillas ayuda a evitar este problema. Aquí hay algunos consejos para escribir instrucciones sencillas:

  • Avoid clever instructions - Es posible que las instrucciones inteligentes no parezcan tan inteligentes más adelante si nadie es capaz de entenderlas correctamente.

  • One instruction per task - Intentar hacer más de una cosa a la vez complica las instrucciones.

  • Use standards- Cada idioma tiene sus estándares, sígalos. Recuerde que no está trabajando solo en el proyecto; siga los estándares y pautas del proyecto para la codificación.

En este capítulo, cubriremos cómo escribir un buen programa. Pero antes de hacer eso, veamos cuáles son las características de un buen programa:

  • Portable- El programa o software debe ejecutarse en todas las computadoras del mismo tipo. Por el mismo tipo nos referimos a un software desarrollado para computadoras personales que debe ejecutarse en todas las PC. O un software escrito para tabletas debería ejecutarse en todas las tabletas que tengan las especificaciones correctas.

  • Efficient- Se dice que un software que hace las tareas asignadas rápidamente es eficiente. La optimización del código y la optimización de la memoria son algunas de las formas de aumentar la eficiencia del programa.

  • Effective- El software debería ayudar a resolver el problema en cuestión. Un software que hace eso se dice que es efectivo.

  • Reliable - El programa debe dar la misma salida cada vez que se da el mismo conjunto de entradas.

  • User friendly - La interfaz del programa, los enlaces e iconos en los que se puede hacer clic, etc. deben ser fáciles de usar.

  • Self-documenting - Cualquier programa o software cuyos nombres de identificadores, nombres de módulos, etc. puedan describirse a sí mismos debido al uso de nombres explícitos.

Aquí hay algunas formas en las que se pueden escribir buenos programas.

Nombres de identificadores adecuados

Un nombre que identifica cualquier variable, objeto, función, clase o método se llama identifier. Dar nombres de identificadores adecuados hace que un programa se auto-documente. Esto significa que el nombre del objeto dirá qué hace o qué información almacena. Tomemos un ejemplo de esta instrucción SQL:

Mire la línea 10. Le dice a cualquiera que lea el programa que se debe seleccionar la identificación, el nombre y el número de lista de un estudiante. Los nombres de las variables hacen que esto se explique por sí mismo. Estos son algunos consejos para crear nombres de identificadores adecuados:

  • Usar pautas de idioma

  • No dude en dar nombres largos para mantener la claridad

  • Usa letras mayúsculas y minúsculas

  • No le dé el mismo nombre a dos identificadores, incluso si el idioma lo permite

  • No dé los mismos nombres a más de un identificador, incluso si tienen un alcance mutuamente excluyente

Comentarios

En la imagen de arriba, mire la línea 8. Le dice al lector que las siguientes líneas de código recuperarán la lista de estudiantes cuya boleta de calificaciones se generará. Esta línea no es parte del código, sino que se proporciona solo para que el programa sea más fácil de usar.

Una expresión de este tipo que no se compila sino que se escribe como nota o explicación para el programador se denomina comment. Mire los comentarios en el siguiente segmento del programa. Los comentarios comienzan con //.

Los comentarios se pueden insertar como -

  • Prólogo al programa para explicar su objetivo

  • Al principio y / o final de bloques lógicos o funcionales

  • Tome nota sobre escenarios especiales o excepciones

Debe evitar agregar comentarios superfluos, ya que pueden resultar contraproducentes al interrumpir el flujo de código mientras lee. El compilador puede ignorar los comentarios y las sangrías, pero el lector tiende a leer cada uno de ellos.

Sangría

La distancia del texto desde el margen izquierdo o derecho se llama indent. En los programas, la sangría se utiliza para separar bloques de código separados lógicamente. A continuación, se muestra un ejemplo de segmento de programa con sangría:

Como puede ver, el programa con sangría es más comprensible. Flujo de control desdefor loop a if y de regreso a fores muy claro. La sangría es especialmente útil en el caso de estructuras de control.

Insertar espacios en blanco o líneas también es parte de la sangría. Aquí hay algunas situaciones en las que puede y debe usar sangría:

  • Líneas en blanco entre bloques de código lógicos o funcionales dentro del programa

  • Espacios en blanco alrededor de los operadores

  • Pestañas al comienzo de nuevas estructuras de control

Identificar y eliminar errores de un programa o software se denomina debugging. La depuración es idealmente parte del proceso de prueba, pero en realidad se realiza en cada paso de la programación. Los codificadores deben depurar el más pequeño de sus módulos antes de continuar. Esto disminuye la cantidad de errores que se producen durante la fase de prueba y reduce significativamente el tiempo y el esfuerzo de prueba. Veamos los tipos de errores que pueden surgir en un programa.

Errores de sintaxis

Syntax errorsson los errores gramaticales en un programa. Cada idioma tiene su propio conjunto de reglas, como la creación de identificadores, la escritura de expresiones, etc. para programas de escritura. Cuando se violan estas reglas, los errores se denominansyntax errors. Muchos modernosintegrated development environmentspuede identificar los errores de sintaxis a medida que escribe su programa. De lo contrario, se mostrará cuando compile el programa. Tomemos un ejemplo:

En este programa, la variable prod no ha sido declarada, que es lanzada por el compilador.

Errores semánticos

Semantic errors también se llaman logical errors. La instrucción no tiene errores de sintaxis, por lo que se compilará y se ejecutará correctamente. Sin embargo, no dará la salida deseada ya que la lógica no es correcta. Tomemos un ejemplo.

Mire la línea 13. Aquí el programador quiere verificar si el divisor es 0, para evitar la división entre 0. Sin embargo, en lugar de usar el operador de comparación ==, se ha usado el operador de asignación =. Ahora, cada vez que la "expresión si" se evaluará como verdadera y el programa dará un resultado como "No se puede dividir por 0". ¡Definitivamente no es lo que se pretendía!

Ningún programa puede detectar errores lógicos; tienen que ser identificados por el propio programador cuando no se alcanza el resultado deseado.

Errores en tiempo de ejecución

Los errores de tiempo de ejecución son errores que ocurren durante la ejecución del programa. Esto implica que el programa no tiene errores de sintaxis. Algunos de los errores de tiempo de ejecución más comunes que puede encontrar su programa son:

  • Bucle infinito
  • División por '0'
  • Valor incorrecto ingresado por el usuario (digamos, cadena en lugar de entero)

Optimización de código

Cualquier método mediante el cual se modifica el código para mejorar su calidad y eficiencia se denomina code optimization. Code qualitydetermina la vida útil del código. Si el código se puede utilizar y mantener durante un período prolongado, transferido de un producto a otro, se considera que su calidad es alta y tiene una vida útil más larga. Por el contrario, si un fragmento de código se puede usar y mantener solo por períodos cortos, digamos hasta que una versión sea válida, se considera que es de baja calidad y tiene una vida corta.

La confiabilidad y velocidad de un código determina code efficiency. La eficiencia del código es un factor importante para garantizar un alto rendimiento de un software.

Hay dos enfoques para la optimización del código:

  • Intuition based optimization (IBO)- Aquí el programador intenta optimizar el programa basándose en su propia habilidad y experiencia. Esto podría funcionar para programas pequeños, pero falla estrepitosamente a medida que aumenta la complejidad del programa.

  • Evidence based optimization (EBO)- Aquí se utilizan herramientas automatizadas para descubrir los cuellos de botella en el rendimiento y luego las partes relevantes se optimizan en consecuencia. Cada lenguaje de programación tiene su propio conjunto de herramientas de optimización de código. Por ejemplo, PMD, FindBug y Clover se utilizan para optimizar el código Java.

El código está optimizado para el tiempo de ejecución y el consumo de memoria porque el tiempo es escaso y la memoria cara. Tiene que haber un equilibrio entre los dos. Sitime optimization aumenta la carga en la memoria o memory optimization hace que el código sea más lento, se perderá el propósito de la optimización.

Optimización del tiempo de ejecución

Es necesario optimizar el código para el tiempo de ejecución para proporcionar un servicio rápido a los usuarios. Aquí hay algunos consejos para optimizar el tiempo de ejecución:

  • Utilice comandos que tengan optimización del tiempo de ejecución incorporada

  • Use el interruptor en lugar de la condición if

  • Minimizar las llamadas a funciones dentro de las estructuras de bucle

  • Optimizar las estructuras de datos utilizadas en el programa.

Optimización de memoria

Como sabe, los datos y las instrucciones consumen memoria. Cuando decimos datos, también se refiere a datos provisionales que son el resultado de expresiones. También necesitamos hacer un seguimiento de cuántas instrucciones están componiendo el programa o el módulo que estamos tratando de optimizar. Aquí hay algunos consejos paramemory optimization -

  • Utilice comandos que tengan optimización de memoria incorporada

  • Mantenga el uso de variables que deben almacenarse en registros como mínimo

  • Evite declarar variables globales dentro de bucles que se ejecutan muchas veces

  • Evite el uso de funciones intensivas de CPU como sqrt ()

Cualquier texto, ilustración o video escrito que describa un software o programa a sus usuarios se denomina program or software document. El usuario puede ser cualquier persona, desde un programador, analista de sistemas y administrador hasta un usuario final. En varias etapas de desarrollo, se pueden crear múltiples documentos para diferentes usuarios. De hecho,software documentation es un proceso crítico en el proceso general de desarrollo de software.

En la programación modular, la documentación se vuelve aún más importante porque los diferentes módulos del software son desarrollados por diferentes equipos. Si alguien que no sea el equipo de desarrollo quiere o necesita entender un módulo, una documentación buena y detallada facilitará la tarea.

Estas son algunas pautas para crear los documentos:

  • La documentación debe ser desde el punto de vista del lector.

  • El documento debe ser inequívoco

  • No debe haber repetición

  • Deben utilizarse los estándares de la industria

  • Los documentos siempre deben estar actualizados

  • Cualquier documento obsoleto debe eliminarse gradualmente después del debido registro de la eliminación.

Ventajas de la documentación

Estas son algunas de las ventajas de proporcionar documentación del programa:

  • Realiza un seguimiento de todas las partes de un software o programa

  • El mantenimiento es más fácil

  • Los programadores que no sean el desarrollador pueden comprender todos los aspectos del software

  • Mejora la calidad general del software.

  • Ayuda en la formación del usuario

  • Garantiza la descentralización del conocimiento, reduciendo costos y esfuerzos si las personas abandonan el sistema de forma abrupta

Documentos de ejemplo

Un software puede tener muchos tipos de documentos asociados. Algunos de los importantes incluyen:

  • User manual - Describe instrucciones y procedimientos para que los usuarios finales utilicen las diferentes funciones del software.

  • Operational manual - Enumera y describe todas las operaciones que se están realizando y sus interdependencias.

  • Design Document- Ofrece una descripción general del software y describe los elementos de diseño en detalle. Documenta detalles comodata flow diagrams, entity relationship diagramsetc.

  • Requirements Document- Tiene una lista de todos los requisitos del sistema así como un análisis de viabilidad de los requisitos. Puede tener casos de usuario, escenarios de la vida real, etc.

  • Technical Documentation - Es una documentación de componentes de programación reales como algoritmos, diagramas de flujo, códigos de programa, módulos funcionales, etc.

  • Testing Document - Registra el plan de prueba, los casos de prueba, el plan de validación, el plan de verificación, los resultados de las pruebas, etc. Las pruebas son una fase del desarrollo de software que necesita documentación intensiva.

  • List of Known Bugs- Todo software tiene errores o errores que no se pueden eliminar porque se descubrieron muy tarde o son inofensivos o tomará más esfuerzo y tiempo del necesario para corregirlos. Estos errores se enumeran con la documentación del programa para que puedan eliminarse en una fecha posterior. También ayudan a los usuarios, implementadores y personal de mantenimiento si se activa el error.

Program maintenance es el proceso de modificar un software o programa después de la entrega para lograr cualquiera de estos resultados:

  • Corrige los errores
  • Mejorar el rendimiento
  • Agregar funcionalidades
  • Eliminar porciones obsoletas

A pesar de la percepción común de que se requiere mantenimiento para corregir errores que surgen después de que el software se pone en marcha, en realidad la mayor parte del trabajo de mantenimiento implica agregar capacidades menores o mayores a los módulos existentes. Por ejemplo, se agregan algunos datos nuevos a un informe, se agrega un nuevo campo a los formularios de entrada, se modifica el código para incorporar cambios en las leyes gubernamentales, etc.

Tipos de mantenimiento

Las actividades de mantenimiento se pueden clasificar en cuatro encabezados:

  • Corrective maintenance- Aquí se corrigen los errores que surgen después de la implementación in situ. Los errores pueden ser señalados por los propios usuarios.

  • Preventive maintenance - Las modificaciones realizadas para evitar errores en el futuro se denominan mantenimiento preventivo.

  • Adaptive maintenance- Los cambios en el entorno de trabajo a veces requieren modificaciones en el software. A esto se le llama mantenimiento adaptativo. Por ejemplo, si la política de educación del gobierno cambia, los cambios correspondientes deben realizarse en el módulo de procesamiento de resultados de los estudiantes del software de gestión escolar.

  • Perfective maintenance- Los cambios realizados en el software existente para incorporar nuevos requisitos del cliente se denominan mantenimiento perfectivo. El objetivo aquí es estar siempre actualizado con la última tecnología.

Herramientas de mantenimiento

Los desarrolladores y programadores de software utilizan muchas herramientas para ayudarles en el mantenimiento del software. Éstos son algunos de los más utilizados:

  • Program slicer - selecciona una parte del programa que se vería afectada por el cambio

  • Data flow analyzer - rastrea todos los posibles flujos de datos en el software

  • Dynamic analyzer - rastrea la ruta de ejecución del programa

  • Static analyzer - permite la visualización general y el resumen del programa

  • Dependency analyzer - ayuda a comprender y analizar la interdependencia de diferentes partes del programa