O snippet de código Java mais usado no Stack Overflow contém um erro

Java

Um estudo publicado em Outubro de 2018 na revista Empirical Software Engineering pelos acadêmicos Sebastian Baltes e Stephan Diehl revelou que um snippet de código fornecido em resposta a uma pergunta de Stack Overflow em setembro de 2010 por Andreas Lundblad, Desenvolvedor Java na Palantir, é o trecho de código Java mais usado na plataforma da comunidade.

No entanto, em uma postagem na semana passada, Lundblad explicou que o código estava com defeito e que estava convertendo incorretamente o número de bytes em formatos legíveis por humanos. O código em questão acumulou mais de mil recomendações e também já foi incluído em diversos projetos e está em repositórios do GitHub aproximadamente 7 mil vezes.

É digno de nota que o erro não foi encontrado pelos usuários que usaram este código em seus projetos, mas pelo autor original da dica.

O código considerado converteu o tamanho do byte em formato legível, por exemplo 110592 convertido em "110.6 kB" ou "108.0 KiB". O código foi proposto como uma variante do conselho proposto anteriormente, otimizado usando logaritmos, nos quais o valor foi determinado dividindo o valor inicial em um loop por «10 18, 10 15, 10 12, 10 19, 10 6, 10 3 e 10 0 ″ , mesmo quando o divisor é maior que o valor original em bytes.

Devido a cálculos imprecisos na versão otimizada (estouro de valor longo), o resultado do processamento de números muito grandes (exabytes) não correspondiam à realidade.

Lundblad explicou que o código continha um erro de conversão trivial que resultou apenas em estimativas de tamanho de arquivo ligeiramente imprecisas. Dito isso, estima-se que teria sido muito pior do que isso.

O código pode conter uma vulnerabilidade de segurança, por exemplo. Se fosse esse o caso, levaria meses ou anos para reparar todos os aplicativos vulneráveis, expondo os usuários a ataques.

O autor do conselho também tentou chamar a atenção para o problema para usar exemplos sem referência à fonte e sem especificar uma licença.

“Em sessões colaborativas envolvendo vários codificadores humanos, avaliamos manualmente cada parte do código para vulnerabilidades de segurança de acordo com as instruções CWE (Common Weakness Enumeration).

De 72,483 trechos de código examinados usados ​​em pelo menos um projeto hospedado no GitHub, encontramos um total de 69 trechos de código vulneráveis ​​classificados em 29 tipos. Muitos dos trechos de código estudados ainda não foram corrigidos ", disseram os pesquisadores em seu relatório.

Os 69 fragmentos de código vulneráveis encontrado no Stack Overflow reutilizado em um total de 2859 projetos GitHub. Para melhorar a qualidade dos fragmentos de código compartilhados no Stack Overflow, eles desenvolveram uma extensão de navegador que permite aos usuários do Stack Overflow procurar vulnerabilidades nos fragmentos ao baixá-los para a plataforma.

No entanto, apesar das advertências dos pesquisadores, os desenvolvedores ainda copiam o código Stack Overflow em seus projetos sem realizar uma análise.

Ashkan Sami, Professor Associado de TI, engenharia e tecnologia da informação na Universidade Shiraz no Irã, disse que

“A pesquisa foi uma tentativa de examinar como o código defeituoso migra do Stack Overflow para o GitHub. Basicamente, o que temos tentado mostrar é que usar o código Stack Overflow sem examiná-lo de perto pode levar a vulnerabilidades do aplicativo ”, disse Sami. O estudo também se refere a um artigo acadêmico de 2017.

De acordo com este artigo, 1161 trechos de código inseguros postados no Stack Overflow foram usados ​​em 1.3 milhão de aplicativos Android disponíveis no Google Play.

Além de um estudo anterior, 46% dos desenvolvedores que usaram o código StackOverflow sem especificar o autor, 75% não sabiam que o código está licenciado sob CC BY-SA e 67% não sabiam que isso implicava na necessidade de atribuição.

De acordo com dados de outros estudos, a utilização do código de amostra está associada não apenas ao risco de bugs no código, mas também a vulnerabilidades.

Por exemplo, depois de analisar 72483 amostras de código C ++ no StackOverflow, os pesquisadores identificaram vulnerabilidades sérias em 69 amostras (que é 0.09%), incluídas na lista das recomendações mais populares.

fonte: https://programming.guide