¿Conoces una buena manera de diseñar (es decir, escribir) software con un método basado en pseudocódigo?
Soy nuevo en diseño de software y leo información sobre UML. Mis humildes jerarquías de clase son buenas hasta ahora, sin embargo, después de que se vuelve complejo, noto que con "ver la totalidad" podría haber usado una estructura diferente para una mayor capacidad de ampliación futura. Como Python es bueno para la creación de prototipos, estoy casi bien con comenzar a escribir, pero no del todo.
Así que probé los diagramas de clase UML, pero no parecen ayudarme mucho. Los problemas que resuelvo allí puedo hacerlos trivialmente en mi cabeza. Pero sí noto requisitos de diseño adicionales una vez que empiezo a pseudocodificar los métodos reales.
Entonces, si quisieras diseñar por pseudocódigo, ¿cómo lo harías? Creo que para mí un método que es aproximadamente 1 a 1 con código funciona mejor. Pero la mayoría del software UML ni siquiera muestra el código del método (a diferencia de las imágenes en, por ejemplo, GoF).
¿Alguien afirmó que UML es solo para documentación y presentación y no tan bueno para el diseño? También tengo ese sentimiento. Pensé que UML puro y algunos bocetos simplistas de pizarra eran la forma de diseñar software hasta que busqué en Google. Envision APDT.
Entonces, ¿el desarrollo ágil es algo a lo que debo prestar atención o lo llaman aleatoriamente ágil? ¿Pensé que ágil es solo un horario? O estoy diseñando incorrectamente (con UML): ¿alguien diseña por pseudocódigo? ¿Cómo puedo encontrar una buena herramienta para eso?
Respuestas:
No es solo planificación. El desarrollo ágil de software tiene más que ver con ser un desarrollo evolutivo y una entrega iterativa con una planificación adaptativa que fomenta una respuesta flexible a los cambios solicitados por el propietario del producto.
En mi experiencia, los gráficos son mucho más fáciles de entender desde la perspectiva del cliente. Son visualmente atractivos y muchas veces muy coloridos y fáciles de seguir. Sin embargo, es muy difícil mantener gráficos debido a la naturaleza de la desconexión con el código de la aplicación real. Cada vez que se realiza un cambio en la aplicación, el desarrollador debe tomarse el tiempo para actualizar toda la documentación, incluidos los gráficos. Sin embargo, ese problema puede eliminarse fácilmente una vez que haya un BA en el equipo o la empresa, que comprenda bien el proceso comercial del cliente y pueda administrar los diagramas UML.
Herramientas como UML pueden facilitar este proceso, pero solo funcionan bien con la programación orientada a objetos. El pseudocódigo es mucho más fácil para los equipos técnicos. El proceso de creación de este código aumenta enormemente la velocidad de la fase real de desarrollo del lenguaje de programación.
También hay otras alternativas que puede buscar:
Buenas referencias para mirar: Tutoriales de diseño de software . Además, ¿recomendaría personalmente leer un buen blog sobre Pseudocódigo o Código? publicado por Coding Horror - mi blog favorito para leer :)
En general, hay algunas compensaciones que debe tener en cuenta.
fuente
Al programar en lenguaje ensamblador, escribir pseudocódigo tiene mucho sentido. El algoritmo podría verificarse antes de gastar el esfuerzo de traducirlo manualmente al lenguaje ensamblador y luego depurar la traducción. Todavía tenía sentido para los lenguajes compilados de primera generación como FORTRAN IV, donde la única construcción de control era GOTO, todas las variables (excepto los argumentos formales) eran globales y los nombres de las variables estaban limitados a seis caracteres.
Hoy hacemos muy poca programación en lenguaje ensamblador, y veo poco valor en escribir pseudocódigo en lugar de solo escribir código. En un lenguaje decente, el código real seguirá el pseudocódigo casi palabra por palabra, y el pseudocódigo es solo una pérdida de tiempo.
Sin embargo, no empiezo a codificar en la parte inferior. Sigo TDD y comienzo con una prueba. Luego empiezo a codificar en la parte superior y gradualmente trabajo hacia abajo, según sea necesario, para que las pruebas pasen.
La alternativa al pseudocódigo no es escribir 1000 líneas de clases de bajo nivel. En su lugar, comience en la parte superior, llamando a la API ideal pero inexistente para su dominio. Luego construye la API.
fuente
Creo que los diagramas de clase apenas merecen la pena, incluso cuando omite la lista de todos los métodos y simplemente muestra la jerarquía de herencia. Los diagramas de secuencia son buenos, pero me siento incómodo cuando los estoy dibujando (probablemente solo yo).
Encuentro que los diagramas de flujo de datos y los diagramas de estructura son más útiles (aunque los diagramas de estructura están comúnmente asociados con BDUF y, por lo tanto, están en desuso en este momento). Los DFD son especialmente útiles para la descomposición funcional. Cada "burbuja" en un DFD se puede dividir en su propio DFD hasta llegar al nivel de detalle que desee.
fuente
Creo que las herramientas gráficas son mejores que la pseudocodificación, pero UML es simplemente tan complicado que combina lo malo en esos métodos :-)
Para ser un poco más claro: creo que la programación es principalmente una forma de analizar un determinado problema, separarlo en componentes más pequeños y su interacción. Esto es "un viaje, no un destino", mejora constantemente su conocimiento sobre el problema, por lo que la gráfica de componentes está cambiando: las capas aparecen y desaparecen, las funciones y los elementos de datos se mueven hacia arriba y hacia abajo, etc.
La herramienta natural para seguir este proceso es un boceto, lo más simple posible, pero lo suficientemente complejo como para ayudar a una rápida comprensión (mismos colores, formas, flechas para el mismo significado lógico). No he encontrado la bala de plata, y tal vez escribiré la mía algún día, pero ahora uso gliffy ; combinado con la función de zoom de prezi , sería casi perfecto.
¿Por qué no seudocodificar? La pseudocodificación es un paso adelante hacia la implementación, una "forma serializada del gráfico de componentes", cuando aún da forma a sus ideas. No es bueno, limita tu cabeza. En mi experiencia, descubrí que cuanto más tarde empiezo a codificar, menos código tengo que tirar ...
Pero quizás esto se deba a que he escrito todos esos códigos desechados, así que no tengo que escribirlos ahora, ¿la experiencia que obtuve de ellos está conmigo al diseñar el sistema? Bueno, tengo que modificar la declaración.
Si está perdido con su gráfico y ve muchas soluciones posibles equivalentes, vaya al pseudocódigo, o incluso escriba ese código con objetos simulados; en Java, eso casi no es una diferencia. Vea el código, sienta la estructura y usabilidad de esos componentes, lo ayudará a arreglar su gráfico y tomar decisiones. Pero esto funciona SOLO si está listo para desechar ese código si cree que es malo. Creo que esta es la ventaja del pseudocódigo: la menor tentación de mantenerlo cuando funciona, pero tiene una estructura incorrecta (y, como siempre, no tienes suficiente tiempo). :-)
fuente