quarta-feira, 18 de março de 2015

Test Mirror: An test strategy using Scrum method in an outsourcing project

ABSTRACT


Although conduct software testing is extremely important to reaching the quality, tests are still not a common place among companies. Running software tests in agile development environment makes that situation even more complicated, since it has a quick development with little documentation. This scenario demands a complete adaptation of the testing processes. This work presents a case study applied in a multinational company during a project which was developed with the agile method named Scrum and some aspects of Feature Driven Development where the whole testing process was restructured on its many phases, offering a punctual and systematic way to coordinate outsourcing resources and conduct scrum team activities.

INTRODUCTION

Software testing improves the software quality and reduces the risks; using agile software development method the companies are able to deliver the product in a short time, therefore, the agile methods tend to use another ways for documentation, not formal documentations, it can result a lack on test coverage. In this specific project the agile method was adopted, more over reasons, it’s also applied to improve the tracking of requirements changes during the project.
The project leader used to set the priority on bug retests; it results in a bottleneck in test team.  Another point is the difficulty for the testers to understand and recheck bugs reported by development team (Feature Leaders and Architectures); they used to report as their preference describing coding for example.
Intermittent bugs, tester’s mistakes, bugs badly reported, imply a delay for development team fix. Each week the test team had a large number of bugs to be retested because the developers used put the bug in "Resolved" state in both following cases: when it is ready to be retested and when it hasn't enough information to be analyzed.
The test team didn’t have time to execute system tests in a current build; it was executed only “sanity test” to provide quickly feedback about software quality. Quality analysis based on sanity tests result, isn't a good practice because the proposal of the sanity test is to provide input to plan system tests.
Solving some of these troubles, a new test process has been created and applied during the software life cycle. The challenge was to define following:
·         tests roles;
·         the process to interaction of dev’s and tester’s;
·         following up outsourcing resources in Scrum;
This panel will describes the agile methods aspects and the software test importance in this specific project as well as presents project roles,  test team interaction in each Scrum phase, and the interaction among testers, outsourcing team and development team. In additional this case of study might be used as reference for another's similar projects.











segunda-feira, 2 de fevereiro de 2015

Overview - Lean Software Development

O conceito “Lean Production” surgiu com o lançamento do livro “The Machine That Changed the World”  em 1990 quando a Toyota era da metade do tamanho da GM (General Motors). Hoje em dia a Toyota está passando a GM como maior montadora do mundo e se posiciona no mercado como a empresa mais bem sucedida nos últimos cinquenta anos. O livro trata de um sistema de produção enxuta (Lean Production System) com conceitos que tornaram-se a base para esse sucesso duradouro.
            Esse modelo de produção enxuta (Lean production) vai além da indústria automotiva, os princípios do pensamento enxuto são universais e têm sido aplicados com sucesso em muitas áreas; na indústria de software esse modelo é chamado Lean Software Development, onde seus criadores Mary e Tom Poppendieck (defensores de agile e maiores autores de livros de Lean Software) apresentam essa abordagem voltada para o processo desenvolvimento de software, detalhado a seguir.
            O desenvolvimento de software lean é baseado em sete princípios, nos quais nem os próprios autores entram em um concenso. Em cada novo livro publicado os princípios são ligeiramente modificados, podendo ser novos princípios e/ou em alguns casos apenas alteração dos nomes e descrição dos detalhes. Embora a base do processo lean seja os sete princípios, (analogia ao número mágico: The Magic Number Seven), atualmente na página oficial de Tom e Mary são apresentados oito princípios. No entanto vou detalhar aqui apenas os sete princípios apresentados em seu primeiro livro: “Lean Software Development: An Agile Toolkit.
1.    Elimine desperdícios (Eliminate waste): O objetivo é entregar exatamente aquilo que o cliente quer, nem mais nem menos do que exatamente o que o cliente quer. Para isso são apresentados alguns pontos nos quais ensinam a identificar esses desperdícios (Learning to see waste).  Abaixo são mostrados esses pontos usando como exemplo as práticas de XP (Extreme Programming).
o   Funcionalidades extras: Desenvolva apenas as estórias de hoje;
o   Requisitos: Estórias são detalhadas somente na iteração atual (não detalhar estórias antes de entrarem no planejamento da iteração);
o   Passos extras: Codifique diretamente das estórias; esclareça as dúvidas diretamente com clientes (stakeholder);
o   Encontrar informação: Acomode todos do projeto na mesma sala, incluindo clientes (stakeholder);
o   Defeitos não encontrados por testes: Teste primeiro, ambos desenvolvedores e clientes testam;
o   Espere, inclua clientes (stakeholder): Faça pequenas entregas;
o   Troca de tarefas: Desenvolvedores trabalham diretamente com clientes(stakeholder)

2.    Crie conhecimento (Amplify learning/ Learn first/ Create Knowledge): Consiste em criar o máximo de conhecimento sobre o que está sendo desenvolvido, não só em suas fases iniciais, como é sugerido em cascata(requisitos definidos), mas o aprendizado deve ser constante, sendo ele  antes, durante e depois do desenvolvimento. Esse princípio visa trazer à tona todo conhecimento absorvido pelos integrantes do projeto, o conhecimento tácito deve se tornar explicíto e fazer parte da organização como um todo. O ponto principal por parte das empresas, seria  entender que aprender sobre o produto em desenvolvimento é importante mas codificar conhecimento para uso futuro é essencial.

3.    Adie decisões (Delay/Defer commitment): Adiar decisões importantes para o mais tarde possível no projeto. Com essa prática, toda decisão que tem impacto irreversível  no projeto é feita com muito mais maturidade, dentro do processo como um todo. Uma decisão de arquitetura por exemplo, pode mudar todo comportamento do sistema, quanto mais distante decisões importantes de arquiteturas forem tomadas mais assertivas elas serão. Isso não significa não ter comprometimento com o projeto, essas decisões devem ser tomadas por time e/ou pessoas experientes, com domínio tanto na tecnologia que está sendo usada quanto no produto e/ou área de negócio do sistema que está sendo desenvolvido; Esse time experiente e comprometido, saberá até quando manter uma decisão importante em aberto. Um mito conhecido é afirmar que seguir a risca um planejamento é ter comprometimento. O planejamento deve ser aberto a mudanças, pode-se criar um plano de alto nível e deixar os detalhes em aberto, para que as decisões importantes sejam tomadas na hora certa, isso é,  planejar cuidadosamente e o comprometer-se com moderação.

4.    Entregue rapidamente (Deliver fast):  Esse princípio significa fazer entregas o mais rápido possível, como exemplificado nessa frase do livro “Implementing Lean”: “The moral of this story is that we need to figure out how to deliver software so fast that our customers don’t have time to change their minds.” Nós precisamos entregar software tão rápido que nossos clientes não tenham tempo para mudar de opinião (mudanças durante o projeto). No entanto fazer entregas rápidas não significa baixa qualidade, é possível fazer rápidas entregas com excelente qualidade. Segundo os autores existem 2 maneiras de fazer entregas com qualidade, lenta com máximo de cuidado e atenção aos mínimos detalhes ou rápida onde as pessoas têm autonomia para aplicar melhorias em seus processos. Empresas com pensamento lean trabalham com padrões de qualidade, mas essas normas existem porque eles incorporam as melhores práticas em como fazer com excelência seus respectivos trabalhos.
 
5.    Dê poder ao time(Empower the team/ Respect People/ Energize Workers): Esse princípio nada mais é do que dar importância a quem está fazendo o trabalho em si. Essas são as melhores pessoas para sugerir melhorias que resulta no aumento de produtividade e excelência do time. Investir no conhecimento para o desenvolvimento profissional do time também é uma prática importante nesse princípio, quanto mais as pessoas obtiverem conhecimentos que agreguem valor ao processo, maior será o retorno pra empresa. Criar maturidade do time é confiar em sua capacidade de ser auto-gerenciável. Confiar na opinião do profissional que está na linha de frente do trabalho, é dar ferramentas para que ele próprio encontre maneiras de colocar em prática essas melhorias, pois não existe nenhum processo tão bom, que não possa ser melhorado.

6.    Inclua integridade (Build Integrity In/ quality in): Um mito existente é que teste é feito para encontrar defeitos, sendo que na verdade teste é para prevenir defeito. Quando o conceito de construir o software com integridade e qualidade desde o início é aplicado, testar entra em primeiro plano (test first). Hoje em dia, existem metodologias de desenvolvimento orientada a testes, como o TDD que tem como objetivo diminuir o número de defeitos inseridos durante a fase de desenvolvimento. Construir com qualidade desde o início não exclui a necessidade de testes, até mesmo em fases finais do desenvolvimento, mas simplesmente oferece meios de diminuir drasticamente os defeitos encontrados em fases finais do projeto. Desenvolver com foco total em qualidade é absorver a cultura de que tudo deve ser feito para prevenir defeitos e não para encontrá-los.

7.    Otimize o todo (See the Whole/ Optimize the Whole): Otimizar o todo é olhar para toda organização quando uma decisão de negócio for tomada. Essas decisões abrangem sistemas que serão desenvolvidos e/ou atualizados. Um exemplo real de um estudo de caso aconteceu na Fujitsu, que recebia muitas ligações da BMI em seu help desk, para manutenção e suporte às suas impressoras. Após um estudo interno foi descoberto que grande parte das ligações eram relacionadas a impressoras de modelos antigos e convenceram a BMI a trocar para novos modelos de impressoras. Após as novas impressoras serem colocadas em uso, o número de ligações caiu em 40%, seria um caso de sucesso se a Fujitsu tivesse se atentado ao fato de que a sua receita também  era composta  pela quantidade de ligações recebidas em seu help desk; Com a queda de ligações a receita foi  igualmente reduzida. Esse fato está relacionado ao mito de otimizar pela decomposição, onde os departamentos trabalham de maneira completamente independente, essa prática tende a tomada decisões como essa feita na Fujitsu, onde o lucro da área de vendas aumentou mas o rendimento que deixou de entrar pelo help desk teve impacto significativo na receita de toda compania.

Do meu ponto de vista, o  maior problema que vem acontecendo hoje em dia é que muitas pessoas confundem os conceitos de ágil com o seu  real significado. Já ouvi empresas falando que aplicam “técnicas ágeis” com paradgmias antigos e outras com bastante desleixo em relação a padrões e normas de qualidade. Como afirmado pelos autores, mas que ao meu ver se aplica todas as metodologias ágeis,  “Lean Software Development is very disciplined. It’s just that you look at discipline a bit differently.”  O Desenvolvimento de software lean (ágil) é sim bastante disciplinado, mas é apenas uma forma um pouco diferente de disciplina.




Referências
Ø  http://www.poppendieck.com/, último acesso: dez/2013
Ø  Poppendieck, Tom/ Mary , Implementing Lean Software Development, 1ª edição, Addison-Wesley Professional , Setembro 2006

Ø  Poppendieck, Tom/ Mary , Lean Software Development - An Agile Toolkit, 1ª edição, Addison-Wesley Professional , Maio 2003