CCUEC implanta processo para revisão automática de código fonte de sistemas

Data de publicação

O código fonte é o artefato mais essencial no desenvolvimento de software. A qualidade do código fonte, dentre outros fatores, é influenciada por fatores humanos, tecnológicos e também pelos prazos de projeto.

Os sistemas de informação (SI) corporativos, para o porte de uma universidade como a Unicamp, tendem a ter muitas funcionalidades sendo comum sistemas com centenas de milhares de linhas de código fonte. A revisão do código e a manutenção da qualidade não é uma tarefa trivial e requer a alocação de profissionais experientes. Por estas razões, a revisão de código era realizada por amostragem e com baixa produtividade.

A revisão de código fonte é recomendada pelas principais metodologias de desenvolvimento de software. Seu objetivo é auditar códigos para identificar não conformidades que possam comprometer requisitos de qualidade de um software tais como modificabilidade, interoperabilidade, eficiência, segurança, escalabilidade e integrabilidade.

Com o intuito de automatizar o máximo possível a revisão do código fonte dos sistemas de informação, o CCUEC realizou estudos de diversas alternativas disponíveis, preferencialmente em software livre.

O projeto foi divido em duas fases. A primeira delas tinha como missão automatizar parte do processo de revisão de código fonte e a segunda parte visava obter uma melhoria na qualidade do código fonte gerado pelas equipes de desenvolvimento de sistemas do CCUEC.

Inicialmente, buscou-se automatizar a revisão de código a partir da análise estática de código fonte e a integração contínua. A cada novo trecho de código desenvolvido, o programador recebe informações imediatas relativas a eventuais problemas, tais como integração com código pré-existente, bibliotecas faltantes, mudanças de pré-requisitos para o funcionamento do código.

A solução desenvolvida faz uso de duas ferramentas principais: SonarQube e Jenkins.

A ferramenta SonarQube realiza a análise estática de código fonte ao passo que a ferramenta Jenkins se encarrega da integração contínua.

O SonarQube cobre 7 eixos de qualidade:

  •     Boas práticas de codificação;
  •     Defeitos potenciais;
  •     Complexidade;
  •     Projeto de software / arquitetura;
  •     Comentários;
  •     Duplicação de código e
  •     Testes unitários.

Internamente, a ferramenta faz uso de outros componentes livres já em uso no CCUEC como findbugs, checkstyle e PMD. O principal diferencial do SonarQube é justamente a forma como faz o gerenciamento da qualidade do código fonte.

Ilustramos a seguir alguns dos recursos oferecidos pelo SonarQube:

  •     Novas métricas de qualidade (débito técnico e complexidade ciclomática);

Recursos oferecidos pelo SonarQube

Débito técnico: o custo cumulativo de trabalho realizado de maneira não satisfatória que precisa ser refatorado (refeito).

Assim, para cada não conformidade encontrada no código fonte a ferramenta tem uma estimativa de esforço (tempo) para correção. Tais tempos são acumulados gerando o esforço total para o sistema ser refatorado.

  • Mantém uma base histórica das métricas de qualidade por data ou release do sistema, ou seja, ao longo do seu ciclo de vida;

Recursos oferecidos pelo SonarQubeRecursos oferecidos pelo SonarQube

  • Gráficos para facilitar a visualização do progresso ou retrocesso da qualidade;

Recursos oferecidos pelo SonarQubeRecursos oferecidos pelo SonarQubeRecursos oferecidos pelo Sonar Qube

  •     Permite trabalhar com perfis de qualidade (útil para diferentes times de desenvolvimento ou projetos com peculiaridades);
  •     Flexibilidade na atribuição de pesos distintos (importância) para cada regra ou padrão de qualidade;
  •     Provê feedback para o desenvolvedor a cada não conformidade detectada, indicando as linhas do código fonte com problemas, descrevendo cada problema encontrado, apresentando exemplos de código aderentes as boas práticas e exemplos de erros mais comuns.

Recursos oferecidos pelo SonarQube

A segunda ferramenta, o servidor de integração contínua Jenkins se encarrega de disparar tarefas em lote (batch), em horários pré-definidos, combinando as partes do código, compilando o sistema como um todo e detectando já neste momento eventuais problemas de codificação. São realizadas análises de qualidade sobre o código fonte dos sistemas, adotando estratégias diferentes dependendo da ferramenta de build usada, como Maven ou Ant.

View Eclipse indicando issues por recurso de um projeto Java
View Eclipse indicando issues por recurso de um projeto Java
Marcação do IDE no código indicando linha com problema
Marcação do IDE no código indicando linha com problema
Marcação do IDE no código indicando linha com problema
Marcação do IDE no código indicando linha com problema

A primeira fase do projeto tornou possível analisar, duas vezes ao dia, aproximadamente 500 mil linhas de código fonte de nove sistemas de informação. Consolidou-se assim um ciclo virtuoso de desenvolvimento, no qual há feedbacks diários aos desenvolvedores. Desta forma, problemas no código fonte são detectados e sanados mais rapidamente.

O ciclo virtuoso consolidado na primeira fase ainda não provia feedback preventivo ao desenvolvedor, pois este primeiro precisa efetivar sua codificação no repositório de controle concorrente de versões. Após a execução das análises agendadas é que o desenvolvedor saberia se havia cometido algum "pecado", consultando o portal de qualidade.

Assim, na segunda fase do projeto a meta foi propiciar ao desenvolvedor a capacidade de fazer uma análise local de sua codificação, antes mesmo da efetivação do código fonte no repositório.

Em sua etapa final, o projeto propiciou aos desenvolvedores as ferramentas necessárias para aumentar a qualidade de seu trabalho, adequando o código fonte antes de sua efetivação, atuando preventivamente ao invés de reativamente.

Como resultado final ampliou-se grandemente o número de linhas de código analisadas, mais de 500 mil linhas de nove sistemas de informação. O portal de qualidade indica, sistema a sistema, quais são os pontos críticos a serem tratados (classes ou recursos com maior incidência de não conformidades). A revisão, que concorria com as demais atividades do ciclo de desenvolvimento, é hoje desenvolvida sem impactar significativamente as demais atividades do processo.

De forma não tão tangível, um benefício importante alcançado foi a nova percepção adquirida pelos desenvolvedores da importância da qualidade. As ferramentas indicam aos desenvolvedores aspectos de qualidade de software às vezes difíceis de serem detectados e de grande importância.

Segundo afirma Denis Clayton A. Ramos, líder do projeto: "Os feedbacks que o ferramental implantado oferece aos desenvolvedores com relação ao código fonte produzido, traz grandes oportunidades para capacitação, na medida que a equipe adquire uma consciência das melhorias recomendadas".

Todo o projeto baseou-se em ferramentas livres e gratuitas, de qualidade equivalente e até mesmo superior às alternativas comerciais existentes. Foram obtidos resultados extremamente positivos na qualidade dos sistemas de informação e na produtividade das equipes como um todo.

 

 

Tópicos da notícia