Carregando agora

A Importância e os Conceitos

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)

qualidade-de-software
Árvore de atributos de qualidade de software de Boehm, Brown e Lipow (1977)

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:

modelo-qualidade-de-software
Modelo de qualidade de software de James A. McCall

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

Test-Driven-Development
Desenvolvimento orientado a testes (Test Driven Development)

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!

Publicar comentário