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);
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;
- Gráficos para facilitar a visualização do progresso ou retrocesso da qualidade;
- 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.
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.
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.