Neste artigo será abordado sobre a importância da qualidade de software no desenvolvimento de um produto de software, possuindo o intuito de se aprofundar nos conceitos de TDD.
Crie um perfil, conheça as oportunidades e receba propostas alinhadas ao seu perfil. São mais de 1000 vagas para desenvolvedores como você!
Surgimento da qualidade de software
Crise do software
O ato de desenvolver software já existe há bastante tempo, desde meados do século XX mas, nessa época, a engenharia de software era algo inexistente e o desenvolvimento era realizado de maneira intuitiva, o que acarretava em uma série de problemas.
Os problemas se manifestam de várias formas, como:
• Projetos estourando o orçamento;
• Projetos estourando o prazo;
• Software de baixa qualidade;
• Software que não atendiam aos requisitos;
• Não se pensava sequer em manutenibilidade;
A fim de solucionar o problema da crise do software, na década de 1960, ocorreu a reunião conhecida como NATO Software Engineering Conferences — Conferência sobre Engenharia de Software da OTAN.
Surgindo assim, a engenharia de software, termo empregado por Margaret Hamilton, agora o desenvolvimento de software era tratado como algo sistemático.
Engenharia de Software é a criação e a utilização de sólidos princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe em máquinas reais
Friedrich Ludwig Bauer
A qualidade de software está contida na engenharia, pois a área de Engenharia de Software possui como objetivo principal a qualidade, ou seja, prover boas práticas na construção de um software.
Qualidade de software
Ao elaborar um projeto de software, o que é imprescindível é que ele possua qualidade, apesar que definir o que é qualidade em si é relativamente complexo, pois deve ser observado por diversos ângulos.
A Sociedade Americana para Controle da Qualidade (ASQC) define qualidade como sendo “a totalidade das características de um produto que determina a sua habilidade em satisfazer um determinado usuário”.
No contexto do desenvolvimento de software:
Qualidade de software é um processo sistemático que focaliza todas as etapas e artefatos produzidos com o objetivo de garantir a conformidade de processos e produtos, prevenindo e eliminando defeitos
Bartié (2002)
Por sua vez, James A. McCall propôs um modelo de qualidade em seu artigo A framework for the measurement of software quality. Ele organiza os critérios de qualidade de software em três aspectos:
Operação
Aspectos relativos ao uso do produto.
- Corretude: Ele realiza o que é pedido, nada mais e nada menos.
- Confiabilidade: Ele realiza isso de forma correta.
- Eficiência: Ele possui performance ao executar uma ação.
- Integridade: Possui segurança.
- Usabilidade: É simples.
Revisão
Capacidade do produto ser modificado e evoluído.
- Manutenibilidade: Fácil de corrigir.
- Flexibilidade: Fácil de mudar.
- Testabilidade: Posso testar seu funcionamento.
Transição
Adaptabilidade a novos e diferentes ambientes.
- Portabilidade: Consigo transferir de um ambiente para outro.
- Reusabilidade: Consigo utilizar parte dele.
- Interoperabilidade: Consigo trabalhar com outros softwares em conjunto.
Como escrever um código com qualidade?
Ao codificar uma solução de software pense no seguinte: Se você fizer às pressas a primeira coisa que pensar, então nunca terá tempo para pensar em uma segunda coisa melhor.
Neste tópico, será abordado como escrever código com maestria. Contudo deve ser lembrado que um produto de software vai além de código.
Um livro que aborda detalhadamente como obter êxito ao escrever código de forma coesa é o Clean Code de Robert C. Martin, ele faz isso juntamente com uma série de exemplos em Java.
Alguns conceitos importantes:
Simplicidade
Código simples é melhor que código complexo.
Elegância
Código elegante é melhor que código experto.
DRY (Don’t repeat yourself)
Evite código duplicado.
Design Patterns
É uma solução genérica para um determinado contexto.
Separation of concerns
Separar responsabilidades, ou seja, modularizar a aplicação.
Debugging
Quando um caso de teste encontra um determinado erro, a depuração é feita para se descobrir a causa do erro e corrigi-lo.
Refactoring
De acordo com Martin Fowler e Kent Beck, refatoração é uma alteração feita na estrutura interna do software para torná-lo mais fácil de entender e mais barato para modificar sem alterar seu comportamento observável.
Um livro que aborda sobre o assunto é Refactoring: Improving the Design of Existing Code escrito por Martin Fowler.
DDD – Domain-Driven Design
Projeto orientado a domínio é um padrão de modelagem de software orientado a objetos.
Um livro que aborda sobre o assunto é Domain-Driven Design escrito por Eric Evans.
Agora será abordado sobre o quesito de testabilidade de um software, que é o que separa um código bem elaborado, sem efeitos colaterais, de um código não tão bem elaborado.
Surgimento do teste de software
Engenharia de software clássica
A origem do teste de software não é exata, contudo um marco inicial ocorreu em 1979, com o livro The art of software testing escrito por Glenford Myers.
Nessa época a engenharia de software é dita como engenharia de software clássica, onde os modelos existentes eram o cascata, espiral, prototipação, entre outros.
Esses modelos eram excelentes para resolver os problemas desse tempo, onde os sistemas eram robustos e, a priori, no momento de um teste de software era que tal teste fosse realizado somente depois da construção.
Por consequência, quanto maior o software, maiores os erros que iriam surgir.
Com a popularização da internet, aderiu o conceito de agilidade na hora de se construir um software, principalmente por conta do mercado, que evolui constantemente e necessita de softwares para ontem.
Engenharia de software ágil
Um grupo de renomados programadores se reuniu em Snowbird em 2000, onde originaram o que é conhecido como manifesto ágil — Documento que contém princípios e práticas referentes aos métodos ágeis.
Os métodos ágeis iniciais incluíam Scrum (1986), Crystal Clear, Programação Extrema (1996), entre outros.
Um desses métodos é conhecido como TDD – Desenvolvimento orientado a testes, criado por Kent Beck.
TDD – Test Driven Development
Em português, TDD significa desenvolvimento orientado a testes, de acordo com Kent Beck, TDD encoraja designs de código simples e inspira confiança.
Um livro que aborda sobre o assunto é Test Driven Development: By Example escrito por Kent Beck.
Segundo (Dasgupta, Sanjoy, Papadimitriou, Christos e Vazirani, Umesh 2006): “TDD é primariamente uma técnica de programação que garante que o código de um sistema esteja inteiramente testado de forma unitária.”.
Por que usar Test Driven Development?
- Evita código desnecessário.
- Eliminar duplicação.
- O código fonte do teste serve como uma documentação de casos de uso.
- Código com mais qualidade e menos efeitos colaterais.
- Auxilia teste de regressão.
- Reduz o tempo gasto em depuração e correção de bugs.
- Refatoração constante.
- Código de baixo acoplamento.
Ciclo de desenvolvimento
RED: Escreva um teste que falhe, para uma funcionalidade que irá existir.
GREEN: Escreva a funcionalidade que será usada no teste e faça ela funcionar.
REFACTOR: Refatore o código e deixe elegante.
Até a próxima!