¿Cómo adoptar una metodología ágil para desarrollar firmware / software de sistemas integrados?

17

Siempre me he preguntado cómo aplicar métodos ágiles realmente en grandes sistemas de software integrados complejos (más de 100 ingenieros). El desarrollo de firmware tiene algunas características únicas que dificultan la agilidad (es decir, el hardware no está disponible hasta el final del ciclo de desarrollo; una vez que se lanza el producto, no se puede actualizar fácilmente el firmware, etc.)

La norma en este tipo de desarrollo es una amplia documentación y extenuantes revisiones por pares. No puede obtener una solución de código simple como cambiar el nombre de una variable sin 2-3 firmas. (Exagero un poco, pero esto es típico. Además, mucha gente toma atajos e incluso los gerentes de proyecto los aprueban, especialmente ante los plazos de mercado difíciles).

Me gustaría escuchar algún consejo o guía sobre cómo adoptar una metodología ágil para proyectos de desarrollo de firmware.

hopia
fuente
Entiendo que el hardware finalizado no está disponible hasta el final del ciclo de desarrollo, pero ¿no tiene un prototipo o hardware de depuración, una placa de desarrollo o al menos un simulador de proveedor para probar? ¿O estamos comenzando desde cero aquí?
Kevin Vermeer
3
Estaba hablando con un desarrollador ágil sobre mi trabajo integrado. "¡¿Un lanzamiento cada 6-8 semanas!?!?" él dijo. "Eso es mucho tiempo". "No, me escuchaste mal", le dije, "son 6 a 8 meses "
AShelly
2
Tengo curiosidad por saber qué tipo de producto tiene más de 100 ingenieros integrados.
Pemdas
@reemrevnivek: por lo general, se puede usar una tabla de evaluación de proyectos anteriores. A veces, son lo suficientemente similares al nuevo producto. Incluso entonces, a pesar de que todas sus pruebas pasan en la placa de evaluación cuando realmente ejecuta el firmware en el dispositivo final, la mayoría de las veces, las pruebas se romperán porque hubo algunas cosas nuevas que los chicos del hardware decidieron agregar en el último minuto o tal vez no mencionó a nosotros en el comienzo ....
hopia

Respuestas:

10

Creo que dos técnicas son clave:

  • Desarrolle un simulador completo o un entorno de prueba para el hardware, de modo que pueda desarrollar el software como si tuviera un hardware real. No escatime ni tome atajos aquí: desarrollar un buen simulador dará sus frutos.

  • Escriba muchas pruebas unitarias contra el simulador.

Una vez que tenga estas cosas en marcha, y la gente esté segura de que el simulador y las pruebas unitarias le darán una idea precisa de cómo funcionarán las cosas con el hardware, será más fácil adoptar otras técnicas ágiles (iteraciones cortas, refactorización implacable, etc.) .

Kristopher Johnson
fuente
Además, haga que los fabricantes de chips proporcionen la parte relevante del código del simulador.
rwong
para cuando tenga estas cosas que un competidor ya haya enviado
Bill
Si tiene más de 100 ingenieros, ciertamente puede crear un simulador utilizable en menos tiempo del que enviarán sus competidores. Eso es especialmente cierto si sus competidores no tienen forma de probar su software hasta que reciban el hardware.
Kristopher Johnson
Sí, estoy de acuerdo en que los simuladores son clave. Por lo tanto, está diseñando todo el sistema desde el principio en función de la eficacia con la que puede dividir el sistema en componentes comprobables. Ahora, ¿cómo convencer a todas aquellas personas que ir ágil es otra pregunta ........
hopia
@ factura Eso es muy probable. Sin embargo, eso probablemente significa que enviaron un producto inferior no probado, y el producto del OP los expulsará del agua. Bueno, al menos así es como debería ser.
Julio
2

El impacto de Agile en un proceso de desarrollo que involucra a múltiples proveedores se puede comparar con lo que sucede cuando una empresa se convierte en JIT.

Para entregar JIT, cada uno de los proveedores de la compañía tiene que entregar JIT.

function deliversJIT( company ) { 
    return company.isJIT() && map( deliversJIT, company.suppliers() );
}

Del mismo modo, si desea que se desarrolle un producto complejo de acuerdo con las metodologías ágiles, todos los subgrupos de la cadena deberían poder trabajar de esa manera.

En términos de desarrollo 'incremental' (también conocido como Tracer Bullets de hace 15 años), esto implicaría que el 'núcleo' se lanzará muy pronto al controlador, y que el controlador básico estará disponible para el integrador, y que la GUI desarrollarse, con un solo botón y un cuadro de edición, al mismo tiempo.

La parte difícil es convencer a los diseñadores de hardware, provenientes de una sólida disciplina de ingeniería avanzada, para unirse a nuestra sociedad de fabricantes.

La segunda parte más difícil es encontrar una manera de permitir el desarrollo incremental en un mundo donde se debe solicitar una impresión de hardware con 3 semanas de anticipación. Estoy pensando en emuladores, fpga está aquí. Sin embargo, no soy un tipo de hardware.

Si está dispuesto a caer en el desarrollo de hardware incremental, puede, al igual que en los bordes de una cadena JIT, prever un mecanismo de amortiguación que permita que los equipos Ágiles avancen.

No seamos ciegos: ¡Agile también tiene que lidiar con procesos pesados! No le pida al equipo de Agile que ahora 'refactorice' su base de código Java a Python en el próximo sprint. Es solo porque algunas de las partes son realmente muy estables que podemos bailar nuestros movimientos ágiles sobre ellas.

xtofl
fuente
+1 para ágil solo es posible porque el material subyacente está completamente diseñado / hecho.
Bill
1

Manifiesto Ágil: http://agilemanifesto.org/

"Individuos e interacciones sobre procesos y herramientas"

  • Conoce más Empuje menos papel.

"Software de trabajo sobre documentación completa"

  • Prototipos y picos tecnológicos de construcción temprano y con frecuencia.

  • Resuelva el problema real del usuario en lugar de continuar desarrollando una adherencia exigente a una especificación. Esto significa soluciones evolutivas . La idea de que tenemos que construirlo bien porque nunca podemos construirlo de nuevo está mal. Planea iterar. Hágalo parte de la estrategia de comercialización y despliegue.

"Colaboración del cliente sobre la negociación del contrato"

  • Los procesos de control de cambios hipercomplejos son solo formas de decir "no" al cliente.

  • Bloquear todos los requisitos por adelantado y luego imponer el control de cambios es otra forma de decir "no".

  • Si ya planea más de una versión, puede diferir más fácilmente los requisitos para una versión posterior. Una vez que el cliente tenga el dispositivo con el software incorporado, la próxima versión cambiará en sus prioridades.

"Responde al cambio sobre el siguiente plan"

  • Si bien la integración compleja requiere un plan complejo, el "programa" general (o secuencia de proyectos) no se puede proyectar en concreto demasiado pronto.

Una metodología totalmente ágil (es decir, scrum) puede no tener sentido para un sistema integrado.

El manifiesto ágil, sin embargo, proporciona formas de permitir que el cambio sea posible sin permitir un simple caos.

S.Lott
fuente
0

Mi problema con scrum en sistemas embebidos es que hay muchas tareas que hacer, especialmente en las primeras etapas, que no son demostrables. Comenzamos con una placa de desarrollo, sin sistema operativo, sin pantalla, sin comunicaciones en serie, etc. No teníamos nuestra pantalla para 6 sprints.

Los primeros 4 sprints fueron: Poner en funcionamiento el RTOS Crear tareas Escribir controladores de red y en serie Escribir rutinas de interrupción para botones, comunicaciones, etc. Escribir las clases y métodos de la base de datos primaria Escribir un menú de depuración en serie

La mayoría de estas tareas no son adecuadas para historias de usuarios. De hecho, la única interfaz en todo el sistema era el menú de depuración en serie, integrado en el sprint 3, por lo que no había nada que demostrar al final de los sprints. Incluso el menú en serie estaba destinado a uso interno y no a un usuario final.

Por supuesto, cada clase que escribimos tiene pruebas unitarias asociadas y utilizamos un marco de pruebas unitarias para automatizar la ejecución de todas las pruebas.

Terminamos escribiendo frases de "historias de usuario" como "Como desarrollador ...", algo con lo que no estoy contento, pero al usar Target Process (www.targetprocess.com), no existe el concepto de un elemento de cartera que sea una tarea o tarea

Me encantaría saber cómo otros han manejado estas situaciones.

Bruce
fuente