Este documento apresenta os resultados de um estudo sobre o uso de APIs internas em 263.425 projetos Java no GitHub. Os principais resultados são: (1) Algumas bibliotecas têm mais de 20% dos clientes usando APIs internas; (2) As 50 APIs internas mais usadas pertencem a bibliotecas como JDK, Action Bar Sherlock e Android; (3) Provedores sabem que APIs internas são usadas, mas clientes as usam por falta de conhecimento das bibliotecas. O estudo analisou frequência e distribuição do uso, além de consultar
An overview of the Java OCA/OCP certifications with an emphasis on the major steps for how to study. Most of the content applies to any exam you could take. The examples are Java.
The document summarizes presentations by five teams of 5th graders from the Elementary School on the thrills and threats of the internet. The teams presented on topics including search engines, social networking, email, blogs, and online entertainment. Each team discussed the history and key aspects of their topic as well as potential pros and cons.
The document discusses the importance of global education for students in St. George, Maine. It notes that Maine's environment and communities are increasingly connected to global issues and populations due to factors like climate change, migration, and globalization. It argues that global education can help students develop global competence by learning to investigate issues from multiple perspectives, communicate across cultures, take informed action on global problems, and recognize how perspectives are shaped. The document provides examples of curricular resources that can help teachers incorporate global themes into different subject areas like language arts, social studies, and science.
Formato word para la elaboración del marco teórico.
Considere un gestor de referencias como el Zotero.
Existe un excelente curso de Zotero de Julio Alonso Arévalo.
En caso que tengas problemas de instalación de Zotero 4.0, en esta plataforma encontrarás una presentación mía.
The University of Petroleum and Energy Studies (UPES), Dehradun, campus buzzed with excitement on the eighth day, i.e. June 28th, 2016, of Phase I of its 4th consecutive Orientation Program - ‘Monsoon Management Magic - M3’.
This document summarizes the 2008 financial crisis and its impacts. It discusses how the bursting of the housing bubble in the United States, marked by rising default rates on subprime mortgages, triggered the crisis. As major financial institutions like Lehman Brothers collapsed due to their exposure to these risky mortgages, stock markets plunged substantially. The Dow Jones Industrial Average fell over 50% from its peak in October 2007 to its trough in March 2009. Countries around the world, including India, felt significant impacts through falling stock prices, currency depreciation, and reduced foreign investment.
An overview of the Java OCA/OCP certifications with an emphasis on the major steps for how to study. Most of the content applies to any exam you could take. The examples are Java.
The document summarizes presentations by five teams of 5th graders from the Elementary School on the thrills and threats of the internet. The teams presented on topics including search engines, social networking, email, blogs, and online entertainment. Each team discussed the history and key aspects of their topic as well as potential pros and cons.
The document discusses the importance of global education for students in St. George, Maine. It notes that Maine's environment and communities are increasingly connected to global issues and populations due to factors like climate change, migration, and globalization. It argues that global education can help students develop global competence by learning to investigate issues from multiple perspectives, communicate across cultures, take informed action on global problems, and recognize how perspectives are shaped. The document provides examples of curricular resources that can help teachers incorporate global themes into different subject areas like language arts, social studies, and science.
Formato word para la elaboración del marco teórico.
Considere un gestor de referencias como el Zotero.
Existe un excelente curso de Zotero de Julio Alonso Arévalo.
En caso que tengas problemas de instalación de Zotero 4.0, en esta plataforma encontrarás una presentación mía.
The University of Petroleum and Energy Studies (UPES), Dehradun, campus buzzed with excitement on the eighth day, i.e. June 28th, 2016, of Phase I of its 4th consecutive Orientation Program - ‘Monsoon Management Magic - M3’.
This document summarizes the 2008 financial crisis and its impacts. It discusses how the bursting of the housing bubble in the United States, marked by rising default rates on subprime mortgages, triggered the crisis. As major financial institutions like Lehman Brothers collapsed due to their exposure to these risky mortgages, stock markets plunged substantially. The Dow Jones Industrial Average fell over 50% from its peak in October 2007 to its trough in March 2009. Countries around the world, including India, felt significant impacts through falling stock prices, currency depreciation, and reduced foreign investment.
OCA Java SE 8 Exam Chapter 3 Core Java APIsİbrahim Kürce
This document provides an overview of core Java APIs covered on the OCA exam, including Strings, StringBuilder, arrays, sorting, and searching. It discusses that Strings are immutable sequences of characters with useful methods like length(), charAt(), indexOf(), and substring(). StringBuilder is mutable and more efficient for string manipulation than concatenating Strings. Arrays are objects that hold primitives or references in indexed memory locations. The document covers creating, accessing, and searching arrays, as well as the Arrays utility class methods like sort().
OCA Java SE 8 Exam Chapter 4 Methods Encapsulationİbrahim Kürce
Methods allow classes to define reusable blocks of code. They can be declared with access modifiers like public or private, return types, parameters, and exceptions. Static methods can be called without an object and are used for utility functions. Constructors initialize new objects and can call other constructors through constructor chaining. Encapsulation involves making data private and accessing it through public getters and setters to control changes to an object's state. Immutable classes cannot be modified once created.
Construindo um micro-serviço Java 100% funcional em 15 minutosRafael Chaves
O documento apresenta uma abordagem para construir rapidamente um microserviço Java usando modelagem em UML textual (TextUML) e geração de código. Apresenta uma aplicação exemplo de reembolso de despesas modelada em TextUML e discute como entidades, relacionamentos, ações e outros elementos seriam mapeados para código Java usando JPA, JAX-RS e outras tecnologias. A solução proposta visa aumentar a produtividade reduzindo o tempo de desenvolvimento inicial.
This document provides an overview of the flora and fauna of India. It begins by explaining that India has immense biodiversity due to its varied climate, topology, and habitats. It then discusses the classification and importance of flora (plants) and fauna (animals) generally. It provides statistics on the number of known plant and animal species in India and notes that India is home to many endemic species. The document outlines some key plant and animal groups in India and efforts to conserve threatened species and habitats through programs like Project Tiger. It concludes by discussing the distribution of forests in India and community-led conservation initiatives.
This document provides an overview of arrays, generics, wildcards, and lambda expressions in Java. It discusses array initialization and multi-dimensional arrays. It explains generics and how they avoid type casting. It covers wildcard types, subclass/superclass constraints, and limitations of generics. The document also demonstrates lambda expressions and functional interfaces like Comparator. It provides examples of common data structures in Java like List, Set, and Map as well as streams and iterators.
1) The document discusses the historical use of integrated watershed models in Canada from the 1990s to present day. Initially, groundwater models were rarely used but are now commonly applied to answer questions about impacts to municipal wells, drought, development, and climate change.
2) Two case studies are described where integrated watershed models were developed and applied. The first case study looks at the Oro Moraine region to analyze impacts of historical drought and future climate change. The second case study models cumulative impacts of in-situ oil sands development on the MacKay River watershed.
3) For both case studies, the integrated GSFLOW model code is used to couple surface water and groundwater
1) Integrated modeling of surface water and groundwater systems poses numerous technical and non-technical challenges. The shallow subsurface where integration occurs is highly complex and transient.
2) A general strategy for integrated model development involves identifying areas of strong interaction, integrating data and tools, conceptualizing the shallow system, developing sub-models, conducting initial and refined simulations, and achieving a final integrated calibration.
3) Key technical issues include compensating errors between models, limitations in conceptual models, and the need to consider dynamic feedback between surface water and groundwater. Non-technical issues include knowledge limitations between disciplines and effective project management.
This document provides an overview of incorporating a dynamic irrigation demand module into an integrated surface water/groundwater model to assess drought response. It discusses background on source water protection in Ontario, Canada, outlines the integrated modelling approach using GSFLOW, and describes modifications made to the GSFLOW code to simulate farm-scale irrigation demand based on soil moisture levels. Testing of the new irrigation demand submodel in a pilot watershed study area is presented.
1. O documento discute técnicas para escalar aplicações React e TypeScript, incluindo estrutura de projetos, boas práticas de código, testes e monitoramento.
2. O autor tem experiência desenvolvendo sites com milhões de visitas diárias e discute como projetos podem crescer rapidamente sem problemas de desempenho ou manutenibilidade.
3. Escalabilidade envolve estruturar o código e projeto para que novos desenvolvedores possam entender facilmente, adicionar novas funcionalidades rapid
O documento descreve o que é o Android e como desenvolver aplicativos para essa plataforma. Explica que o Android é uma pilha de software que inclui sistema operacional, middleware e aplicativos chaves. Também descreve as ferramentas necessárias como JDK, Eclipse, Android SDK e ADT, e os passos para configurar o ambiente de desenvolvimento, como a instalação do ADT no Eclipse. Por fim, apresenta dois exemplos básicos de aplicativos Android: um leitor de MP3 e um mini navegador web.
O documento discute Java como uma plataforma de desenvolvimento de software composta por máquina virtual Java, linguagem de programação Java e bibliotecas padrão, e descreve o processo Java Community Process para desenvolvimento colaborativo de especificações Java. Também aborda conceitos de software livre e projetos abertos em Java.
Este documento discute requisitos de engenharia de software. Apresenta tipos de requisitos funcionais e não funcionais, e discute como especificá-los de forma clara, completa e consistente para evitar ambiguidades. Também discute alternativas à especificação de requisitos em linguagem natural, como especificações estruturadas, baseadas em modelos e tabelas.
O documento apresenta uma agenda para discussão de tópicos relacionados a desenvolvimento de software, incluindo legibilidade de código, comentários, formatação, funções, código externo, testes de unidade e classes.
O documento discute o desenvolvimento com ferramentas open-source em Java. Apresenta o que é open-source e como o código aberto permite maior liberdade aos desenvolvedores. Lista diversos frameworks, IDEs, servidores e softwares de apoio open-source populares para Java, como Eclipse, NetBeans, Struts, Hibernate, Tomcat e JBoss.
Esta apresentação contém alguns conceitos fundamentais sobre a linguagem de programação Java. É indicada para quem não tem nenhum conhecimento sobre o assunto.
React Native - Experiência Nativa para o usuário e experiência Web para o des...Emiliano Barbosa
O documento apresenta React Native, uma biblioteca Javascript para desenvolvimento de aplicativos móveis multiplataforma. Apresenta as vantagens de ter experiência nativa para o usuário e experiência web para o desenvolvedor. Detalha como a Globo.com utiliza React Native para desenvolver aplicativos para iOS e Android de forma compartilhada.
O documento apresenta um curso de Programação Orientada a Objetos com Java ministrado pelo instrutor Daniel Bernardo. O curso é destinado a estudantes, programadores e empresas interessadas em aprender Java. Ele é dividido em 6 aulas que cobrem conceitos de OO, Java e APIs importantes como Swing e JDBC.
O documento discute o desenvolvimento de aplicativos híbridos usando o framework Ionic. Descreve um projeto de aplicativo móvel para votação em tempo real desenvolvido com Ionic e as vantagens e desafios encontrados. Também fornece detalhes sobre como configurar e usar o Ionic, incluindo templates, plugins, build e publicação.
Aula 1
O que é software?
Quem faz o software?
Por que um software é importante?
Quais são os passos para se fazer um software?
Como tenho certeza que fiz um software corretamente?
O documento discute estratégias de automação de testes em microserviços, mencionando cinco níveis de teste: unidade, integração, componente, end-to-end e exploratório. Cada nível de teste é descrito com foco no escopo, dependências, ambientes de teste e objetivos. A automação é importante para acelerar o ciclo de desenvolvimento e entrega contínua em arquiteturas de microserviços.
OCA Java SE 8 Exam Chapter 3 Core Java APIsİbrahim Kürce
This document provides an overview of core Java APIs covered on the OCA exam, including Strings, StringBuilder, arrays, sorting, and searching. It discusses that Strings are immutable sequences of characters with useful methods like length(), charAt(), indexOf(), and substring(). StringBuilder is mutable and more efficient for string manipulation than concatenating Strings. Arrays are objects that hold primitives or references in indexed memory locations. The document covers creating, accessing, and searching arrays, as well as the Arrays utility class methods like sort().
OCA Java SE 8 Exam Chapter 4 Methods Encapsulationİbrahim Kürce
Methods allow classes to define reusable blocks of code. They can be declared with access modifiers like public or private, return types, parameters, and exceptions. Static methods can be called without an object and are used for utility functions. Constructors initialize new objects and can call other constructors through constructor chaining. Encapsulation involves making data private and accessing it through public getters and setters to control changes to an object's state. Immutable classes cannot be modified once created.
Construindo um micro-serviço Java 100% funcional em 15 minutosRafael Chaves
O documento apresenta uma abordagem para construir rapidamente um microserviço Java usando modelagem em UML textual (TextUML) e geração de código. Apresenta uma aplicação exemplo de reembolso de despesas modelada em TextUML e discute como entidades, relacionamentos, ações e outros elementos seriam mapeados para código Java usando JPA, JAX-RS e outras tecnologias. A solução proposta visa aumentar a produtividade reduzindo o tempo de desenvolvimento inicial.
This document provides an overview of the flora and fauna of India. It begins by explaining that India has immense biodiversity due to its varied climate, topology, and habitats. It then discusses the classification and importance of flora (plants) and fauna (animals) generally. It provides statistics on the number of known plant and animal species in India and notes that India is home to many endemic species. The document outlines some key plant and animal groups in India and efforts to conserve threatened species and habitats through programs like Project Tiger. It concludes by discussing the distribution of forests in India and community-led conservation initiatives.
This document provides an overview of arrays, generics, wildcards, and lambda expressions in Java. It discusses array initialization and multi-dimensional arrays. It explains generics and how they avoid type casting. It covers wildcard types, subclass/superclass constraints, and limitations of generics. The document also demonstrates lambda expressions and functional interfaces like Comparator. It provides examples of common data structures in Java like List, Set, and Map as well as streams and iterators.
1) The document discusses the historical use of integrated watershed models in Canada from the 1990s to present day. Initially, groundwater models were rarely used but are now commonly applied to answer questions about impacts to municipal wells, drought, development, and climate change.
2) Two case studies are described where integrated watershed models were developed and applied. The first case study looks at the Oro Moraine region to analyze impacts of historical drought and future climate change. The second case study models cumulative impacts of in-situ oil sands development on the MacKay River watershed.
3) For both case studies, the integrated GSFLOW model code is used to couple surface water and groundwater
1) Integrated modeling of surface water and groundwater systems poses numerous technical and non-technical challenges. The shallow subsurface where integration occurs is highly complex and transient.
2) A general strategy for integrated model development involves identifying areas of strong interaction, integrating data and tools, conceptualizing the shallow system, developing sub-models, conducting initial and refined simulations, and achieving a final integrated calibration.
3) Key technical issues include compensating errors between models, limitations in conceptual models, and the need to consider dynamic feedback between surface water and groundwater. Non-technical issues include knowledge limitations between disciplines and effective project management.
This document provides an overview of incorporating a dynamic irrigation demand module into an integrated surface water/groundwater model to assess drought response. It discusses background on source water protection in Ontario, Canada, outlines the integrated modelling approach using GSFLOW, and describes modifications made to the GSFLOW code to simulate farm-scale irrigation demand based on soil moisture levels. Testing of the new irrigation demand submodel in a pilot watershed study area is presented.
1. O documento discute técnicas para escalar aplicações React e TypeScript, incluindo estrutura de projetos, boas práticas de código, testes e monitoramento.
2. O autor tem experiência desenvolvendo sites com milhões de visitas diárias e discute como projetos podem crescer rapidamente sem problemas de desempenho ou manutenibilidade.
3. Escalabilidade envolve estruturar o código e projeto para que novos desenvolvedores possam entender facilmente, adicionar novas funcionalidades rapid
O documento descreve o que é o Android e como desenvolver aplicativos para essa plataforma. Explica que o Android é uma pilha de software que inclui sistema operacional, middleware e aplicativos chaves. Também descreve as ferramentas necessárias como JDK, Eclipse, Android SDK e ADT, e os passos para configurar o ambiente de desenvolvimento, como a instalação do ADT no Eclipse. Por fim, apresenta dois exemplos básicos de aplicativos Android: um leitor de MP3 e um mini navegador web.
O documento discute Java como uma plataforma de desenvolvimento de software composta por máquina virtual Java, linguagem de programação Java e bibliotecas padrão, e descreve o processo Java Community Process para desenvolvimento colaborativo de especificações Java. Também aborda conceitos de software livre e projetos abertos em Java.
Este documento discute requisitos de engenharia de software. Apresenta tipos de requisitos funcionais e não funcionais, e discute como especificá-los de forma clara, completa e consistente para evitar ambiguidades. Também discute alternativas à especificação de requisitos em linguagem natural, como especificações estruturadas, baseadas em modelos e tabelas.
O documento apresenta uma agenda para discussão de tópicos relacionados a desenvolvimento de software, incluindo legibilidade de código, comentários, formatação, funções, código externo, testes de unidade e classes.
O documento discute o desenvolvimento com ferramentas open-source em Java. Apresenta o que é open-source e como o código aberto permite maior liberdade aos desenvolvedores. Lista diversos frameworks, IDEs, servidores e softwares de apoio open-source populares para Java, como Eclipse, NetBeans, Struts, Hibernate, Tomcat e JBoss.
Esta apresentação contém alguns conceitos fundamentais sobre a linguagem de programação Java. É indicada para quem não tem nenhum conhecimento sobre o assunto.
React Native - Experiência Nativa para o usuário e experiência Web para o des...Emiliano Barbosa
O documento apresenta React Native, uma biblioteca Javascript para desenvolvimento de aplicativos móveis multiplataforma. Apresenta as vantagens de ter experiência nativa para o usuário e experiência web para o desenvolvedor. Detalha como a Globo.com utiliza React Native para desenvolver aplicativos para iOS e Android de forma compartilhada.
O documento apresenta um curso de Programação Orientada a Objetos com Java ministrado pelo instrutor Daniel Bernardo. O curso é destinado a estudantes, programadores e empresas interessadas em aprender Java. Ele é dividido em 6 aulas que cobrem conceitos de OO, Java e APIs importantes como Swing e JDBC.
O documento discute o desenvolvimento de aplicativos híbridos usando o framework Ionic. Descreve um projeto de aplicativo móvel para votação em tempo real desenvolvido com Ionic e as vantagens e desafios encontrados. Também fornece detalhes sobre como configurar e usar o Ionic, incluindo templates, plugins, build e publicação.
Aula 1
O que é software?
Quem faz o software?
Por que um software é importante?
Quais são os passos para se fazer um software?
Como tenho certeza que fiz um software corretamente?
O documento discute estratégias de automação de testes em microserviços, mencionando cinco níveis de teste: unidade, integração, componente, end-to-end e exploratório. Cada nível de teste é descrito com foco no escopo, dependências, ambientes de teste e objetivos. A automação é importante para acelerar o ciclo de desenvolvimento e entrega contínua em arquiteturas de microserviços.
Este documento fornece uma introdução aos testes automatizados, abordando conceitos como: objetivos da automação de testes, tipos de testes, ferramentas como Selenium e Cucumber, e técnicas como TDD. O documento também discute como identificar elementos na página e interagir com eles durante a automação.
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
O documento discute tendências e dicas para o desenvolvimento de software. Ele aborda tópicos como por que desenvolver software é difícil, motivos de falha em projetos, linguagens populares, boas práticas como teste e integração contínua, metodologias ágeis, tendências como computação em nuvem e NoSQL e por fim dicas para desenvolvedores.
O documento fornece orientações sobre como preparar o ambiente de desenvolvimento para projetos Java usando frameworks como JSF e Hibernate. Ele lista os softwares necessários, links para download, e tutoriais de instalação. Também discute conceitos como necessidades de aplicações web, como o Java EE ajuda a resolver esses problemas, e diferentes servidores de aplicação.
O documento discute integração contínua, incluindo seus conceitos, benefícios e pré-requisitos. A integração contínua envolve construir e testar automaticamente o software sempre que novas mudanças são implementadas para garantir que o software esteja sempre em um estado funcional. Isso ajuda a detectar bugs cedo e manter o software de alta qualidade. Pré-requisitos incluem controle de versão, builds automatizados e testes automatizados.
O documento apresenta três algoritmos de predição de bugs utilizados no Google: FixCache, Rahman e Time-Weighted Risk. FixCache e Rahman foram os algoritmos preferidos pelos desenvolvedores, pois mostram arquivos com muitos bugs corrigidos no passado. O estudo mostrou que os desenvolvedores mudaram seus comportamentos para inspecionar arquivos sinalizados pelos algoritmos.
Collaborative Filtering por Fatores Latentes - Recomendação para o GlobosatPlayCiro Cavani
Esse artigo descreve como foi feita a recomendação personalizada do GlobosatPlay usando Collaborative Filtering por Fatores Latentes, inspirado pelos trabalhos publicados sobre o Netflix Prize. A solução utiliza Mahout, Hadoop e Kafka para processar a recomendação para milhões de usuários ativos, milhares de itens variados em fluxo e histórico esparso de interações. Os resultados mostraram um ganho de 50% na conversão sobre Collaborative Filtering User-User e a expectativa é usar esse algoritmo em outros produtos da Globo.com.
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
Para acessar um método protected de uma superclasse usando reflection, precisamos desabilitar o mecanismo de verificação de visibilidade (acess check) antes de invocar o método. Isso pode ser feito chamando o método setAccessible(true) no objeto Method antes da invocação.
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
O documento analisa três frameworks PHP populares: CakePHP, CodeIgniter e Zend Framework. Explora o que são frameworks, suas vantagens e desvantagens, e fornece detalhes sobre a estrutura, funcionalidade e aplicabilidade de cada um.
Semelhante a Um Estudo em Larga Escala Sobre o Uso de API's Internas (20)
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
Este certificado confirma que Gabriel de Mattos Faustino concluiu com sucesso um curso de 42 horas de Gestão Estratégica de TI - ITIL na Escola Virtual entre 19 de fevereiro de 2014 a 20 de fevereiro de 2014.
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Um Estudo em Larga Escala Sobre o Uso de API's Internas
1. Um Estudo em Larga Escala
sobre o Uso de API’s Internas
Emerson Viera
2. Autores
● Aline Brito
● André Hora
● Marco Túlio Valente
ASERG(Applied Software Engineering Research Group) Group –
Departamento de Ciência da Computação (DCC)
Universidade Federal de Minas Gerais (UFMG)
3. Agenda
● Introdução
● Metodologia
● Resultados
● Comentários de Provedores e Clientes de Interfaces Internas
-Consulta aos Clientes de Interfaces Internas
- Consulta aos Provedores de Interfaces Internas
● Riscos à validade
● Trabalhos Relacionados
● Conclusões
4. Introdução
● Popularidade do uso de bibliotecas e APIs(Application Programming Interfaces).
● Provedores dessas bibliotecas dividem suas APIs em dois tipos, internas e públicas.
● Para distinguir APIs internas e públicas, alguns provedores incluem pacotes específicos.
● Na IDE Eclipse, APIs internas são implementadas em pacotes que possuem o nome
“internal”.. Já o JDK utiliza o prefixo “sun”.
- Para melhor quantificar o cenário que motiva esse trabalho, realizou-se um estudo ´
preliminar onde minerou-se a quantidade de projetos que utilizam pelo menos uma API
com as nomenclaturas citadas.
- Analisou-se 263.425 projetos Java GitHub. Foram encontrados 17.910 projetos
(6.8%) usando APIs internas. Assim, estuda-se neste artigo duas questões de
pesquisa centrais relativas ao uso de APIs internas. Adicionalmente o estudo inclui o
feedback de provedores e clientes de interfaces internas.
5. Introdução
QP #1. Qual a frequência de utilização de interfaces internas?
QP #2. Qual a distribuição do uso das interfaces internas de uma biblioteca?
QP(Questão de Pesquisa)
- São analisadas 17 bibliotecas e suas APIs internas usadas por clientes, em um dataset
com aproximadamente 260 mil projetos Java GitHub e 131 milhões de APIs.
- Para melhor entendimento, o estudo proposto nesse artigo concentra-se em dois níveis
de granularidade: APIs (por exemplo, quantos clientes estão usando
org.junit.internal.AssumptionViolatedException?) e bibliotecas (por exemplo, quantos
clientes JUnit estão usando interfaces internas?).
6. Metodologia
Analisam-se 17 bibliotecas Java e o uso das suas interfaces internas em sistemas clientes. Para
verificar o uso dessas interfaces, utiliza-se um dataset composto por 263.425 projetos e 16.386.193
arquivos Java, minerados através da infra-estrutura Boa. Essa infraestrutura inclui diversos datasets do
GitHub, assim como uma DSL (Domain Specific Language) para minerar repositórios de software e
uma interface Web para executar os scripts de mineração. Criou-se um script Boa para minerar
projetos que fazem uso de pelo menos uma interface/biblioteca em um arquivo Java válido.
Os metadados obtidos, foram então, inseridos em um banco de dados onde criou-se um script para
agrupar as interfaces encontradas e contabilizar seus sistemas clientes. Em seguida minerou-se as
interfaces internas. Para a biblioteca JDK, avalia-se interfaces que possuem o prefixo sun.* . Para as
demais bibliotecas considera-se o respectivo prefixo e o pacote internal.
7. Resultados
A Tabela 1 apresenta o total de clientes de cada biblioteca que usam pelo menos uma
interface interna.
8. Resultados
A Figura 1 apresenta as 5 bibliotecas como maior número de clientes usando
interfaces internas.
9. Resultados
A Figura 2 apresenta a distribuição das interfaces mais usadas, para as bibliotecas com o maior percentual
de clientes usando interfaces internas.
11. Comentários de Provedores e Clientes de Interfaces
Internas
Consulta aos Clientes de Interfaces Internas
- Nessa consulta, verifica-se o conhecimento dos clientes sobre as interfaces internas usadas em
seus sistemas. Para tanto, foram consultados 10 desenvolvedores ativos de sistemas clientes
cadastrados no GitHub. Para cada desenvolvedor criou-se uma issue com as perguntas
descritas a seguir.
1. You used an internal interface in “name1” class of your project. Do you know that it is an
internal interface of the “name2” library? (Você usou uma interface interna na classe "nome1" do seu
projeto. Você sabe que é uma interface interna da biblioteca "name2"?)
2. Are you aware that internal interfaces are unstable and may change without
backwardcompatibility? (Você está ciente de que as interfaces internas são instáveis e podem
mudar sem compatibilidade com versões anteriores?)
12. Consulta aos Clientes de Interfaces Internas
Obteve-se 4 respostas (40%). O primeiro desenvolvedor usou a interface
com.android.internal.telephony.Phone em seu projeto, e alegou que era um codigo-fonte de terceiros.
Provavelmente esse desenvolvedor copiou o código-fonte da biblioteca para o seu projeto. O
segundo desenvolvedor utilizou a interface interna org.hamcrest.internal.ArrayIterator, e justificou o
seu uso devido a uma sugestão da IDE utilizada. O terceiro desenvolvedor utilizou a interface
sun.misc.BASE64Encoder. Em sua resposta, ele informou que não sabia que tratava-se de uma
interface interna do JDK. O texto a seguir apresenta um trecho da sua resposta.
“I was unaware of how unstable internal interfaces were. From looking into this I have noticed
that Oracle have released a Base64 encoder/decoder in the java.util package, so I am now using
that instead.” ("Eu não sabia como as interfaces internas eram instáveis. De olhar para isso eu notei
que a Oracle lançou um codificador / decodificador Base64 no pacote java.util, então eu estou
usando agora isso em vez disso. ")
13. Consulta aos Clientes de Interfaces Internas
Por fim, o quarto desenvolvedor utilizou a interface com.google.inject.internal.Lists. Em sua resposta
ele alegou que tinha conhecimento sobre interfaces internas mas não percebeu que estava
utilizando. O texto a seguir apresenta um trecho da suas resposta.
“1. I had not noticed it is an internal. 2. Yes. Now that you have pointed it out, I will probably change it.
”("1. Eu não tinha notado que é um interno. 2. Sim. Agora que você o apontou, eu provavelmente vou
mudar isso. ")
Assim, observa-se que o uso de interfaces internas está relacionado com o pouco conhecimento da
biblioteca utilizada.
14. Consulta aos Provedores de Interfaces Internas
Nessa consulta, tem-se por objetivo verificar o conhecimento dos provedores sobre os clientes que
estão usando suas interfaces internas. Foram criadas ˜ issues em repositórios GitHub de 4 bibliotecas
e obteve-se 3 respostas (75%). Para cada provedor foram realizadas as duas perguntas descritas a
seguir. A issue também incluiu a lista de interfaces internas mineradas nesse estudo e a quantidade
de usuários utilizando as mesmas.
1. Did you know that internal interfaces are used by clients? (Você sabia que as interfaces internas são
usadas pelos clientes?)
2. From the presented interfaces, there is some interface that is a candidate to be promoted
to the public one? (A partir das interfaces apresentadas, há alguma interface que é um candidato a ser
promovido para o público?)
15. Consulta aos Provedores de Interfaces Internas
JUnit. 1 Quatro desenvolvedores da biblioteca JUnit responderam a issue que foi aberta,
sendo um deles um membro core do projeto. O texto a seguir apresenta um trecho da sua resposta.
“Yes, we are aware that many of the originally internal interfaces are used by clients. It’s one
of the reasons why we’re using a different approach of annotating APIs instead of using package
names for JUnit 5. ("Sim, estamos cientes de que muitas das interfaces originalmente internas são
usadas pelos clientes. É uma das razões pelas quais estamos usando uma abordagem diferente de
anotar APIs em vez de usar nomes de pacotes para JUnit 5.)
Mockito. 2 Dois desenvolvedores da biblioteca Mockito responderam a issue que foi
aberta. Obteve-se duas respostas.
“It seems that quite some internal classes are used instead of relying on the implementation provided
by the Mockito.* method. E.g. Times should be obtained via Mockito.times(). I am not sure
if we can do something about that.” ("Parece que algumas classes internas são usadas em vez de
depender da implementação fornecida pelo método Mockito. *. Por exemplo. Os tempos devem ser
obtidos via Mockito.times (). Eu não tenho certeza se podemos fazer algo sobre isso. ")
16. Consulta aos Provedores de Interfaces Internas
Google Gson.3 Um dos desenvolvedores da biblioteca Google Gson informou que não tinha
conhecimento da quantidade de clientes usando as interfaces internas, entretanto não
surpreendeu-se com essa má prática adotada por alguns desenvolvedores clientes. Segundo ele,
nenhuma das interfaces listadas por nós na issue são candidatas a promoção para o público. O
texto a seguir apresenta um trecho da suas resposta.
“I didn’t quite know this, but am not very surprised. None of these are candidates for promotion
to public APIs.” ("Eu não sabia muito bem disso, mas não estou muito surpreso. Nenhum desses
candidatos são candidatos à promoção de APIs públicas. ")
Assim, após a consulta aos desenvolvedores de sistemas provedores de interfaces internas,
observa-se que essa má prática é conhecida. As respostas dos desenvolvedores JUnit levantam
também uma discussão em torno de outra atividade crítica, além do uso de interfaces internas,
sistemas clientes estão usando interfaces internas depreciadas.
17. Riscos à validade
Validade externa. Os resultados desse estudo estão restritos a projetos Java GitHub, ou seja, eles
não podem ser generalizados para outras linguagens e outros repositórios de código-fonte. Além
disso, dentre os 260 mil sistemas analisados, alguns podem ser repositórios GitHub das bibliotecas
analisadas nesse trabalho.
Validade interna. Projetos que importaram somente a biblioteca não foram considerados clientes
das interfaces, já que a importação de uma biblioteca não assegura o uso de todas as suas
interfaces no código-fonte.
Validade de construção. ˜ O script Boa recuperou apenas interfaces/bibliotecas que foram
importadas no código-fonte, e algumas dessas importações podem ser classes do próprio projeto.
Além disso, pode-se ter interfaces que não foram utilizadas ( ˜ warning”), e projetos que copiaram o
código-fonte da biblioteca.
18. Trabalhos Relacionados
Existem estudos que concentram-se na evolução e uso de interfaces e bibliotecas [Hora and Valente
2015, Mileva et al. 2010, McDonnell et al. 2013]. Adicionalmente alguns trabalhos relatam o uso
indevido de interfaces por sistemas clientes, como por exemplo, a má prática de programação
relacionada ao uso de interfaces internas [Businge et al. 2015, Mastrangelo et al. 2015]. Outros
estudos concentram-se na promoção dessas interfaces internas para o p ˜ ublico [Hora et al. 2016].
Um estudo relacionado ao uso de interfaces internas da biblioteca Eclipse serviu de inspiração para
esse trabalho [Businge et al. 2015, Businge et al. 2013]. O mesmo analisa releases de 512 plug-ins
Eclipse do repositório SourceForge, com o objetivo de investigar motivos que levam ao uso (ou
desuso) de interfaces internas. Os autores também realizam entrevistas com alguns clientes. Outro
estudo nessa área concentra-se no uso da interface interna sun.misc.Unsafe provida pelo JDK
[Mastrangelo et al. 2015]. O artigo identifica 14 razões que levam clientes a usarem essa interface e
analisa cerca de 86 mil arquivos Java. Ao contrário dos trabalhos mencionados, que concentram-se
em bibliotecas específicas, este trabalho analisa o uso de interfaces internas na linguagem Java, e o
conhecimento de clientes e provedores sobre o uso dessas interfaces. Além disso o trabalho faz uso
de um dataset maior, com aproximadamente 260 mil projetos, 131 milhões de APIs e 16 milhões de
arquivos
19. Conclusões
Este trabalho apresentou um estudo empírico em larga escala sobre a utilização de interfaces internas
em 260 mil projetos Java. Na primeira questão de pesquisa, investigou- se a frequência com que
clientes usam interfaces internas. Na segunda quest ˆ ao de pesquisa analisou-se a distribuição do
uso dessas interfaces por biblioteca. Além disso, realizou-se através de uma análise qualitativa, uma
consulta aos clientes e provedores de interfaces internas. Apresenta-se a seguir os principais
resultados desse estudo:
QP #1. Verificou-se que algumas bibliotecas têm mais de 20% dos seus clientes usando
interfaces internas.
QP #2. Verificou-se que algumas interfaces internas das bibliotecas atraem mais clientes.
Além disso, observou-se que as 50 interfaces internas mais usadas pertencem às bibliotecas JDK,
Action Bar Sherlock e Android.
Entrevista. Na consulta com os provedores de algumas bibliotecas, observou-se que o uso de
interfaces internas por sistemas clientes e conhecido, sendo considerada uma má prática de
programação pelos desenvolvedores. Entre os clientes consultados, observou-se que o uso de
interfaces internas e motivado pela falta de conhecimento da biblioteca.
Como trabalho futuro, pretende-se analisar o total de interfaces internas de cada biblioteca, e quantas
dessas interfaces são usadas por clientes. Pesquisa foi financiada pela FAPEMIG e pelo CNPq.