2010-05-19 10 views
7

Trabajo en una empresa con cientos de personas escribiendo software para esencialmente el mismo producto. La calidad del software debe ser alta, ya que muchas personas dependen de él (no menos de los propios desarrolladores). Debido a esto, cada problema importante ha resultado en un nuevo cheque, ya sea automático o manual.¿Cómo puede un gran número de desarrolladores escribir software juntos sin un proceso engorroso o software de mala calidad?

Como resultado, el proceso de entrega de software se vuelve cada vez más oneroso. Entonces eso requiere más desarrolladores que ... bueno, pueden ver que es un círculo vicioso.

Ahora tenemos un problema para liberar software rápidamente: el tiempo de espera incluso para cambiar una línea de código por un problema muy grave es al menos de un día.

¿Qué técnicas utiliza para acelerar la entrega de software en una organización grande, mientras se mantiene la calidad del software?

+2

Históricamente, no lo hacen, en realidad. –

Respuesta

6

También trabajo en una organización grande y engorrosa. He tenido éxito implementando varias metodologías agile software development, pero hay dos en particular que he encontrado especialmente valiosas.

Desarrollo iterativo e incremental - Mantenga su ciclo de liberación corto y apretado. En un equipo grande, si se realizan numerosos cambios entre lanzamientos, puede encontrarse en una pesadilla de integración.

Las grandes organizaciones se inclinan por los grandes planes de proyectos con largas líneas de tiempo de desarrollo. Lucha esto. Planificar un proyecto durante todo un año no tiene sentido cuando toda su percepción puede cambiar después de las primeras dos semanas de desarrollo. Acondicione a sus partes interesadas para que se acostumbren a la idea de realizar pequeñas versiones incrementales y adaptarse a los requisitos siempre cambiantes.

Pruebas unitarias automatizadas - Esta es una gran manera de asegurarse de que está lanzando un software de calidad. Los peores errores son causados ​​por cambios de código aparentemente inocentes que tienen consecuencias involuntarias en otros lugares. Las pruebas integrales de unidades son quizás la mejor forma de detectar este tipo de error. Si puede graduarse a test driven development o behavior driven development, aún mejor.

Cualquier gran organización va a tener algunos desarrolladores mediocres. Es un hecho de la vida. Las pruebas unitarias automatizadas son una excelente manera de vigilarlos. Haga que uno de sus mejores desarrolladores escriba sus pruebas unitarias para ellos. Tendrás la seguridad de que al menos su código funciona (incluso si es feo).

+1

+1 - acordado en ambos. El ajuste es difícil, pero he visto ciclos de lanzamiento más rápidos (incluso para pequeñas mejoras) que elevan la calidad y la moral, y esos son dos grandes desafíos en una organización grande. – wlangstroth

+0

De acuerdo en ambos comentarios, gracias dbyrne & Will. Estamos implementando Agile, que también es una excelente manera de detectar a los desarrolladores pobres. Y tenemos pruebas unitarias (pero no un verdadero desarrollo impulsado por pruebas, excepto en algunos casos aislados). Supongo que aquí hay dos desafíos realmente - 1 (como se mencionó anteriormente) - identificar LO que necesitamos cambiar y luego 2 implementar ese cambio en una organización grande donde mucha gente necesita ser persuadida para probar algo nuevo. – Wikis

4
+0

Gracias StudiousJoseph por los enlaces, especialmente la prueba de Joel. Creo que puntuamos 5. Pero la pregunta es más acerca de cómo hacer que una organización GRANDE trabaje en conjunto: ¿hay algo particular en ese entorno? (¡Esos aún son enlaces útiles, por supuesto!) – Wikis

2

Hay muchas maneras de mejorar el proceso, pero el componente clave es modularity. Al separar claramente las responsabilidades (tanto en el código como en la organización) y definir interfaces claras y coherentes, un equipo grande puede trabajar como tantos equipos pequeños todos vinculados.

+0

Sí, Matt S, tiene toda la razón sobre la modularidad, gracias. Sin embargo, a menudo las grandes compañías están lidiando con una gran cantidad de código heredado cuando eran pequeñas ... por lo que la modularidad debe hacerse de forma retroactiva, y nunca hay tiempo suficiente para eso ... = :-) Eso también es parte de el problema - pensamiento a corto plazo en lugar de considerar el diseño a largo plazo. – Wikis

1

Wise pero sombrías dichos:

Algo que podría funcionar:

organizar el proyecto, de manera que hay un uso de la base construida por una o dos personas, preferentemente funcionando a través de una lengua. Luego, permita que todos los programadores sean efectivamente usuarios del núcleo, mediante la codificación en ese idioma.

Estoy pensando en productos basados ​​en el lenguaje: SAS, S/R, MATLAB, etc.

+0

Gracias Mike Dunlavey por el cumplido. Tus citas me recuerdan al Mes del hombre mítico. Si bien utilizamos Matlab, estamos mucho más allá de conseguir que una o dos personas reinicien el proyecto. Este software tiene miles de años-hombre invertidos en él (ver el comentario anterior sobre el código heredado). – Wikis

+1

@Mark: Citando a Bill Clinton, siento tu dolor. –

+0

Gracias Mike Dunlavey! También lo siento ... = :-( – Wikis

Cuestiones relacionadas