Software Intelligence é mais um termo recente no mundo da engenharia de software. Apesar de ser um termo recente, ele se refere a práticas aplicadas desde que os softwares começaram a ser desenvolvidos, embora neste momento o refinamento de Software Intelligence seja bem maior do que no passado. O termo vem ganhando alguma popularidade com abordagens ágeis de desenvolvimento.
Ainda é difícil encontrar referências aprofundadas sobre o tema, mas as suas práticas e ferramentas são disseminadas e fazem parte do âmago da maioria dos bons engenheiros de software. O termo se refere ao conhecimento do software que está sendo desenvolvido, ou seja, informações estratégicas sobre o desenvolvimento, e engloba práticas e ferramentas para obter e gerenciar estas informações.
As informações analisadas em software intelligence ajudam os envolvidos a entender o desenvolvimento em determinado momento. Geralmente o código fonte é monitorado e analisado por diversas ferramentas diferentes, os dados coletados nessas varreduras são compilados, sumarizados, catalogados… Estes dados são o insumo da Software Intelligence.
Uma prática muito comum é analisar a qualidade do código fonte com ferramentas como:
- FindBugs: análise estática do código fonte em busca de bugs
- CPD (Copy/Paste Detector): Detector de trechos literalmente copiados e colados ou variações, a fim de melhor implementar a orientação a objetos
- Checkstyle: análise de padrões de codificação
São muitas as informações obtidas por meio destas verificações. É possível monitorar a qualidade do código fonte, problemas de performance e problemas de complexidade de código a fim de refatorar para facilitar manutenções futuras.
Outras práticas também entram na disciplina de Software Intelligence, como testes automatizados e integração contínua.
Apesar de muitas destas práticas e ferramentas serem usadas a bastante tempo, acredito que agora, com um termo próprio, a prática de software intelligence se dissemine e amadureça ainda mais, propiciando ambientes cada vez mais informativos para o desenvolvimento de software com qualidade.