Diseño de software por pseudocoding?

9

¿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?

Gerenuk
fuente
3
Steve McConnell describe el proceso de programación de pseudocódigo (PPP) en su Book Code Complete 2 . El método se concentra en el diseño y la implementación de bajo nivel, pero podría ser una buena lectura si eso es lo que busca.
thiton

Respuestas:

8
 I thought agile is about schedule only?

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.

 Or am I designing incorrectly (with UML) - does anyone design by pseudocode? 

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:

  • Diagramas de flujo de datos
  • Diagramas de estado
  • Diagramas de flujo de proceso

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.

Yusubov
fuente
3
+1 para el enlace a Pseudocódigo o Código . Solo escribe el maldito código.
Kevin Cline
@ElYusubov: Gracias por la explicación. Parece que también implica que UML es más para presentación? ¿Para el diseño real no pongo énfasis en él? Al final propones 3 diagramas. ¿Se pueden hacer 1 a 1 con código hasta cierto punto? Quiero decir, por el contrario, algunas cosas que funcionan en el diagrama podrían no funcionar con el código, que quiero evitar.
Gerenuk
@Gerenuk, los diagramas de flujo de datos se pueden hacer 1 a 1 con flujo de código. Sin embargo, los diagramas generalmente se utilizan para ver el diseño de alto nivel y la interacción entre componentes / módulos / casos de uso.
Yusubov
3

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.

Kevin Cline
fuente
Cuando recién comienzo a codificar, a veces más tarde me doy cuenta de que, en cuanto al diseño, podría haber factorizado algún código. Si bien la refactorización está bien, aún podría haberla evitado si hubiera visto primero una descripción general de todo el código y hubiera utilizado algo de creatividad. Una vista gráfica de pseudocódigo podría presentar todo en un gráfico condensado. ¿Es mi error en otro lugar?
Gerenuk
2
Su error es creer que refactorizar el código es de alguna manera más trabajo que refactorizar el pseudocódigo. Con un IDE moderno, es más fácil y rápido escribir código real que jugar con el pseudocódigo, ya sea en papel en un editor de texto sin formato.
kevin cline
1

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.

TMN
fuente
0

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). :-)

Lorand Kedves
fuente