Um Processo Típico de Desenvolvimento
Advertência ao leitor. Infelizmente, não tive
tempo (ainda) de produzir uma descrição completa de um processo de
desenvolvimento. Produzi apenas uma descrição resumida de um processo típico.
Falta falar de ferramentas, condições de entrada e saída, melhorar as
descrições, dar mais exemplos, definir melhor os artefatos e fornecer exemplos
dos mesmos, etc. Um dia ...
Outra advertência ao leitor. Este processo é
relativamente "light". Muitas pessoas usam processos mais pesados com muito mais
artefatos permanentes. Não estou dizendo que este é o melhor. É apenas um
exemplo (mas que funciona).
Lembre que temos que definir quem faz o quê, quando e como.
Quem: Os Papeis
A descrição de papeis segue. Claro que alguns papeis poderão ser assumidos
pela mesma pessoa, dependendo do tamanho do time.
Papel |
Responsabilidades |
Pessoas alocadas |
Board de Mudança |
- Aprova mudanças nos requisitos e mudanças arquiteturais
|
|
Cliente |
- Fornece Use Cases e requisitos não funcionais
- É um usuário final direto do produto
- Fornece Testes de Aceitação
- Toma decisões de business, isto é, mudanças nos requisitos
|
|
Customer Liaison |
- Comunica regularmente com o cliente para obter requisitos, mudanças
de curso, etc.
|
|
Documentador |
- Cria documentação ou organiza a documentação produzida pelos outros
- Cuida de controle de mudanças de artefatos com a ferramenta de
Controle de Versão
- Mantém a home page do projeto atualizada
|
|
Programador (ou Desenvolvedor ou Engenheiro de
Software) |
- Design, Interface HM, Programação e Testes de Unidade
- Deve ser bom para comunicar, programar e descobrir formas simples
de resolver problemas
- Deve programar bem, refatorar e testar bem
- Responsável por parte da documentação (aquela referente ao código
sob sua responsabilidade)
|
|
Project Manager |
- Dedica pelo menos 2 ou 3 horas por semana pensando na gerência do
projeto, mesmo que tenha outras atribuições de programador
- As horas que se "perdem" fazendo isso se compensam facilmente pelo
controle que se obtem sobre o desenvolvimento
- Se não fizer isso, o projeto se torna frouxo e vai demorar mais
tempo para ser terminado
- Organiza, rastreia e informa sobre projeto
- Gerencia documentos
- Comunica com sponsor
- Assegura a continuidade do projeto
- Assegura que cada pessoa do time tenha tarefas alocadas e esteja
fazendo seu papel
- Conversa com cada membro do time, pelo menos 1 vez por dia sobre o
andamento das tarefas. Bastam alguns minutos
- Lidera a reunião semanal de acompanhamento (1 hora)
- Trata de aspectos como recursos, RH, treinamento, responsabilidades
para o resto da empresa, verifica métricas e as mostra para pessoas
interessadas, etc.
|
|
Sponsor |
- Aprova e suporta o projeto
- Fornece os Business Requirements
- Fornece algumas restrições de projeto (tempo, orçamento, datas
especiais, ...)
|
|
Tester |
- Transforma testes de aceitação especificados pelo Cliente em código
- Lembre que testes de unidade são feitos pelos Programadores e não
pelo Tester
|
|
(Tiger Teams) Membros de Equipes de
Emergência |
- Investigam problemas urgentes rapidamente
|
|
Tracker |
- Acompanhar e prover feedback sobre
- Métricas
- Qualidade das estimativas
- Big picture
- Riscos
- Deve coletar informação de métricas sem ser um constante intruso
- Divulga métricas de alguma forma visível
- Atualiza o cronograma, usando alguma ferramenta apropriada
- Como ele assume o papel de Avaliador de Riscos, ele:
- Identifica e avalia riscos
- Ajuda a bolar planos de recuperação
|
|
Quem decide o quê?
- Neste processo, Business (Sponsor e Cliente) decidem:
- O escopo (o que fazer)
- Prioridades (em que ordem)
- Composição de releases
- Data de releases
- Os técnicos decidem:
- Estimativas de tempo para cada Use Case
- Consequências de decisões que o Business toma
- Que processo usar
- Escalonamento detalhado
O Quê, Como: As Atividades do Processo
- O processo é iterativo-incremental
- O processo procura colocar um release inicial nas mãos do cliente o mais
rapidamente possível de forma a obter melhor feedback do cliente sobre a
funcionalidade
- A primeira iteração deve portanto:
- Testar a arquitetura completa
- Ser mínima (cliente escolhe o que vai nela)
- Risk-Confronting (técnicos escolhem as coisas mais difíceis primeiro
para minimizar o risco)
- Demais mudanças são integradas à versão de produção o mais rapidamente
possível, em pequenos incrementos, de forma a evitar grandes integrações
- Já que o cliente está perto de nós, teremos muita interação com ele e não
precisamos de "sign-off" de requisitos para nos proteger. O cliente pode mudar
os requisitos a qualquer momento. Nós estamos prontos para alterar o código
devido a nosso foco em testes automáticos.
- "Travel light"
- Temos poucos artefatos permanentes sob controle de mudança
- Não há longos relatórios
- Não há longas reuniões
As atividades
[Depois, devo melhorar essa descrição e incluir: Fase, atividade, descrição,
como fazer (sub-atividades ou WBS), artefatos (deliverables), artefatos sob
controle de mudança, quem aprova e como, responsáveis, condição de entrada,
etc.]
A Fase de Planejamento e Elaboração
Obtenção de Requisitos
- Os requisitos de Business são obtidos do Sponsor [Project Manager +
Customer Liaison]
- O resultado deste levantamento está num Documento de
Visão e Escopo, descrito aqui
- Identifique classes de usuários do produto
- Identifique representativos apropriados das classes de usuários
- Escolha uma técnica de obtenção de requisitos
- Algumas técnicas estão descritas aqui
- Elabora-se um cronograma para a obtenção dos Use Cases, Requisitos
Funcionais e Requisitos Não Funcionais
- Loop para cada parte do sistema
- Usar as técnicas de obtenção de requisitos para desenvolver Use Cases
para um pedaço do sistema [Customer Liaison + 1 pessoa]
- Transformar os Use Cases numa lista de requisitos funcionais [Customer
Liaison + 1 pessoa]
- Os requisitos não funcionais são obtidos do cliente [Customer Liaison +
1 pessoa]. Se não sabe o que são requisitos não funcionais, clique aqui
- Todos os requisitos são numerados de forma a facilitar inserções e
remoções
- Para melhorar o entendimento dos requisitos por perte de todos os
participantes, pode-se fazer um modelo conceitual aqui (modelo de
análise)
- Não precisa entrar sob controle de mudança, pois, neste processo, o
modelo conceitual só é necessário (quando o é) até ser substituído pelo
código da primeira iteração
- Acreditamos que a combinação de requisitos/código/testes será
suficiente como artefatos permanentes
- Já que o modelo conceitual não é permanente, não precisa ser feito com
uma ferramenta especial. Basta rascunho em papel.
- Desenvolver protótipos de interface com o usuário se for necessário para
esclarecer requisitos que não ficaram bem entendidos
- Desenvolver os testes de aceitação a partir dos Use Cases
- No presente processo, o cliente especifica os testes de
aceitação
- Repetir o loop para outras partes do sistema
- Artefatos: Documentos HTML + Modelo de Use Cases em UML com Rational Rose
+ cronograma
- Controle de mudança: Sim
- Quem aprova: Sponsor, Cliente, Project Manager
Elaboração do Projeto Arquitetural
- Projetar a arquitetura [Os desenvolvedores, talvez não todos]
- Se você não sabe o que vai num projeto arquitetural, clique aqui.
- Artefato: Qualquer mídia, até rascunho em papel
- Controle de mudança: Não
- Neste processo, o projeto arquitetural só é necessário até ser
substituído pelo código da primeira iteração
- Acreditamos que a combinação de requisitos/código/testes será suficiente
como artefatos permanentes
- Quem aprova: Os desenvolvedores
Priorização da Funcionalidade
- Estimar tempo necessário a cada Use Case [Desenvolvedores]
- Em função deste tempo de da importância de cada Use Case (talvez parcial)
para o Business, cada Use Case recebe uma prioridade, indicando em que
iteração deverá entrar, a princípio. Isso poderá mudar depois, sem problema.
[Cliente, Customer Liaison, Project Manager]
- Elabora-se o cronograma para o primeiro release. O cronograma é mantido de
forma detalhada para o próximo mês; o resto pode ser aproximado.
- Artefatos: Um documento HTML
- Controle de Mudança: não
- Quem aprova: Cliente, Project Manager
A Fase de Construção
- Para entender o que segue, observe a semântica que estamos associando às
seguintes palavras:
- Release: Conjunto de Use Cases úteis para a produção e onde haverá
necessidade de ter treinamento dos usuários, documentação externa completa,
etc.
- Use Case: Um conjunto de ações feitas por um usuário do produto que
resulta em valor para o cliente
- Tarefa: Pedaços mínimos necessários para implementar um Use Case. Um
conjunto de tarefas é portanto o Work Breakdown Structure (WBS) de um Use
Case
- Iteração: Neste processo, uma iteração ocorre na integração de qualquer
funcionalidade à versão de produção. Lembre que entramos em produção com a
primeira iteração. Depois disso, cada tarefa, ou talvez Use Case, poderá ser
integrado ao ambiente de produção, com muita frequência
- Observe também que nem todo processo define essas palavras assim
(principalmente iteração e tarefa)
- Os passos abaixo são repetidos em loop
- Há um loop externo: cada release
- Há um loop interno: cada iteração
Construção do próximo release
- Consultar usuário sobre definição do próximo release: quais Use Cases
(mesmo que parciais) entrarão? [Cliente, Customer Liaison]
- Dividir cada Use Case em Tarefas (Work Breakdown Structure - WBS)
[Desenvolvedores]
- Usar tarefas pequenas (de 8 a 16 horas de trabalho)
- Estimar o tempo de cada tarefa e suas dependências [Desenvolvedores]
- Atualizar cronograma
- Tarefas são divididas entre desenvolvedores que programam, fazem testes de
unidade 100% dos testes de unidade devem rodar [Desenvolvedores]
- Observe que este passo implica em fazer Análise mais detalhada com o
Cliente, se necessário
- Quando requisitos mudam ao longo do tempo, devem passar pelo Board de
Mudança e devem entrar sob controle de mudança
- Idem, com respeito ao projeto arquitetural
- O design de baixo nível é feito no papel, sem artefatos permanentes
- Enquanto isso, o Tester prepara os testes de aceitação, roda os testes de
aceitação junto com o cliente [Tester, Cliente]
- Para terminar uma tarefa, os programadores devem completar a Transição
para Produto, o que inclui documentação e considerações de instalação
[Desenvolvedores]
- Antes de passar para a fase de integração, deve-se conduzir uma auditoria
de design/código [Desenvolvedores nomeados pelo Project Manager] e de
documentação [Cliente]
- Após aceitação na auditoria, integra o resultado ao sistema de produção.
Isso pode ser feito frequentemente, até uma vez por dia. [Tester]
- Artefatos: Cronograma, Código, testes de unidade e testes de aceitação,
outros artefatos de acompanhamento de processo (ver documento de gestão do
processo)
- Controle de Mudança: Sim, só para os 3 artefatos acima
- Quem aprova:
- O que vai no próximo release: [Cliente]
- Design/Code review: [Desenvolvedores indicados pelo Project Manager]
- Documentação e testes de aceitação: [Cliente]
A Fase de Implantação
- Como estamos usando um processo com integração contínua, há integração no
produto final que está em produção com muita frequência (até 1 vez ao dia, sem
problemas)
- Os usuários são treinados sob demanda
Controle de Mudança
- Mudanças aos requisitos são indicados pelo Cliente e aprovadas ou não pelo
Board de Mudança
- Mudanças que devem passar por este processo de aprovação são apenas
aquelas que afetem o documento de requisitos
- Pequenas mudanças podem ser aceitas e feitas pelos desenvolvedores sem
burocracia
- Mudanças à arquitetura são indicados pelos desenvolvedores e aprovadas ou
não pelo Board de Mudança