Faculdade Ietec Pós-graduação
Métodos Ágeis e práticas Devops 01 de outubro 2018
A importância da implementação de um código limpo para alcançar
a qualidade contínua
Ellen Eliza de Almeida Analista de Sistemas
RESUMO
Este trabalho aborda algumas práticas de Código Limpo através de algumas técnicas, tais
como: nomes significativos, unicidade de funções, métodos não extensos, cuidado ao se
utilizar comentários e testes unitários. Tendo por sua vez a finalidade de identificar pontos
de ganho dentro de um projeto com poucos erros e boas condições de manutenção. Para o
desenvolvimento deste trabalho utilizou-se a abordagem tanto quantitativa quanto
qualitativa. Durante o estudo foi detectado problemas que podem surgir como custos em
que um código ruim impacta nos projetos, desmotivação e falta de produtividade. Foi
realizado também um questionário online com 124 profissionais da área de desenvolvimento
de software e/ou áreas que utilizam código fonte, em empresas localizadas no Brasil. Foi
possível constatar problemas ao se desenvolver códigos ruins em vários cenários, quais são
os bloqueios que os profissionais utilizam para não efetuar mudanças no modo de se
trabalhar, e até mesmo quando se houve ganhos em que boas práticas foram seguidas.
Palavras-chave: Código Limpo. Sonar. Qualidade Contínua. Quantitativo. Qualitativo
1 INTRODUÇÃO
O desenvolvimento de software é uma das etapas mais importante em um ciclo de um
projeto. Atualmente muitas empresas sofrem com a má qualidade dos códigos
desenvolvidos dentro de suas equipes, levando a inúmeros defeitos e insatisfação de
clientes.
A qualidade inserida dentro do contexto de desenvolvimento do software vem ganhando
cada vez mais destaque dentro do processo, pois devido à evolução do mercado as
pessoas estão cada vez mais exigentes. Isso faz com que qualquer oportunidade, se não for
bem estruturada, pode ser engolida facilmente devido à quantidade de concorrentes.
Há curto prazo ter um código com baixa qualidade, ilegível pode funcionar, porém a longo
prazo com muitas outras atualizações acarreta em constante perda de produtividade, erros
excessivos, desmotivação do time, dentre outros. Desta forma, inserir novas funcionalidades
se torna cada vez mais demorado e com custos elevados.
Códigos são escritos posteriormente a uma necessidade identificada, “eles representam os
detalhes dos requisitos. Em certo nível não há como ignorar ou abstrair esses detalhes: eles
precisam ser especificados, E especificar requisitos detalhadamente de modo que uma
máquina possa executá-los é programar” (MARTIN, 2006, p.12).
Códigos ruins podem acarretar em vários problemas, tais como: A baixa produtividade da
equipe, pois em códigos mal escritos qualquer mudança não é trivial e requer tempo, e até
mesmo a refatoração completa do código. O segundo problema está relacionado com o alto
número de bugs.
Baseando-se neste cenário: Como melhorar a escrita de um código e quais são os
benefícios a médio e a longo prazo ao se adotar boas práticas de código limpo?
O objetivo deste trabalho é apresentar a importância do desenvolvimento de código limpo,
benefício de sua aplicabilidade e ferramentas de auxílio; de forma que possam contribuir de
forma exponencial a melhoria da escrita de códigos dentro dos projetos.
Este artigo está organizado da seguinte maneira: Na primeira seção é apresentada a
referência bibliográfica para fundamentação deste projeto, na segunda seção é apresentado
as metodologias e resultados. Por fim é apresentado as conclusões para reflexão e projetos
futuros de estudo.
2 REFERENCIAL TEÓRICO
2.1 MINDSET
Ao se iniciar um projeto, definir regras, formas de implementação é de fato mais fácil.
Porém, ao ser inserido em um contexto que já se existem amarrações e muito código antigo,
muitos profissionais utilizam - se como exemplo códigos que estão fáceis de obter como
modelo. Ao se identificar uma necessidade de mudança em que a equipe sempre utiliza-se
modelos errados de implementação é necessário mudar o mindset .
Segundo Dweck (2017) os mindsets nada mais são que crenças, algo que está na mente
mas, que podem ser alteradas de forma que todos podem ter a escolha de mudança para
um objetivo final.
2.2 SONAR
É um software de auxílio ao desenvolvedor de código fonte que propõe a ser a central de
qualidade do código em si, o que possibilita o controle sobre um número de métricas de
software evidenciando uma série de possíveis erros. Tudo isso é gerado através de uma
análise no código fonte. A exibição dos problemas identificados ao longo dos códigos
implementados é feita através de uma interface web, em forma de dashboards e gráficos.
(SONARQUBE, 2016)
A utilização desta ferramenta traz inúmeros benefícios, como facilidade na validação da
qualidade do que está sendo entregue para o cliente final, diminuição de bugs visto que o
desenvolvedor irá avaliar o sonar antes de realizar entregas em produção. Os gerentes
conseguem analisar de forma facilitada os gráficos e o trabalho de desenvolvimento da sua
equipe.
3 METODOLOGIA
Segundo a abordagem do problema, conforme destaca Diehl (2004), ela pode ser
qualitativa ou quantitativa. Neste trabalho utilizou-se a abordagem tanto quantitativa quanto
qualitativa.
A abordagem qualitativa se caracteriza por descrever a complexidade de determinado
problema e a interação de certas variáveis e classificar os processos dinâmicos. (MORESI
2003).
Em relação a abordagem quantitativa se caracteriza por ser apropriada para medir tanto
opiniões, atitudes, preferências e comportamentos. O questionário aplicado forneceu dados
sobre a opinião dos profissionais da área de desenvolvimento sobre os benefícios de se
utilizar um código limpo e os problemas de se utilizar códigos sem padrões,
disponibilizados através de um link online.
Quanto aos objetivos, Gil (2002) destaca que a pesquisa exploratória visa proporcionar
maior familiaridade com o problema, com vistas a torná-lo mais explícito. Neste sentido
será usado neste trabalho técnica de pesquisa indireta bibliográfica que de acordo com
Lakatos (2010, p. 166) “pode ser baseado em fontes secundárias desde revistas, livros,
pesquisas, monografias até meios de comunicação oral, filmes e televisão. Não é mera
repetição do que já foi dito, mas um exame sob um novo enfoque”.
3.1 BOAS PRÁTICAS
Algumas práticas podem ser abordadas para que o código de uma determinada
aplicação esteja de forma entendível, serão abordados a seguir tópicos que podem ser
utilizados para auxílio de boas práticas de programação e código limpo.
a) Nomes significativos: É de extrema necessidade que seja escolhido nomes para
variáveis, funções, ou classes que sejam referência para o assunto do método em si.
Esta boa prática diminui a necessidade de se inserir muitos comentários. Martin
(2006) diz que “escolher bons nomes leva tempo, mas economiza mais”, sendo
assim todos que lerem o código saberão o que determinado código faz, por conter
nomes que revelam seu propósito.
b) Códigos unificados: Ao se inserir códigos duplicados em muitos pontos do sistema é
dificultado a correção de um problema sendo necessário realizar a implementação
em vários lugares, caso a manutenção não seja realizada em todos os pontos
duplicados o sistema poderá se comportar de forma inesperada;
c) Funções pequenas: Ao se criar métodos extensos, existe uma grande dificuldade
para efetuar testes unitários e também a reusabilidade de determinadas funções.
Martin (2009) diz que as funções devem fazer apenas uma coisa, e fazer
corretamente o que foi criada para tal. A responsabilidade deve ser única.
d) Responsabilidade única: Falta do princípio de unicidade de ação. (Mesma classe
executando várias demandas) Dessa forma a classe não fica intuitiva no que
realmente deverá fazer;
e) Cobertura de testes: Rocha (2001) cita que um dos principais níveis de teste de
software é o Teste de Unidade: conhecido como testes unitários. Tem por objetivo
averiguar a menor unidade do projeto, procurando provocar falhas ocasionadas por
erros de lógica ou de implementação em cada funcionalidade, separadamente. O
foco deste tipo de teste são os métodos das classes (objetos) ou mesmo pequenos
trechos de código.
Existem muitos fatores que motivam o uso desta prática, como: confiabilidade,
prevenção de "bug's", assegura os impactos em caso de alterações, utilizado como
métrica, dentre outros.
3.2 SONAR
Para padronizar o desenvolvimento e garantir a qualidade nas entregas, a
ferramenta Sonar (FIGURA 1) é uma das ferramentas existentes essencialmente
para garantir a qualidade no código e apresentar os problemas existentes nos
sistemas após a finalização de qualquer demanda.
Figura 1 - Tela inicial do Sonar
Fonte: Elaborado pela autora, 2018.
4 RESULTADOS E DISCUSSÃO
A análise dos resultados foi elaborada tomando como foco o referencial teórico deste
trabalho, melhores práticas de implementação de código, a fim de contrastar ideias, verificar
em escalabilidade a percepção da importância de se utilizar determinados padrões.
O questionário referente aos métodos de desenvolvimento de um software foi aplicado para
obter informações que indiquem no cotidiano dos profissionais da área o benefício e os
malefícios quando esta prática não se é utilizada. Foram 124 profissionais respondentes
deste questionário.
A pesquisa foi dividida em 2 partes: dados de identificação e dados sobre boas práticas de
desenvolvimento.
Dados referentes à identificação
Referente ao cargo de atuação: dos participantes do questionário (FIGURA 2): 82% são da
área de desenvolvimento, 8.1% são da área de arquitetura, 3.1% da área de automação de
testes.
Figura 2 - Cargos da área
Fonte: Elaborado pela autora, 2018.
Em relação ao tempo de trabalho com código fonte (FIGURA 3), em desenvolvimento de
software ou testes automatizados foi possível identificar a experiência e práticas comuns em
relação aos profissionais. 47,06% trabalham entre 1 e 5 anos, 30,06% trabalham a mais de
5 anos e 21,8% trabalham até 1 ano com código fonte.
Figura 3 - Tempo de trabalho com código fonte
Fonte: Elaborado pela autora, 2018.
Dados referentes a ferramentas e métodos
Manutenção em código: Foi identificado (FIGURA 4) que 53.2% concordam plenamente que
ao realizar uma manutenção em um código que está confuso e sem boas práticas de código
limpo muitos bugs podem surgir somente pelo mal entendimento do mesmo.
Figura 4 – Geração de bugs devido ao código mal escrito
Fonte: Elaborado pela autora, 2018.
Foi identificado pontos em que os profissionais se preocupam de imediato ao começar uma
implementação (FIGURA 5): 50,08 % indicaram que se preocupam com código limpo,
48,40% em entregar rápido, 48,04% na segurança da aplicação, e 23,04% em testes
unitários.
Figura 5 - Preocupações ao desenvolver um código novo
Fonte: Elaborado pela autora, 2018.
Muitos profissionais em relação a algumas situações deixam de fazer um código limpo
utilizando-se de empecilhos (FIGURA 6), alguns destes itens foram selecionados, tais como:
79% dos participantes informaram que o prazo é um dos grandes problemas para se fazer
um bom código fonte, 60% informaram a falta de experiência, 50% indicaram cobranças por
parte de gestores, 35,50% por desinformação e 12% por rendimento. Estes pontos vão em
contrapartida em relação a mudança de mindset, pois ao perceber que a qualidade sempre
deve ser levada em consideração, nenhum destes pontos deveriam ser levados em
consideração para se realizar tal atividade.
Figura 6 – Empecilhos utilizados para se escrever um código com qualidade
Fonte: Elaborado pela autora, 2018.
Em contrapartida no ponto anterior, foi possível constatar (FIGURA 7) que 79% dos
respondentes concordam plenamente que ao dar manutenção em um código limpo a
produtividade aumenta. No total de 18,05% concordam parcialmente com esta afirmação.
Figura 7 – Produtividade ao se ter um código limpo
Fonte: Elaborado pela autora, 2018.
Referente ao Sonar: Esta ferramenta é disponibilizada via link na web podendo ser
acessada por todos os membros dos times. Foi detectado (FIGURA 8), que cerca de 26%
concordam plenamente que na utilização do Sonar facilita na identificação de sensibilidades
no código e pontos de atenção para os testes unitários, ações futuras, etc. No total de
30.9% concordam parcialmente nesta afirmativa e 39% não concordam nem discordam.
Apenas 3.3% discordam parcialmente.
Figura 8 – Facilidade no trabalho ao se utilizar o Sonarqube
Fonte: Elaborado pela autora, 2018.
Alguns padrões são utilizados pelos profissionais que responderam o questionário (FIGURA
9), porém muitos itens não são levados em consideração no momento da codificação.
87,01% buscam utilizar nomes significativos, 86,03% reutilizam métodos genéricos, 75%
identam o código, 65,03 criam métodos mais curtos com responsabilidade única, 33,01 %
utilizam pouco comentário, 33,09% retornam exceção ao invés de retornar códigos de erro,
e somente 26% se preocupam em utilizar cobertura de testes.
Figura 9: Padrões que os profissionais mais utilizam
Fonte: Elaborado pela autora, 2018.
2 CONCLUSÃO
Com a análise realizada neste artigo foi possível concluir que ao desenvolver uma cultura
organizacional e uma mudança de mindset, os desenvolvedores, independente do cenário
de um projeto devem implementar código com o máximo de robustez, para que todos os
benefícios desta prática sejam efetivamente concretizados.
No questionário aplicado constatou-se que muitos dos profissionais gastam mais tempo para
entender um código mal escrito que efetivamente realizar as alterações necessárias, em
muitos casos pode-se perceber que diversos softwares foram refeitos pelo não
entendimento do que o sistema fazia, devido ao código mal escrito.
O estudo deste trabalho mostrou a importância de uma prática de código limpo a fim de
aumentar a produtividade e diminuição de retrabalhos bem como bugs encontrados devido a
falta de padrões em código. Isso gera cada vez mais valor dentro da área de
desenvolvimento e para seus clientes.
Desta forma fica é considerável que as empresas façam treinamentos e conscientizem os
profissionais da área a importância de se desenvolver códigos com extrema clareza a fim de
se obter um produto com qualidade.
Códigos que seguem padrões já estabelecidos e com o auxílio de ferramentas conhecidas e
já bastante utilizadas, facilitam o entendimento e a manutenção do código. Isto, junto à
nomenclatura correta de variáveis, métodos e classes, bem como os comentários
moderados e assertivos ajudam demais na produtividade e no rendimento de quem está
lendo o código de outra pessoa, uma vez que o profissional não precisará passar pela falta
de tempo de tentar compreender e corrigir um código desconhecido.
Como trabalhos futuros, planeja-se implementar outras técnicas de código limpo, realizar
experimentos reais comparando-se uma análise em um código mal feito e em um código
limpo. Constatar as diferenças e a demora de analise entre os participantes.
REFERENCIAS
DIEHL, Astor Antônio.; TATIM, Denise Carvalho. Pesquisa em ciências sociais aplicadas.
SP: Ed. Pearson, 2004.
DWECK, C. S, Mindset: the new psychology of success. London: Robinson, 2017.
GIL, Antonio Carlos. Como elaborar projetos de pesquisa. São Paulo: Atlas, 2002.
LAKATOS, Eva Maria & MARCONI, Maria de Andrade. Fundamentos da Metodologia
Científica. SP: Ed. Atlas, 2010.
MARTIN RC. Código limpo: Habilidades Práticas do Agile Software: Prentice Hall; 2009.
ROCHA, A. R. C.; MALDONADO, J. C.; WEBER, K. C. Qualidade de software: teoria e prática. São Paulo: Prentice Hall, 2001.
SONARQUBE. Continuous Inspection. [S.l.]: Sonarqube, [2016?].
https://www.sonarqube.org/features/clean-code/. Acesso em: 01 jul. 2018.
ANEXO A – Questionário aplicado aos profissionais que atuam diretamente com código