Tarefa: Obter Compromisso de Testabilidade
Esta tarefa concentra-se na definição, na priorização e na promoção das necessidades e dos benefícios das possibilidades de teste.
Disciplinas: Teste
Objetivo

A finalidade desta tarefa é:

  • Promover a criação de um software testável que suporte as necessidades do esforço de teste
  • Promover e suportar o uso de técnicas e ferramentas de automação apropriadas
Relacionamentos
Etapas
Examinar as Necessidade da Possibilidade de Teste
Finalidade:  Obter um bom entendimento das necessidades de implementação e avaliação de teste que precisarão ser tratadas pelo processo de liberação de software ou pela arquitetura e pelo design de software.  

Estude a arquitetura de automatização de testes e as especificações da interface de teste para obter um bom entendimento das necessidades de implementação e avaliação do teste. Em particular, compreenda as restrições que serão impostas por essas necessidades ao processo de liberação do software ou à arquitetura e ao design do software.

Avaliar o Impacto e Priorizar
Finalidade:  Identificar as necessidades de testabilidade mais importantes para o esforço de teste e defender sua resolução antes das necessidades menos importantes.  

Estude as necessidades de testabilidade e execute a análise básica em termos do impacto no esforço de teste provocado pela necessidade não ter sido atendida. Considere também algumas análises básicas do esforço possível exigido pela equipe de desenvolvimento para investigar e fornecer uma solução para a necessidade. Identifique, para cada necessidade, soluções alternativas possíveis que teriam um impacto menor nas equipes de desenvolvimento.

Usando essas informações, formule uma lista priorizada que coloque em primeiro lugar as necessidades que causarão maior impacto no esforço de teste caso não sejam atendidas e que não possuem solução alternativa. Faça isso não desperdiçar valiosos recursos de desenvolvimento em necessidades de testabilidade menos essenciais, reservando essa oportunidade para as necessidades realmente importantes.

Definir os Benefícios da Possibilidade de Teste
Finalidade:  Ser capaz de vender a importância das necessidades de testabilidade para os investidores em termos de custo-benefício básico. 

Ao solicitar que a equipe de desenvolvimento desenvolva um software com provisão específica para o esforço de teste, você estará acrescentando requisitos e restrições adicionais ao esforço de desenvolvimento; isso resume-se basicamente em mais trabalho, além de risco e complexidade adicionais para a equipe de desenvolvimento. Algumas equipes de desenvolvimento considerarão o design de testabilidade como fora do escopo de sua responsabilidade. Em outros casos, as necessidades de testabilidade deverão competir pelos recursos de desenvolvimento com as necessidade e os requisitos do cliente que normalmente recebem mais prioridade. Dessa forma, você precisa "vender" os benefícios das necessidades de possibilidade de teste para o coordenador de projeto, o arquiteto de software e outros investidores da equipe de desenvolvimento.

Formule uma análise dos benefícios de cada necessidade de testabilidade para a qual você deseja obter um compromisso. Procure artigos de pesquisa e estudos que suportem a importância de sua necessidade de testabilidade e utilize estatísticas sobre o retorno de investimento quando ela estiverem disponíveis. Pense nos benefícios em termos de importância para a equipe de desenvolvimento; que informações úteis de avaliação você poderá fornecer a eles que não poderiam ser fornecidas se essa necessidade não fosse atendida? Como isso facilitaria ou tornaria mais eficaz que você fornecesse um feedback à equipe de desenvolvimento oportuno, preciso, detalhado ou útil durante cada ciclo de build? Essa necessidade fornecerá uma característica útil à equipe de desenvolvimento que poderá ser usada em seu próprio esforço de teste ou em diagnósticos futuros de falhas do software? No caso de disputa com as necessidades do cliente, pense em maneiras de demonstrar que uma solução antecipada para a necessidade de testabilidade trará oportunidades adicionais para que os requisitos do cliente sejam suportados em ciclos de build subseqüentes.

Identificar e Dedicar-se aos Campeões de Possibilidade de Teste
Finalidade:  Formar alianças com investidores importantes que defenderão a criação de um software testável e suportar as necessidades das equipes de teste nesse aspecto.  

Considerando que você estará impondo um possível trabalho ou risco adicional à equipe de desenvolvimento, identifique e conheça os investidores influentes com capacidade para aprovar ou ordenar o suporte da testabilidade. Faça isso o mais rápido possível, antes de promover ativamente as necessidades de testabilidade que deseja que sejam suportadas.

Os três investidores mais importantes são o arquiteto de software, o gerente de projeto e o representante do cliente. Passe algum tempo com o arquiteto de software e mostre a importância de se criar uma arquitetura de software que suporte a testabilidade. Passe algum tempo com o gerente de projeto e mostre os benefícios da testabilidade em termos de produtividade da equipe de teste e um rápido tempo de resposta às informações de avaliação. Mostre ao cliente a importância de liberar um produto de qualidade.

Promover Benefícios e Necessidades de Possibilidade de Teste
Finalidade:  Informar aos investidores relevantes sobre as importantes necessidades de testabilidade do esforço de teste e conquistar seu suporte para a testabilidade.  

É importante promover as necessidades da testabilidade na direção certa. Cada combinação de gerente de projeto, equipe de desenvolvimento e investidores do lado do cliente possui uma dinâmica social e cultura diferentes; é importante que você esteja ciente disso quando promover as necessidades de testabilidade. Como heurística geral, não monte uma "campanha" de possibilidade de teste formal se a equipe for relativamente relaxada e informal, nem utilize uma abordagem informal em um projeto de alta formalidade.

Em alguns casos, uma sessão colaborativa de troca de idéias é um formato de apresentação útil, em que a necessidade é apresentada como um desafio para a equipe de desenvolvimento, que é aconselhada a identificar soluções criativas para atender à(s) necessidade(s) de possibilidade de teste. Isso estimula sua propriedade da solução e gera uma sensação de parceria no esforço.

O tempo também é importante neste passo. Como regra geral, tente identificar e promover as questões de testabilidade mais importantes o quanto antes, em geral, durante a Elaboração, e, quando for possível, na Fase de Iniciação. Quando questões de testabilidade são levantadas nos estágios iniciais do projeto, a equipe normalmente é menor e mais receptiva a mudanças. Também é mais fácil incluir essas necessidades no design em desenvolvimento já que geralmente um retrabalho mínimo é necessário.

Uma boa chance de identificar as necessidades de possibilidade de teste e apresentá-las de uma forma positiva e menos "oficial" é quando a equipe de teste oferece seus serviços de avaliação das atividades de prova de conceito e de avaliação da seleção de componentes de terceiros para uso no esforço de desenvolvimento. Especificamente, o envolvimento das equipes de testes durante a seleção de componentes de banco de dados, seleção de componentes ou controle de UI, seleção de componentes de middleware etc. significa que as questões de testabilidade podem ser usadas como um aspecto dos critérios de seleção de componentes. Por exemplo, em muitos casos, as equipes de desenvolvimento terão uma preocupação mínima sobre qual biblioteca de widgets de UI utilizar; se uma biblioteca for mais testável que outra, a equipe de desenvolvimento ficará feliz em selecionar a biblioteca de widgets mais testável.

Se já tiver tido problemas para identificar ou conhecer os campeões de testabilidade, você talvez precisará considerar uma abordagem que apresente as mudanças de uma forma mais incremental, tornando-as possivelmente menos arriscadas e distribuindo-as em blocos menores de esforço, ou talvez precisará escalar as necessidades de testabilidade mais importantes como questões críticas do projeto que impedem que o esforço de teste seja bem-sucedido até que elas sejam resolvidas. No segundo caso, recomenda-se que você considere cuidadosamente todas as suas opções antes de decidir adotar essa medida.

Obter Compromisso para Suportar e Manter a Possibilidade de Teste
Finalidade:  Obter um acordo de que a equipe de desenvolvimento continuará suportando e mantendo as características de testabilidade.  

É importante assegurar que as necessidades de testabilidade sejam consideradas da mesma maneira que qualquer outro requisito ou restrição imposta ao esforço de desenvolvimento. Você precisa receber uma confirmação de que as características de testabilidade disponibilizadas hoje não serão abandonadas amanhã.

Em alguns casos, tentar obter esse compromisso poderá resultar na recusa da equipe de desenvolvimento em desenvolver ou suportar as necessidades de testabilidade. Embora isso possa ser desestimulante, é melhor estar ciente dessa situação e lidar com a realidade o quanto antes do que perder um tempo enorme e desperdiçar esforço desenvolvendo uma implementação de teste que não será mais suportada pela equipe de desenvolvimento.

Defender a Resolução dos Problemas de Possibilidade de Teste
Finalidade:  Monitorar e defender a resolução das questões de testabilidade.  

Embora a equipe de desenvolvimento possa concordar em fornecer o suporte necessário para as necessidades de testabilidade do esforço de teste, é importante que você tenha um interesse ativo no design, na implementação e na conclusão desse trabalho. Não abandone simplesmente o trabalho só porque a equipe de desenvolvimento concordou em lidar com as necessidades de testabilidade ou começou a trabalhar em uma solução; você precisa garantir que uma solução apropriada será desenvolvida no momento oportuno.

Coloque a si mesmo e os outros membros da equipe de teste à disposição para responder às perguntas das equipes de desenvolvimento e se ofereça para avaliar os protótipos assim que eles forem construídos. Ofereça um feedback construtivo e demonstre entusiasmo pelo esforço da equipe de desenvolvimento em ajudá-lo a atender às suas necessidades. Ofereça os principais membros de sua equipe para promoverem ou participarem de workshops de design para as necessidades de testabilidade mais complexas, mas tome cuidado para que sua equipe não acabe se tornando autoritária e controlando o espaço de solução do processo de design para os desenvolvedores.

Quando surgirem problemas e você sentir que eles não estão recebendo a devida atenção ou sendo resolvidos com a rapidez necessária, compartilhe suas preocupações com o arquiteto de software e o gerente de projeto. Peça que o gerente de projeto registre um problema na lista problemas do projeto se for apropriado.

Avaliar e Verificar os Resultados
Finalidade:  Verificar se a tarefa foi concluída apropriadamente e se os produtos de trabalho resultantes são aceitáveis. 

Agora que o trabalho foi concluído, convém certificar-se de que o trabalho foi vantajoso e que não foi apenas um grande consumo de papel. Você deve avaliar se o trabalho é de qualidade adequada, e se ele é completo o suficiente para ser útil aos membros da equipe que o utilizarão em seguida como entrada para o trabalho deles. Onde for possível, utilize as listas de verificação fornecidas no RUP para verificar se a qualidade e a integridade estão suficientemente boas.

Faça com que as pessoas que desempenham tarefas posteriores, que dependem do seu trabalho como entrada, participem da revisão do seu trabalho provisório. Faça isso enquanto você tiver tempo disponível para tomar alguma ação para resolver os problemas delas. Você também deve avaliar seu trabalho em relação aos principais produtos de trabalho de entrada para certificar-se de que foram representados de maneira precisa e suficiente. Pode ser útil fazer com que o autor do produto de trabalho de entrada revise seu trabalho nessa base.

Não se esqueça de que o RUP é um processo de entrega interativo e que, em muitos casos, os produtos de trabalho evoluem com o tempo. Dessa formal, nem sempre é necessário (e às vezes é contraproducente) formar completamente um produto de trabalho que será utilizado apenas parcialmente ou que nem será utilizado no trabalho imediato subseqüente. Isso acontece porque há uma grande probabilidade de que a situação em torno do produto de trabalho sofra alterações e de que os pressupostos feitos quando o produto de trabalho foi criado se provem incorretos, antes que o produto de trabalho seja utilizado, resultando em esforço perdido e retrabalho dispendioso. Evite também a armadilha de gastar muitos ciclos na apresentação em detrimento do valor do conteúdo. Nos ambientes de projeto em que a apresentação tem importância e valor econômico como um produto liberado do projeto, convém utilizar um recurso administrativo para executar as tarefas de apresentação.