75 research outputs found

    Um estudo quantitativo sobre o uso de herança e interface em sistemas Java

    Get PDF
    Inheritance is one of the main features in the object-oriented paradigm (OOP). Nonetheless, previous work recommend carefully using it, suggesting alternatives in Java such as the adoption of composition with implementation of interfaces. Despite of being a well-studied theme, there is still little knowledge if such recommendations have been widely adopted by developers in general. This work aims at evaluating how the inheritance and interface resources have been used in Java, comparing new projects with older ones, and also the different releases of projects. Evaluated indicators were the number of corrective changes of the projects, encapsulation breaks by the use of instanceof operator, measures of cohesion, coupling and occurrence of code smells. We also studied how often inheritance or interface features are added or removed from classes, and motivations by which developers perform such procedure. A total of 1,656 open-source projects built between 1997 and 2013, all hosted in the repositories GitHub and SourceForge, were analyzed. We observed developers still use inheritance primarily as a resource for code reuse, motivated by the need to avoid duplicity of source code. In newer projects, classes in inheritance hierarchy had fewer corrective changes and subclasses had fewer use of the instanceof operator. However, as they evolve, classes in inheritance hierarchy tend to become complex as changes occur. Classes implementing interfaces have shown little relation to the interfaces, and there is indication that they are still underutilized. These results show there is still some lack of knowledge about the use of adequate object- oriented practices, which reinforces the need for training developers on how to design better classes.Dissertação (Mestrado)O recurso de herança é uma das principais características do paradigma de Orientação a Objetos. Contudo, trabalhos anteriores recomendam cuidado quanto ao seu uso, sugerindo alternativas em Java como a adoção de composição com implementação de interfaces. Apesar de ser um tema bem estudado, ainda há pouco conhecimento se estas recomendações foram amplamente adotadas pelos desenvolvedores de maneira geral. Este trabalho possui como objetivo avaliar como os recursos de herança e interface têm sido empregados em Java, comparando sistemas mais recentes com antigos, e também versões de cada sistema em épocas distintas. Os indicadores avaliados foram a quantidade de mudanças corretivas dos sistemas, quebras de encapsulamento pelo uso do operador instanceof, medidas de coesão, acoplamento e ocorrências de code smells. Por fim, foi realizada uma medição sobre o quão frequente os recursos de herança ou interface são adicionados ou removidos das classes, e as motivações pelas quais os desenvolvedores executam estes procedimentos. Foram analisados 1.656 sistemas open-source construídos entre 1997 e 2013, todos hospedados nos repositórios GitHub e SourceForge. Foi constatado que os desenvolvedores ainda utilizam herança primariamente como um recurso para reaproveitamento de código, motivados pela necessidade de evitar duplicidade de código-fonte. Em projetos mais recentes, as classes na hierarquia de herança apresentaram menos mudanças corretivas e as subclasses fizeram menos uso do operador instanceof. No entanto, à medida que evoluem, as classes na hierarquia de herança tendem a se tornar complexas na medida em que as mudanças ocorrem. As classes que implementam interfaces mostraram pouca relação com as suas respectivas interfaces implementadas, e foram observados indícios de que este recurso ainda é subutilizado. Estes resultados mostram que ainda existe alguma falta de conhecimento sobre o uso de práticas adequadas orientadas a objetos, o que reforça a necessidade de formação de desenvolvedores sobre como projetar melhores classes

    Avaliação Experimental da Detecção Interativa de Anomalias de Código

    Get PDF
    Anomalias de código são estruturas que frequentemente indicam a presença de problemas no software, dificultando sua manutenção e evolução. Existem várias anomalias catalogadas na literatura e sua detecção geralmente é feita por meio de abordagens de Detecção NãoInterativa (DNI). Essas abordagens não oferecem suporte à interação progressiva dos desenvolvedores com o código afetado, revelando ocorrências de anomalias mais globais apenas sob demanda do desenvolvedor, implicando recorrentemente na identificação tardia destas anomalias. Com o surgimento da Detecção Interativa (DI), busca-se lidar com as limitações das abordagens tradicionais, permitindo a revelação de instâncias de anomalias de código sem uma solicitação explícita do desenvolvedor, incentivando a detecção precoce como uma prática recomendada. Embora os desenvolvedores considerem o uso de abordagens DI, a literatura não oferece diretrizes claras sobre quando e como essas abordagens devem ser utilizadas no contexto das atividades de desenvolvimento de software. Neste trabalho, tem-se como objetivo a avaliação experimental da abordagem de detecção interativa de anomalias de código no contexto das atividades do processo de desenvolvimento de software. Para isso, foram conduzidos estudos no intuito de identificar a necessidade de uso de tal abordagem, avaliar métodos de detecção aderentes, desenvolver suporte automatizado com características DI, apresentar evidências empíricas sobre sua eficácia na detecção de anomalias, bem como descrever um modo de integração ao processo de desenvolvimento de acordo com o arcabouço do Scrum. As tarefas experimentais revelaram que o uso da DI resultou em um aumento de até 40% na medida recall e de até 25% na medida precision na detecção de anomalias durante as atividades de inspeção e desenvolvimento de código. Com base nos resultados dos estudos, conclui-se que fatores associados à DI contribuíram para detecção antecipada de um maior número de ocorrências de anomalias de código se comparada com abordagens tradicionais. Consequentemente, a utilização disciplinada da abordagem DI em um processo de desenvolvimento pode promover uma avaliação contínua e melhorar a qualidade do softwareCode smells generally indicate the presence of deeper problems in the software, making its maintenance and evolution difficult. Several smells are cataloged in the literature, and their detection is traditionally supported by Non-Interactive Detection (NID) approaches. These approaches do not support the progressive interaction of developers with the affected code, revealing occurrences of more global smells only at the developer’s request, recurrently implying a late identification of these smells. With the emergence of Interactive Detection (ID), the aim is to deal with the limitations of traditional approaches, allowing the revelation of instances of code smells without an explicit request from the developer, encouraging early detection as a recommended practice. Although developers consider using ID approaches, guidelines were not found in the literature on when and how such approaches should be used in the context of software development activities. In this work, the objective is the experimental evaluation of the interactive detection of code smells in the context of the activities of the software development process. For doing so, studies were conducted to identify the need to use such an approach, evaluate adherent detection methods, develop automated support with DI characteristics, present empirical evidence on its effectiveness in detecting anomalies, as well as describe a way of integration to the development process according to the Scrum framework. The experimental tasks revealed that using the ID technique led to an increase of up to 40% in the recall and up to 25% in the precision in the detection of code smells during inspection activities and code development. Based on the results of the studies, it is concluded that factors associated with ID contributed to the early detection of a greater number of occurrences of code smells compared to traditional approaches. Consequently, using the ID approach in a disciplined way in a development process can promote continuous evaluation and improve the quality of the software

    Otimização para reduzir o tamanho de código-fonte JavaScript

    Get PDF
    JavaScript is one of the most used programming languages for front-end development of Web application. The increase in complexity of front-end features brings concerns about performance, especially the load and execution time of JavaScript code. To reduce the size of JavaScript programs and, therefore, the time required to load and execute these programs in the front-end of Web applications. To characterize the variants of JavaScript programs and use this information to build a search procedure that scans such variants for smaller implementations that pass all test cases. We applied this procedure to 19 JavaScript programs varying from 92 to 15,602 LOC and observed reductions from 0.2% to 73.8% of the original code, as well as a relationship between the quality of a program’s test suite and the ability to reduce its size.Esta Tese aborda o problema de otimização de tempo de carga de software, especificamente software escrito na linguagem de programação JavaScript, uma linguagem interpretada, baseada em objetos e amplamente utilizada no desenvolvimento de aplicativos e sistemas para a internet. Estudos experimentais foram projetados para avaliar a hipótese de que técnicas heurísticas já aplicadas com sucesso em linguagens orientadas a objeto poderiam ter resultados positivos na redução do tempo de carga de programas escritos em JavaScript. Para tanto, um ferramental que permitisse observar a aplicação de heurísticas selecionadas em programas JavaScript foi construído e executado em um ambiente de computação de alto desempenho. Os resultados dos estudos preliminares foram utilizados para criar um procedimento de busca que varre o código JavaScript criando variantes do programa que sejam menores e passem em todos os casos de teste do programa original. Aplicamos este procedimento a 19 programas JavaScript, variando de 92 a 15.602 linhas de código, e observamos reduções de 0,2% a 73,8% do código original, bem como uma relação entre a qualidade do conjunto de casos de testes e a capacidade de reduzir o tamanho dos programas

    UM GUIA PARA SELEÇÃO DE MÉTRICAS ÁGEIS DE GERENCIAMENTO DE PROJETOS PARA ORGANIZAÇÕES DE DESENVOLVIMENTO DE SOFTWARE

    Get PDF
    TCC(graduação) - Universidade Federal de Santa Catarina. Centro Tecnológico. Sistemas de Informação.O processo de desenvolvimento de software evoluiu ao longo do tempo e, novas metodologias de gerenciamento de projetos surgiram objetivando maximizar o valor entregue ao cliente, bem como minimizar custos e melhorar cada vez mais a qualidade das entregas. Os métodos ágeis permitem que a entrega que até então era tipicamente tardia e representada pelo modelo cascata, seja feita em ciclos menores, acelerando o processo de validação e incrementalmente realizando a entrega de valor. Nesse contexto, as métricas ágeis têm um papel essencial, permitindo que ao longo do projeto diferentes aspectos possam ser monitorados, proporcionando insights durante o ciclo de desenvolvimento pela medição de diferentes atributos do projeto. Assim, este trabalho tem o intuito de propor um guia de métricas de gerenciamento de projetos adequadas ao desenvolvimento ágil de software, por meio do estudo da literatura, análise do estado da arte, avaliação por meio de um survey e disponibilizado em uma plataforma, útil e pertinente aos gerentes de projeto. A avaliação inicial do guia levanta primeiros indícios de que o conteúdo do guia possui usabilidade, relevância e aplicabilidade em diferentes contextos

    Cenário de decisões baseado em métricas de software : definição e implementação de cenários a partir de métricas de design e de vulnerabilidade para tomada de decisão

    Get PDF
    Monografia (graduação)—Universidade de Brasília, Faculdade UnB Gama, Curso de Engenharia de Software, 2014.A qualidade interna é um dos fatores de sucesso de projetos de software, pois corresponde a aspectos primordiais do software tais como manutenibilidade e segurança. Softwares com boa qualidade interna proporcionam maior produtividade uma vez que possibilitam a criação de mais testes automatizados, são mais compreensíveis, reduzem o risco de bugs e facilitam as modificações e evoluções no código. Portanto, o Engenheiro de Software é um dos responsáveis por esse sucesso, uma vez que deve reunir um conjunto de habilidades e conhecimentos que o permitam aplicar práticas, técnicas e ferramentas para a criação de softwares seguros e com bom design. Diante disso, este trabalho aborda as principais ideias e conceitos relacionados à melhoria contínua do código-fonte. Nesse sentido, nesta monografia é destacada a importância da realização de atividades contínuas relacionadas ao design e segurança ao longo de todo o projeto de software, além de discutir a importância da utilização de métricas estáticas de código-fonte para suportar a tomada de decisões, tanto em nível técnico quanto gerencial. Nesse sentido, é apresentado o conceito de Cenários de Decisões que definem uma abstração para escolha e interpretação de métricas, além da proposta de exemplos de utilização destes Cenários para medição da segurança de software. Para suportar a utilização de cenários e métricas no desenvolvimento de software, este trabalho ainda contempla a colaboração na evolução da plataforma livre de monitoramento de código-fonte chamada Mezuro e a construção de uma solução de DataWarehousing.The internal quality is a success factor of software projects because it corresponds to the main aspects of the software such as maintainability and security. Software with good internal quality provides more productivity since it supports the creation of more automated tests, as well as it is more understandable, reduces the risk of bugs, and makes the code changes and developments easier to be done. Therefore, the Software Engineer is a major contributor for this success since he should gather a set of skills and knowledge to apply practices, techniques, and tools for creating secure and well design software. Thus, this research covers the main ideas and concepts related to continuous improvement of source code. In this context, in this degree monograph, we highlight the importance of conducting ongoing activities related to design and security throughout the software project, as well as discuss the importance of using static source code metrics to support decision making at managerial level and technical as well. In this regard, we present the concept of Decisions Scenarios that define an abstraction for metrics choice and interpretation, as well as proposals of examples to use scenarios for measuring software security. To support the use of scenarios and metrics in software development, this work also includes a collaboration for the evolution of a source code monitoring platform called Mezuro and building a datawarehousing solution

    Memoization para Poupar Energia em Aplicações Android

    Get PDF
    Ao longo dos últimos anos, o interesse na análise do consumo de energia em aplicações Android tem vindo a aumentar significativamente. Na verdade, há um número considerável de estudos que visam analisar o consumo de energia de várias maneiras, como medir/estimar a energia consumida por uma aplicação ou bloco de código, detectar padrões de código energeticamente dispendiosos, chamadas a APIs e perceber quais os componentes de hardware que mais energia consomem. No entanto, quando se trata de melhorar a eficiência energética de uma aplicação enfrentamos um novo desafio, que pode ser alcançado através de melhorias no código fonte, aproveitando técnicas de poupança de energia. Contudo, existe alguma escassez de informação sobre tais técnicas e o seu impacto no consumo de energia. Com esta dissertação, analisamos o impacto da técnica de memoization no consumo de energia em aplicações Android. Apresentamos um estudo sistemático sobre o uso de memoization, onde comparamos as implementações de 18 métodos de diferentes aplicações, com e sem uso de memoization. Neste estudo, mostramos os resultados para 3 métricas: energia, tempo de execução e memória gasta para ambos as versões. Utilizando essa abordagem, foi-nos possível caracterizar os métodos como sendo propícios, imprevisíveis ou impróprios à técnica de memoization. Os nossos resultados mostram que utilizar memoization pode ser claramente uma boa abordagem para poupar energia. Além disso, também descobrimos que o tempo de execução melhora, assim como a própria memória consumida. Para os 18 métodos testados, 13 melhoraram em todas as métricas de estudo. Embora a relação entre energia e tempo seja conhecida, neste trabalho descobrimos também que existe uma forte relação entre energia e memória consumida. De facto, um menor consumo de memória (induzido pela técnica de memoization) implica também um menor consumo de energia

    Sistema ciber-físico para deteção de colisões

    Get PDF
    Dissertação de mestrado em Engenharia Eletrónica Industrial e ComputadoresO número de acidentes rodoviários em Portugal têm vindo a diminuir desde o início do século XXI, apesar do ligeiro aumento dos últimos anos. Anualmente, nas autoestradas verifica-se a ocorrência de cerca 2000 acidentes com vítimas mortais e feridos. Para detetar acidentes neste tipo de vias são utilizados sistemas de captação de imagens, enviadas para um operador, que as analisará. Atualmente já existem sistemas capazes de processar essas imagens e automaticamente informar as entidades responsáveis. As Wireless Sensor Networks (WSNs) são redes que incorporam, essencialmente, um coordenador e vários nós sensores. A informação obtida pelos nós sensores é enviada para o coordenador, reencaminhada para um gateway e colocada numa plataforma online. Assim sendo, as WSNs também podem ser utilizadas para detetar acidentes nas autoestradas. Na ocorrência de um acidente, estas avisam um operador, e desta forma serem tomadas as devidas medidas de emergência. Tendo isto em mente, o que se propõe nesta dissertação é o refactoring de um sistema de deteção de colisões com as guardas de segurança das autoestradas. Esta solução consiste na adaptação de uma rede de sensores sem fios, de forma a utlizar o protocolo 6LowPAN. Os diversos nós sensores estarão dispostos ao longo da guarda de segurança, cada um equipado com um acelerómetro, comunicando diretamente com o coordenador. O sistema a implementar já tem um protótipo funcional integrado num projeto denominado SustIMS. Numa revisão posterior, este sistema foi submetido a uma modificação do microcontrolador. O objetivo desta dissertação consiste em alterar o sistema operativo, mantendo o mesmo system-on-chip. Com a utilização do Contiki, pretende-se fazer um refactoring do projeto já implementado, pois este sistema operativo utiliza IPv6 nas comunicações entre os vários dispositivos.The number of road accidents in Portugal has been declining, since the beginning of the 21st century, despite the slight increase in recent years. On the highways occurred around 2000 accidents with fatalities and injuries per year. In order to detect accidents on the highways, images from video cameras are sent to an operator who will analyze them. Currently, there are systems capable of processing these images and automatically inform the responsible entities. Wireless Sensor Networks (WSNs) are networks that essentially have a coordinator and several sensor nodes. The information obtained by the sensor nodes is sent to the coordinator, forwarded to a gateway and placed on a online platform. Therefore, a WSN can also be used to detect accidents on highways. When an accident occurs, they notify an operator to take the necessary emergency measures. With this in mind, what is proposed in this master thesis is the refatoring of a collisions detection system with the security guards of highways. This solution consists on the adaption of a wireless sensor network, in order to use the 6LoWPAN protocol. The sensor nodes will be placed along the security guard, each equipped with an accelerometer, communicating directly with the coordinator. The implemented system already has a functional prototype, integrated into a project called SustIMS. In a later review, this system had a modification on the microcontroller. The purpose of this dissertation is changing the operating system, but keeping the same system-on-chip. Therefore, with the use of Contiki, the goal is to make the refactoring of the already implemented project. The main advantage of this operating system resides in the use of IPv6 in communications between the devices

    Análise do impacto na compreensão de programas Java com a introdução de expressões lambda

    Get PDF
    Dissertação (mestrado)—Universidade de Brasília, Instituto de Ciências Exatas, Departamento de Ciência da Computação, 2019.As expressões lambda foram introduzidas na linguagem Java com o intuito de facilitar o estilo de programação funcional e com o passar do tempo o número de desenvolvedores que utilizam os novos recursos vêm crescendo. Trabalhos recentes sem o uso de avaliações rigorosas sugerem que a adoção de expressões lambda leva a um ganho direto na legibilidade de código. Todavia, existem alguns fatores impeditivos para a aplicação de ferramentas de transformação, o que incluem sugestões inadequadas que não levam a resultados satisfatórios. Esta pesquisa teve como objetivo realizar uma investigação empírica para avaliar se a adoção de expressões lambda ocasiona melhorias na compreensão do programa, um dos benefícios esperados pelo uso da nova construção em Java e em quais situações deve ser aplicada. Foi realizado um estudo de métodos mistos, no qual foi elaborado um survey, para captar a percepção dos desenvolvedores em relação ao impacto na legibilidade de trechos de código com a adoção de expressões lambda, e foram realizados cálculos de métricas extraídas diretamente do código fonte, com o intuito de comparar a interpretação dos dados extraídos do survey. O estudo empírico realizado mostra cenários onde os desenvolvedores percebem uma melhora na compreensão do código e cenários onde a transformação não ocasiona melhorias. Acredita-se que através desses resultados os desenvolvedores de bibliotecas de refatoração poderão melhorar suas ferramentas. Além de melhorias a legibilidade foi possível inferir que adoção de expressões lambda podem reduzir a complexidade e o tamanho dos programas.Lambda expressions were introduced in the Java language in order to facilitate the functional programming style and with the passage of time the number of developers using the new features has been growing. Recent works without the use of rigorous evaluations suggest that the adoption of lambda expressions leads to a direct gain in code readability. However, there are some hindering factors for the application of transformation tools, which include inadequate suggestions that do not lead to satisfactory results. The aim of this research was to evaluate whether the adoption of lambda expressions leads to improvements in the understanding of the program, one of the benefits expected from the use of the new Java construct and in which situations it should be applied. A study of mixed methods was carried out, in which a survey was elaborated to capture the perception of the developers in relation to the impact on the readability of code snippets with the adoption of lambda expressions, and calculations were made of metrics extracted directly from the source code, with the purpose of comparing the interpretation of the data extracted from the survey. The empirical study shows scenarios where developers perceive an improvement in code comprehension and scenarios where transformation does not lead to improvements. It is believed that through these results, developers of refactoring libraries will be able to improve their tools. In addition to readability improvements it was possible to infer that adopting lambda expressions can reduce the complexity and size of programs

    Um mapeamento sistemático de métricas para metodologias ágeis Scrum, Kanban e XP

    Get PDF
    Monografia (graduação)—Universidade de Brasília, Faculdade UnB Gama, Curso de Engenharia de Software, 2013.A adoção de métodos ágeis vem crescendo nos últimos anos, em especial no governo brasileiro observa-se principalmente a adoção das metodologias ágeis Scrum, Kanban e Extreme Programming. Com base neste contexto, foi realizado um mapeamento sistemático com o objetivo de investigar quais métricas podem ser utilizadas. As métricas encontradas foram apresentadas usando o modelo de definição de métricas da ISO/IEC 9126 e foram, também, organizadas considerando as classes que seguem a definição de Categorias de Informação do Practical Software Measurement. Além disso, um exemplo de detalhamento de métricas é apresentado mostrando como elas poderiam ser utilizadas em um contexto real. Como trabalho futuro foi identificado a possibilidade de realização de trabalhos que busquem métricas para outras metodologias, por exemplo Feature Driven Development ou Família Crystal; Além de trabalhos que busquem mais informações para as métricas encontradas. _________________________________________________________________________ ABSTRACTThe adoption of agile methods has been growing in recent years. The Brazilian government mainly uses the agile methodologies Scrum, Kanban and Extremme Programing. Based on this context, it was performed a systematic mapping in order to investigate what metrics are used for those methodologies. The found metrics were presented using the metrics model from ISO / IEC 9126 and were also organized in classes, which follows the definition of information categories from the Practical Software Measurement. It is also presented an example of detailed metrics to show how they would be used in a real context. As future work it is possibility to conduct studies that seek metrics to other methodologies, such as Feature Driven Development or Crystal Family. It is also possible to perform studies, which seek more information about the found metrics
    corecore