Neste estudo exploratório analisamos os métodos das 100 APIs mais populares. No total foram analisados 15.723 métodos, os quais possuem ocorrências em 43.509 postagens do SOF.
A principal questão de pesquisa investigada por este estudo exploratório foi a seguinte seguir: QP - O SOF auxiliou na descoberta de novas exceções na interface excepcional dos métodos? Algumas subquestões (SQ) derivadas a partir deste estudo exploratório foram:
• SQ1 - Quais foram os métodos das APIs que mais dispararam discussões relacionadas a exceções uncaught ?
• SQ2 - Existe alguma característica em comum entre os top 10 métodos com maior número de exceções disparadas?
• SQ3 - Das 100 APIs mais populares, qual a porcentagem de APIs que dispararam pelo menos uma discussão relacionada a exceções do SOF?
• SQ4 - Dos pares método-exceção identificados através da ferramenta de análise es- tática, quantos foram citados em postagens do SOF?
5.2.1
O SOF auxiliou a descobrir novas exceções na interface
excepcional dos métodos?
A Figura 21 contém a distribuição dos métodos das APIs em relação a quantidade de postagens do SOF em que eles foram encontrados. Além dos métodos considerados nessa distribuição, outros 11.405 métodos não possuíam ocorrência em postagens do SOF.
Figura 21: Distribuição de ocorrências no SOF dos métodos das APIs mais populares do Maven
A Figura 22 mostra um comparativo entre três categorias de métodos das APIs popu- lares investigadas: métodos que possuem exceções documentadas e que possuem ocorrência em postagens do SOF (em verde); métodos que possuem exceções documentadas e que não possuem ocorrência em postagens do SOF (em azul); e métodos que não possuem exceções documentadas e que possuem exceções com ocorrência em postagens do SOF (em amarelo).
A partir desses dados, o que se pode destacar é uma quantidade considerável de métodos que possuem pelo menos uma exceção que não está documentada no Javadoc, mas que possui pelo menos uma ocorrência em postagens do SOF, ou seja, são situações novas que podem ser imprevistas pelo desenvolvedor, já que não estão documentadas.
Figura 22: Distribuição de ocorrências no SOF dos métodos das APIs mais populares do Maven
5.2.2
Quais foram os métodos que mais dispararam discussões
relacionadas a exceções uncaught ?
A Tabela 8 contém os 10 primeiros métodos com maior número de ocorrências em postagens do SOF. Se destacam métodos das APIs do Junit, Mysql e JSF que possuem além de muitas ocorrências no SOF, também um grande número de exceções diferentes que foram identificadas em cada ocorrência. Na questão a seguir, iremos explorar mais as características sobre os métodos com grande número de exceções relacionadas.
Método Exceções SOF
javax.servlet.http.HttpServlet.service 691 2569 javax.faces.webapp.facesservlet.service 177 864 javax.faces.webapp.facesservlet.service 177 864 com.mysql.jdbc.sqlerror.createsqlexception 20 680 com.mysql.jdbc.util.handlenewinstance 27 594 com.mysql.jdbc.mysqlio.checkerrorpacket 29 579 org.junit.runners.parentrunner.run 237 566 org.junit.runners.parentrunner.runchildren 224 537 org.junit.runners.parentrunner.access$000 224 537 org.junit.internal.runners.model.reflectivecallable.run 224 530
Tabela 8: Top 10 métodos com maior número de ocorrências em postagens do SOF.
5.2.3
Existe alguma característica em comum entre os top 10
métodos com maior número de exceções disparadas?
Analisando os métodos com maior número de exceções diferentes em postagens do SOF (pela Tabela 9), podemos notar que a maioria das exceções registradas em stack traces no SOF caracterizam a chamada de método realizada à métodos de outras APIs.
Método Exceções javax.servlet.http.HttpServlet.service 691 org.junit.runners.parentrunner.run 237 org.junit.runners.parentrunner.runchildren 224 org.junit.runners.parentrunner.access$000 224 org.junit.internal.runners.model.reflectivecallable.run 224 org.junit.runners.parentrunner$3.run 221 org.junit.runners.parentrunner$2.evaluate 219 org.junit.runners.parentrunner$1.schedule 219 org.junit.runners.model.frameworkmethod$1.runreflectivecall 218 org.junit.runners.model.frameworkmethod.invokeexplosively 216
Tabela 9: Top 10 métodos ordenados pela quantidade de exceções diferentes em ocorrências do SOF.
Por exemplo, o método "javax.servlet.http.HttpServlet.service" ocorre na maioria das stack traces como uma chamada intermediária, que não é realizada diretamente pela aplicação cliente, mas por outra API. Na stack trace da Figura 23 é possível observar que o método é chamado pela API GWT que provavelmente é responsável por realizar a conexão com o banco de dados e executar o comando de insert do Hibernate emitido pela aplicação cliente.
Figura 23: Exemplo de stack trace com ocorrênca do método "javax.servlet.http.HttpServlet.service".
A Tabela 10 contém os 10 primeiros métodos com maior número de exceções dife- rentes em postagens do SOF, considerando a heurística baseada no padrão "regra de três"(do inglês: rule of three), que foi explicada na seção 3.6.2.No nosso caso, a Tabela 10
só considera os métodos cujas exceções possuem pelo menos três stack traces ocorridas em postagens do SOF. Notamos que apesar da restrição, ainda há a ocorrência de uma grande número de exceções para determinados métodos. Isso caracteriza a presença des- ses métodos no contexto de outras APIs, ou seja, quando uma determinada API "A"faz referência a métodos de uma API "B". Esse fluxo excepcional não interessam diretamente à aplicação cliente, uma vez que a API "A"deve tratar de forma transparece as situações excepcionais de chamadas a métodos da API "B".
Método Exceções javax.servlet.http.HttpServlet.service 170 javax.faces.webapp.facesservlet.service 50 org.junit.runners.parentrunner.run 41 org.junit.internal.runners.model.reflectivecallable.run 40 org.junit.runners.parentrunner.access$000 39 org.junit.runners.parentrunner.runchildren 39 org.junit.runners.model.frameworkmethod$1.runreflectivecall 38 org.junit.runners.model.frameworkmethod.invokeexplosively 38 org.junit.runners.parentrunner$3.run 37 org.junit.runners.parentrunner$1.schedule 37
Tabela 10: Top 10 métodos ordenados pela quantidade de exceções diferentes em ocorrên- cias do SOF, considerando o padrão "regra de três"[20].
Devido a essa característica, observada em métodos cuja interface excepcional possui um grande número de exceções, dar-se a entender que eles pertencem a Frameworks e não, necessariamente, sejam métodos de APIs. Frameworks dão suporte para o funcionamento de APIs. Os seus métodos geralmente são restritos ao acesso por métodos das APIs, que por sua vez estendem o funcionamento desses métodos de acordo com o comportamento inerente a sua aplicação. Com a visão de que as aplicações cliente estejam interessadas no código das APIs (e não nos Frameworks), os métodos de Frameworks não são desejáveis para o conhecimento dos desenvolvedores. Assim, a interface excepcional desses métodos pode ser filtrada e desconsiderada nas recomendações de ferramentas.
Porém, uma análise mais detalhada sobre esses métodos é necessária para que se con- firme essa hipótese. Futuramente, poderiam ser elaborados critérios mais elaborados para categorização dos métodos minerados das fontes de stack traces (dentre elas o Stacko- verflow ), a fim de filtrar apenas aqueles métodos realmente desejáveis ao desenvolvedor, desconsiderando informações que não contribuem para a construção da sua aplicação, principalmente, em relação a prevenção de falhas.
5.2.4
Das 100 APIs mais populares, qual a porcentagem de APIs
que dispararam pelo menos uma discussão relacionada a
exceções do SOF?
A Tabela 11 exibe que, das 100 APIs analisadas, 81(%) delas possuem pelo menos uma ocorrência de algum método em stack traces de postagens do SOF. Ainda, das 81 APIs, 52 possuem pelo menos um par método-exceção com documentação no Javadoc e 29 não nenhum par método-exceção documentado. A Tabela 14 do Apêndice B ilustra quais as APIs em que foram identificada documentação e maior detalhes sobre a quantidade de métodos com e sem documentação.
Possui documentação Não possui documentação
Possui ocorrência no SOF 52 29
Não possui ocorrência no SOF 7 12
Tabela 11: Classificação das APIs quanto a existência de exceções documentadas e a ocorrências de pares método-exceção em postagens do SOF.
5.2.5
Dos pares método-exceção identificados através da ferra-
menta de análise estática, quantos foram citados em posta-
gens do SOF?
O estudo de Sena et al [28] dispõe também os métodos e exceções que puderam ser identificados na análise estática das APIs. Do total de 7288 pares método-exceção identi- ficados na análise estática, 102 deles tiveram pelo menos uma ocorrência em postagens do SOF (1,40%). Já na perspectiva do total de 5457 métodos diferentes, 286 deles (5,24%) podem ser encontrados em pelo menos uma postagem do SOF. Essa última porcentagem considera outras exceções, que não seja apenas aquele identificada na análise estática. Podemos notar que são poucos os pares método-exceção que contêm ocorrência no SOF, porém o quantitativo por método mostra que outras exceções além daquelas identificadas na análise estática possuem alguma postagem relacionada. Por isso, sugerimos o uso em conjunto das duas abordagens, usando o SOF de forma a complementar o conhecimento excepcional dos métodos das APIs.