Como você lida com o design no Scrum?

26

Como você lida com o design no Scrum? Você ainda possui documentos de design bem escritos para cada iteração de scrum? Você acabou de criar notas de projeto com diagramas UML? Ou você apenas tem um código bem comentado?

Cada iteração pode envolver alterações no design, então eu só queria saber como as pessoas capturam isso, para que os novos desenvolvedores tenham um trabalho fácil de entender o domínio e se integrarem o mais rápido possível.

Seth
fonte
O design deve ser tratado de forma incremental pela equipe, tanto antes como durante o sprint. A maioria das equipes incorpora o refinamento da lista de pendências como uma atividade contínua para revisar os próximos itens da lista de pendências. Este é o momento perfeito para a equipe arquitetar e projetar soluções suficientes para estimar o esforço. Quaisquer artefatos criados devem ser anexados à história. Durante o sprint, atividades de arquitetura e design mais refinadas devem ocorrer. Anexe esses artefatos também. Quando a história estiver concluída, deve haver uma quantidade rica de informações sobre a solução fornecida.
treefiddy 21/09

Respostas:

11

só porque é scrum não significa que tudo muda a cada sprint!

Scrum é fazer o que é necessário (mas não mais) . Você ainda precisa fazer o design e ainda precisa documentar. É apenas a quantidade não é fixa nem como fazê-lo.

Parte do planejamento de cada sprint é decidir o que precisa ser feito. Se algo no backlog precisar ser projetado porque afeta outras coisas, você precisará adicionar uma tarefa específica para os processos de design e fazer isso antes da tarefa de implementação.

Martin York
fonte
9

Eu tenho muito a dizer sobre esse assunto. Eu já vi muitos casos em que empresas / equipes / pessoas dizem que estão usando uma abordagem ágil para software, mas, na realidade, querem colher as recompensas que os métodos ágeis prometem sem aderir aos princípios.

Para que a iteração rápida funcione, você deve fazer o desenvolvimento orientado a testes (eu parei de dizer que você deve fazer o TDD com relutância). No TDD, seus testes expressam o design e a intenção do código (quando dizem "o código é a documentação", o que eles deveriam dizer é "os testes são a documentação"). Ao escrever testes de unidade que expressam sua compreensão do recurso em questão, você está declarando explicitamente o que acredita que o código precisa fazer. Então você escreve o código que faz isso. Em seguida, refatorar esse código para que cumpra os princípios principais de arquitetura "Red-Green-Refactor".

A execução dos testes de unidade com cada check-in (ou mesmo antes de cada check-in) verifica se o novo código que você escreveu não quebra a funcionalidade esperada em outra área do aplicativo. Isso fornece uma rede de segurança que permite alterar o código com abandono sem destruição. À medida que sua compreensão dos requisitos em questão aumenta, você pode modificar o teste para refletir esse novo conhecimento. O design real está nos testes de unidade. Tudo o resto (incluindo o código que não é coberto) é uma mentira.

Aqui estão algumas leituras recomendadas

Estes são bons lugares para começar a procurar aprender como realmente abordar o desenvolvimento ágil.

Michael Brown
fonte
4
@ Murph: A idéia é que a arquitetura seja emergente, que você a encontre através de testes, em vez de defini-la antecipadamente.
Martin Wickman
5
@ Martin eu meio que vejo - mas ainda existem questões horríveis de escala lá. Estou confortável com isso até um certo nível, mas além disso ... bem, suponho que você provavelmente devesse ter feito isso (ou pelo menos ter uma estrutura inicial) antes de chegar ao nível de desenvolvimento scrum (em que se pode esperar o equipe para refinar e evoluir a arquitetura de alto nível e a baixa).
Murph
2
@ Murph: Sim, o bootstrapping é um problema. Você precisa selecionar pelo menos a linguagem de programação. Requisitos não funcionais, como escalabilidade e desempenho, influenciam muito a arquitetura e devem ser levados em consideração o mais cedo possível. Mas, além disso, gosto de começar da maneira mais simples possível e, em seguida, de forma incremental e iterativa, adicionar recursos de trabalho (yagni) fatia por fatia. Concentre-se na refatoração para manter a base de código limpa e extrair coisas até que o design apareça.
Martin Wickman
1
A razão pela qual o Scrum é iterativo é que a própria natureza do software significa que nunca acertamos na primeira vez. Em muitos casos, as partes interessadas não sabem o que realmente querem até que tenham algo pela frente. O que é melhor: passar horas criando um design para um recurso (que precisará ser refinado ou provavelmente jogado fora quando a borracha atingir o asfalto) e comunicando esse design ao implementador; ou gastando essas horas implementando uma primeira passagem no recurso e refinando-o através de testes e refatoração.
Michael Brown
3
A propósito, você nunca perceberá o verdadeiro valor do TDD até que você tenha um teste inesperadamente vermelho. Esse foi o meu grande momento "aha" com o TDD. Observando o teste que ficou vermelho, percebi que, sem o teste, o bug teria sido muito difícil de rastrear depois que o código estivesse nas mãos dos testadores. Se você precisar visualizar uma arquitetura de cima para baixo de alto nível, existem muitas ferramentas que podem gerar diagramas de Sequência e Classe a partir do seu código. Use-os para obter um relatório de instantâneo e descartá-los porque não são a lei.
Michael Brown
2

Scrum é uma metodologia de gerenciamento de projetos, não uma metodologia de desenvolvimento de software. Scrum é normalmente usado em conjunto com uma metodologia Agile. Aí reside a sua resposta.

Steven A. Lowe
fonte
4
O Scrum é uma metodologia ágil e focada na equipe de desenvolvimento e nas partes interessadas e na obtenção de entregas iterativas de código de trabalho. O gerenciamento de projetos de cima para baixo e o Scrum são como óleo e água.
Michael Brown
1
@ Mike concordou, mas sempre achei que o Scrum é a metodologia ágil de um gerente de projetos, enquanto o Extreme Programming é a metodologia ágil de um desenvolvedor. Dito isto, eu vi o Scrum aplicado a muitos outros projetos que não software. Curiosamente, a Wikipedia fornece essa definição de Scrum: Scrum é uma metodologia iterativa e incremental para gerenciamento de projetos, freqüentemente vista no desenvolvimento ágil de software, um tipo de engenharia de software: en.wikipedia.org/wiki/Scrum_(development) .
ahsteele
2
Acabei de perceber que eu votei acidentalmente seu comentário ... não quis. Eles não me permitem remover esse voto, a menos que você faça uma edição menor. Eu nunca vi o Scrum descrito como um método de gerenciamento de projetos antes. Interessante. Dito isto, acho que esperar que o scrum funcione para software sem aplicar o TDD é o motivo pelo qual muitas tentativas de "agilidade" falham.
Michael Brown
1

Não existe um design inicial tão amplo quanto os requisitos frequentemente mudam. Portanto, projetar até o nível da classe geralmente é uma perda de tempo. No entanto, pode valer a pena esboçar decisões arquitetônicas de nível superior.

O problema com a criação de documentos de design para serviços pesados ​​é que eles ficam obsoletos quase assim que são criados. Portanto, o que funcionou melhor é geralmente uma documentação de alto nível que dificilmente mudará completamente em um curto período de tempo.

Vadim
fonte
1
Eu não diria que os requisitos estão mudando constantemente. De fato, durante um sprint, os requisitos são estáticos e inalterados. Após cada sprint, a prioridade dos requisitos pode ser reavaliada. Compre seu objetivo geral não será alterado.
Martin York
@ Martin bom ponto. Acho que devo reformular que eles estão mudando de scrum para scrum.
Vadim
1

Scrum é um modelo iterativo e incremental baseado em valores ágeis . Isso significa que você não tem uma fase de design separada. A idéia é que você esteja constantemente lidando com o design, assim como você está constantemente lidando com a análise, implementação, teste e integração ao longo do projeto.

Você precisa de um pouco de planejamento para que isso funcione. Entre na reunião de planejamento do sprint , em que a equipe estima tarefas para o sprint adiante. A maioria das pessoas não percebe que isso não é apenas uma reunião de estimativa, mas também um esforço de design. Por exemplo, uma tarefa pode ser "Adicionar código para o novo modelo de carro". Você ainda não pode estimar isso, precisa saber um pouco mais. Portanto, a equipe discute o design e apresenta uma solução ampla ("subclasse Car?") E acrescenta isso como um lembrete para a tarefa. Você raramente precisa de mais formalidade do que isso. Agora você tem uma idéia de como resolver o problema. Você ainda não tem todos os detalhes e está tudo bem, você conhece o design o suficiente para poder fazer uma estimativa confortável. Sem precisar criar diagramas (neste momento).

Para documentação física real , recomendo criar um diagrama de visão geral dos sistemas em uma parede para que todos possam ver. A visão geral precisa apenas incluir as classes e módulos mais importantes e raramente deve ser atualizada. Além disso, a criação de alguns diagramas de estado para as classes mais importantes do sistema é muito útil. Polvilhe com alguns diagramas de sequência selecionados de casos de uso típicos para facilitar que as pessoas vejam rapidamente como as coisas estão conectadas. Suponho que você possa gerar diagramas de hierarquia de classes a partir do seu código, para que o problema seja facilmente resolvido.

Observe que todos os diagramas são criados após a implementação real. Isso está de acordo com o "software de trabalho sobre documentação abrangente" e o design just-in-time.

E sim, o código legível é definitivamente documentação.

Martin Wickman
fonte
1

A arquitetura geral do projeto e o design de alto nível seriam feitos fora das equipes de scrum quando os proprietários do projeto estivessem criando as histórias.

É necessário que haja um design geral suficiente, escrito de qualquer forma, para ajudar a ver o relacionamento entre as histórias e as expectativas do cliente.

Parte do design necessário para cada história seria feito no planejamento e negociação com o proprietário do produto durante o planejamento.

A maior parte do esforço de design de uma história seria feita no sprint.

Se a história não estiver definida o suficiente para ser estimada, uma caixa de tempo poderá ser reservada no sprint atual para fazer o trabalho de design suficiente para que uma história apropriada possa ser criada para um sprint posterior.

Blake
fonte
0

Meu entendimento é que você faz um design de nível superior com os requisitos iniciais que você reúne no início do projeto. Você documenta bem esse design.

Então, quando você realmente implementa o requisito, altera o design de nível inferior conforme necessário, mas evita alterar o design de nível superior.

Bem, foi assim que me foi explicado há cinco minutos ...

indyK1ng
fonte
0

Hoje existe uma divisão dentro da comunidade Eclipse entre ferramentas UML tradicionais focadas no MDD, nas quais o modelo direciona o código / desenvolvimento e Omondo, que considera que as iterações devem conduzir o processo de desenvolvimento e, certamente, não apenas o modelo.

Eu concordo com eles porque o MDD é uma porcaria, enquanto a UML é realmente uma excelente maneira, porque padroniza para se comunicar com outros membros da equipe. texto alternativo

UML_GURU
fonte