software, de qualquer dom´ınio de aplica¸c˜ao, que tenha sido utilizado ou produzido durante trabalhos de pesquisa com intuito de publica¸c˜ao na literatura acadˆemica.
O ecossistema de software acadˆemico de an´alise est´atica ´e um recorte deste conjunto, a princ´ıpio, com as mesmas caracter´ısticas, atores e modelo de funcionamento, mas logica- mente podendo apresentar particularidades trazidas pela natureza do dom´ınio de an´alise est´atica e suas ferramentas, solu¸c˜oes e algoritmos.
2.4.1 An´alise est´atica
A an´alise est´atica de c´odigo-fonte ´e o primeiro passo para coletar informa¸c˜oes necess´arias em diversas atividades de verifica¸c˜ao, medi¸c˜ao e melhoria da qualidade de produtos de software (CRUZ; HENRIQUES; PINTO, 2009; KIRKOV; AGRE, 2010). Ela ´e realizada com base no c´odigo-fonte de um programa ou sistema de software, e a partir da´ı descobre problemas e propriedades de sua qualidade estrutural (CHESS; WEST, 2007).
Ferramentas de an´alise est´atica est˜ao dispon´ıveis h´a d´ecadas, em especial, para pro- gramadores. A ferramenta Lint (JOHNSON, 1978), considerada uma das primeiras ferra- mentas de an´alise est´atica (GOSAIN; SHARMA, 2015), foi criada para examinar progra- mas escritos em linguagem C e aplicar regras de tipagem mais estritas do que as regras dos pr´oprios compiladores da linguagem.
An´alise est´atica de c´odigo-fonte tem como objetivo prover informa¸c˜oes acerca de um programa a partir do seu c´odigo-fonte sem necessidade de execu¸c˜ao, e sem requerer qual- quer outro artefato do programa al´em do pr´oprio c´odigo.
´
E um ramo que possui muitas das suas abordagens em comum com os estudos da ´area de an´alise de programas (program analysis), especialmente na ´area de compiladores, onde atua especialmente nas primeiras etapas do processo de compila¸c˜ao.
A an´alise est´atica de c´odigo-fonte ´e considerada uma atividade meio com objetivo de suportar uma variedade de tarefas comuns da Engenharia de Software; muitas des- sas tarefas s˜ao substancialmente ´uteis em atividades de manuten¸c˜ao, como por exemplo, an´alise de performance, compreens˜ao de programas, desenvolvimento baseado em mode- los, detec¸c˜ao de clones, evolu¸c˜ao de software, garantia de qualidade, localiza¸cao de falhas, manuten¸c˜ao de software, recupera¸c˜ao arquitetural e testes (BINKLEY, 2007).
Seja em qual atividade for, a an´alise est´atica possui importˆancia significativa, pois ao ser capaz de extrair informa¸c˜oes diretamente do c´odigo-fonte de um programa, pode auxiliar a responder perguntas necess´arias para as diversas atividades de desenvolvimento e evolu¸c˜ao de software. Essa importˆancia se torna ainda mais aparente diante da “lei” da tendˆencia para execu¸c˜ao que indica que todos os tipos de nota¸c˜ao tˆem a tendˆencia de se tornar execut´aveis. Cada nova nota¸c˜ao, seja de baixo n´ıvel (e, portanto, j´a c´odigo-fonte) ou de alto n´ıvel (podendo escapar do n´ıvel de c´odigo) ir´a em ´ultima an´alise se tornar c´odigo-fonte (HARMAN, 2010).
A an´alise de programas trata, de modo geral, da descoberta de problemas e fatos sobre programas. Tal an´alise pode ser realizada sem a necessidade de executar o programa
2.4 ECOSSISTEMA DE SOFTWARE ACAD ˆEMICO DE AN ´ALISE EST ´ATICA 11 (an´alise est´atica) ou com informa¸c˜oes provenientes de sua execu¸c˜ao (an´alise dinˆamica).
A ideia de que programas de computador podem ser utilizados para analisar c´odigo- fonte de outros programas tem uma hist´oria de mais de 40 anos. O programa PFORT Verifier (RYDER, 1974) foi projetado para localizar potenciais problemas na portabili- dade de c´odigo Fortran; em fun¸c˜ao da diversidade de dialetos de Fortran, uma compila¸c˜ao sem erros n˜ao indicava que o programa estava correto segundo os padr˜oes da linguagem (WICHMANN et al., 1995).
Desde ent˜ao, ferramentas de an´alise est´atica de c´odigo-fonte tˆem surgido para os mais diversos fins – muitas delas a partir das pesquisas e desenvolvimentos da ´area de compiladores. O parser utilizado nessas ferramentas tˆem funcionalidades an´alogas aos analisadores usados em compiladores (ANDERSON, 2008).
O uso de tais ferramentas tem se tornado mais comum no ciclo de desenvolvimento de software, sendo aplicadas em atividades distintas. O campo de aplica¸c˜ao destas ferra- mentas ´e bastante variado, cobrindo diferentes objetivos.
2.4.2 Software de an´alise est´atica
A variedade de aplica¸c˜ao e a constante evolu¸c˜ao da ´area de an´alise est´atica, tanto na ind´ustria quando na academia, resulta em estudos te´oricos e pr´aticos, novas ferramentas, modelos e algoritmos de an´alise est´atica. Ferramentas de an´alise est´atica tˆem sido con- tinuamente desenvolvidas e seu uso se tornado comum no ciclo de desenvolvimento de software.
Mas apesar da r´apida e constante evolu¸c˜ao da ´area, ainda h´a carˆencia de estudos avaliando estas ferramentas (LI; CUI, 2010). Mesmo com os avan¸cos e com ferramentas de sucesso, o desenvolvimento de an´alise est´atica ainda ´e conhecido por ser um processo doloroso (TOMAN; GROSSMAN, 2017).
A eficiˆencia, confiabilidade e precis˜ao dessas ferramentas tˆem sido avaliadas e alguns estudos mostram inconsistˆencia entre ferramentas diferentes. Um desses estudos compa- rou duas ferramentas de an´alise est´atica para c´alculo de m´etricas e revelou significantes evidˆencias sobre a inconsistencia entre valores de m´etricas, mostrando grande diferen¸ca entre os valores e discutindo quais problemas e quest˜oes levam a tais diferen¸cas (ALE- MERIEN; MAGEL, 2013).
An´alise est´atica ´e a t´ecnica mais amplamente utilizada para an´alise automatizada de programas devido a sua eficiˆencia, boa cobertura e automa¸c˜ao. Estudos mostram que analise est´atica tem grande ado¸c˜ao em projetos de software livre (BELLER et al., 2016). Entretanto, t´ecnicas de an´alise est´atica amplamente adotadas na comunidade de software, por exemplo, para localiza¸c˜ao de bugs e verifica¸c˜ao de programas ainda sofrem um alto ´ındice de falso-positivos (GOSAIN; SHARMA, 2015).
Apesar da ampla ado¸c˜ao de ferramentas de an´alise est´atica em estudos acadˆemicos e da crescente aten¸c˜ao que as t´ecnicas de an´alise est´atica de c´odigo tem recebido em pesquisas, nota-se ainda uma enorme distˆancia entre a aten¸c˜ao dada na academia e sua ado¸c˜ao na ind´ustria, identificando um gap entre estes dois contextos (ILYAS; ELKHALIFA, 2016).
2.4.3 Software acadˆemico de an´alise est´atica
Na Ciˆencia da Computa¸c˜ao, particularmente na Engenharia de Software, tem-se notado um aumento constante no n´umero de novos projetos de software acadˆemico (ALLEN et al., 2017), especialmente em estudos de an´alise est´atica, uma ´area com uma longa e respeit´avel tradi¸c˜ao em pesquisas sobre a cria¸c˜ao de novas ferramentas, m´etodos e algoritmos.
O software acadˆemico de an´alise est´atica e o seu ecossistema, ao estar inserido no sistema acadˆemico e intimamente relacionado `a economia de reputa¸c˜ao cient´ıfica, sofre as consequˆencias da competi¸c˜ao que permeia este modelo, e o seu uso invariavelmente deixa de gerar feedback positivo de volta ao seu ecossistema, conforme Figura 2.2, onde se apresenta o relacionamento entre a pr´atica e a pesquisa de software acadˆemico.
Figura 2.2 Uma vis˜ao dos incentivos de reputa¸c˜ao num contexto misto entre Ciˆencia e pr´aticas de software acadˆemico (HOWISON; HERBSLEB, 2011)
A Figura 2.2 apresenta a situa¸c˜ao enfrentada por muitos cientistas que distribuem software com inten¸c˜ao de ser utilizado por outros, h´a incertezas sobre o recebimento de cita¸c˜oes para o software atrav´es do seu uso, esta incerteza ´e indicada na figura atrav´es da liga¸c˜ao pontilhada entre o uso do software e a reputa¸c˜ao obtida atrav´es de cita¸c˜oes. Dife- rentemente da publica¸c˜ao cient´ıfica regular (Publica¸c˜ao topical), a publica¸c˜ao do software raramente ´e ´util por si mesma; geralmente ´e o software que ´e ´util para outros cientistas, no entanto, nem todos os usu´arios de software acadˆemico vˆeem como requisito citar o software, a nem todos os projetos de software acadˆemico indicam uma forma conveniente de como deve ser citado.
Diferentemente de outras tecnologias, software pode ser copiado e distribu´ıdo essen- cialmente sem custo, abrindo portas sem precedentes para compartilhamento e inova¸c˜ao colaborativa (HOWISON; HERBSLEB, 2011). No entanto, por estar de alguma forma conectado ao contexto de competi¸c˜ao da economia de reputa¸c˜ao cient´ıfica, como no me- canismo de cr´edito acadˆemico aos artigos e publica¸c˜oes, pode ser potencialmente pro-
2.5 SUSTENTABILIDADE DE SOFTWARE ACAD ˆEMICO 13 blem´atico para a colabora¸c˜ao e manuten¸c˜ao (HOWISON; HERBSLEB, 2011).
Este cen´ario, al´em de desacelerar o progresso geral da Ciˆencia gerando retrabalho, faz surgir questionamentos sobre as conclus˜oes dessas pesquisas, especialmente quando grande parte dos pesquisadores n˜ao sabem o qu˜ao confi´avel seus projetos de software s˜ao. Criando assim, um contexto em que muitos estudos em Engenharia de Software sofrem de dificuldades de repeti¸c˜ao (KAZMAN, 2016), al´em de ocasionar problemas espec´ıficos relacionados a manutenibilidade e sustentabilidade t´ecnica do software acadˆemico.