951 resultados para Code Comprehension
Clean Code vs Dirty Code : Ett fältexperiment för att förklara hur Clean Code påverkar kodförståelse
Resumo:
Stora och komplexa kodbaser med bristfällig kodförståelse är ett problem som blir allt vanligare bland företag idag. Bristfällig kodförståelse resulterar i längre tidsåtgång vid underhåll och modifiering av koden, vilket för ett företag leder till ökade kostnader. Clean Code anses enligt somliga vara lösningen på detta problem. Clean Code är en samling riktlinjer och principer för hur man skriver kod som är enkel att förstå och underhålla. Ett kunskapsglapp identifierades vad gäller empirisk data som undersöker Clean Codes påverkan på kodförståelse. Studiens frågeställning var: Hur påverkas förståelsen vid modifiering av kod som är refaktoriserad enligt Clean Code principerna för namngivning och att skriva funktioner? För att undersöka hur Clean Code påverkar kodförståelsen utfördes ett fältexperiment tillsammans med företaget CGM Lab Scandinavia i Borlänge, där data om tidsåtgång och upplevd förståelse hos testdeltagare samlades in och analyserades. Studiens resultat visar ingen tydlig förbättring eller försämring av kodförståelsen då endast den upplevda kodförståelsen verkar påverkas. Alla testdeltagare föredrar Clean Code framför Dirty Code även om tidsåtgången inte påverkas. Detta leder fram till slutsatsen att Clean Codes effekter kanske inte är omedelbara då utvecklare inte hunnit anpassa sig till Clean Code, och därför inte kan utnyttja det till fullo. Studien ger en fingervisning om Clean Codes potential att förbättra kodförståelsen.
Resumo:
Polymorphism, along with inheritance, is one of the most important features in object-oriented languages, but it is also one of the biggest obstacles to source code comprehension. Depending on the run-time type of the receiver of a message, any one of a number of possible methods may be invoked. Several algorithms for creating accurate call-graphs using static analysis already exist, however, they consume significant time and memory resources. We propose an approach that will combine static and dynamic analysis and yield the best possible precision with a minimal trade-off between used resources and accuracy.
Resumo:
Les antipatrons sont de “mauvaises” solutions à des problèmes récurrents de conception logicielle. Leur apparition est soit due à de mauvais choix lors de la phase de conception soit à des altérations et des changements continus durant l’implantation des programmes. Dans la littérature, il est généralement admis que les antipatrons rendent la compréhension des programmes plus difficile. Cependant, peu d’études empiriques ont été menées pour vérifier l’impact des antipatrons sur la compréhension. Dans le cadre de ce travail de maîtrise, nous avons conçu et mené trois expériences, avec 24 sujets chacune, dans le but de recueillir des données sur la performance des sujets lors de tâches de compréhension et d’évaluer l’impact de l’existence de deux antipatrons, Blob et Spaghetti Code, et de leurs combinaisons sur la compréhension des programmes. Nous avons mesuré les performances des sujets en terme : (1) du TLX (NASA task load index) pour l’éffort ; (2) du temps consacré à l’exécution des tâches ; et, (3) de leurs pourcentages de réponses correctes. Les données recueillies montrent que la présence d’un antipatron ne diminue pas sensiblement la performance des sujets alors que la combinaison de deux antipatrons les entrave de façon significative. Nous concluons que les développeurs peuvent faire face à un seul antipatron, alors que la combinaison de plusieurs antipatrons devrait être évitée, éventuellement par le biais de détection et de réusinage.
Resumo:
Nous proposons une approche basée sur la formulation interactive des requêtes. Notre approche sert à faciliter des tâches d’analyse et de compréhension du code source. Dans cette approche, l’analyste utilise un ensemble de filtres de base (linguistique, structurel, quantitatif, et filtre d’interactivité) pour définir des requêtes complexes. Ces requêtes sont construites à l’aide d’un processus interactif et itératif, où des filtres de base sont choisis et exécutés, et leurs résultats sont visualisés, changés et combinés en utilisant des opérateurs prédéfinis. Nous avons évalués notre approche par l’implantation des récentes contributions en détection de défauts de conception ainsi que la localisation de fonctionnalités dans le code. Nos résultats montrent que, en plus d’être générique, notre approche aide à la mise en œuvre des solutions existantes implémentées par des outils automatiques.
Resumo:
Les logiciels sont de plus en plus complexes et leur développement est souvent fait par des équipes dispersées et changeantes. Par ailleurs, de nos jours, la majorité des logiciels sont recyclés au lieu d’être développés à partir de zéro. La tâche de compréhension, inhérente aux tâches de maintenance, consiste à analyser plusieurs dimensions du logiciel en parallèle. La dimension temps intervient à deux niveaux dans le logiciel : il change durant son évolution et durant son exécution. Ces changements prennent un sens particulier quand ils sont analysés avec d’autres dimensions du logiciel. L’analyse de données multidimensionnelles est un problème difficile à résoudre. Cependant, certaines méthodes permettent de contourner cette difficulté. Ainsi, les approches semi-automatiques, comme la visualisation du logiciel, permettent à l’usager d’intervenir durant l’analyse pour explorer et guider la recherche d’informations. Dans une première étape de la thèse, nous appliquons des techniques de visualisation pour mieux comprendre la dynamique des logiciels pendant l’évolution et l’exécution. Les changements dans le temps sont représentés par des heat maps. Ainsi, nous utilisons la même représentation graphique pour visualiser les changements pendant l’évolution et ceux pendant l’exécution. Une autre catégorie d’approches, qui permettent de comprendre certains aspects dynamiques du logiciel, concerne l’utilisation d’heuristiques. Dans une seconde étape de la thèse, nous nous intéressons à l’identification des phases pendant l’évolution ou pendant l’exécution en utilisant la même approche. Dans ce contexte, la prémisse est qu’il existe une cohérence inhérente dans les évènements, qui permet d’isoler des sous-ensembles comme des phases. Cette hypothèse de cohérence est ensuite définie spécifiquement pour les évènements de changements de code (évolution) ou de changements d’état (exécution). L’objectif de la thèse est d’étudier l’unification de ces deux dimensions du temps que sont l’évolution et l’exécution. Ceci s’inscrit dans notre volonté de rapprocher les deux domaines de recherche qui s’intéressent à une même catégorie de problèmes, mais selon deux perspectives différentes.
Resumo:
Code profiling is an essential activity to increase software quality. It is commonly employed in a wide variety of tasks, such as supporting program comprehension, determining execution bottlenecks, and assessing code coverage by unit tests. Spy is an innovative framework to easily build profilers and visualize profiling information. The profiling information is obtained by inserting dedicated code before or after method execution. The gathered profiling information is structured in line with the application structure in terms of packages, classes, and methods. Spy has been instantiated on four occasions so far. We created profilers dedicated to test coverage, time execution, type feedback, and profiling evolution across version. We also integrated Spy in the Pharo IDE. Spy has been implemented in the Pharo Smalltalk programming language and is available under the MIT license.
Resumo:
Industrial software systems are large and complex, both in terms of the software entities and their relationships. Consequently, understanding how a software system works requires the ability to pose queries over the design-level entities of the system. Traditionally, this task has been supported by simple tools (e.g., grep) combined with the programmer's intuition and experience. Recently, however, specialized code query technologies have matured to the point where they can be used in industrial situations, providing more intelligent, timely, and efficient responses to developer queries. This working session aims to explore the state of the art in code query technologies, and discover new ways in which these technologies may be useful in program comprehension. The session brings together researchers and practitioners. We survey existing techniques and applications, trying to understand the strengths and weaknesses of the various approaches, and sketch out new frontiers that hold promise.
Resumo:
A solar cell is a solid state device that converts the energy of sunlight directly into electricity by the photovoltaic effect. When light with photon energies greater than the band gap is absorbed by a semiconductor material, free electrons and free holes are generated by optical excitation in the material. The main characteristic of a photovoltaic device is the presence of internal electric field able to separate the free electrons and holes so they can pass out of the material to the external circuit before they recombine. Numerical simulation of photovoltaic devices plays a crucial role in their design, performance prediction, and comprehension of the fundamental phenomena ruling their operation. The electrical transport and the optical behavior of the solar cells discussed in this work were studied with the simulation code D-AMPS-1D. This software is an updated version of the one-dimensional (1D) simulation program Analysis of Microelectronic and Photonic Devices (AMPS) that was initially developed at The Penn State University, USA. Structures such as homojunctions, heterojunctions, multijunctions, etc., resulting from stacking layers of different materials can be studied by appropriately selecting characteristic parameters. In this work, examples of cells simulation made with D-AMPS-1D are shown. Particularly, results of Ge photovoltaic devices are presented. The role of the InGaP buffer on the device was studied. Moreover, a comparison of the simulated electrical parameters with experimental results was performed.
Resumo:
Federal Highway Administration, Washington, D.C.
Resumo:
Since 1996 all consumer credit transactions in Australia have been regulated by the Consumer Credit Code. The principal means by which the Code purports to protect consumers and prevent market failure is a detailed and prescriptive disclosure regime. There has been little empirical work done on whether or not such disclosure actually improves consumers’ understanding of their credit contracts. By exposing participants to typical consumer credit documents, this research discovered quite poor comprehension of important features of the relevant transactions. Most significantly, there appeared to be little difference in comprehension when the consumers read contracts which complied with the disclosure requirements of the Code, and when they read contracts which did not. These results cast doubt on the effectiveness of the Code disclosure regime.
Resumo:
Background: Written material is often inaccessible fro people with aphasia. The format of written material needs to be adapted to enable people with aphasia to read with understanding. Aims: This study aimed to further explore some issues raised in Rose, Worrall, and MacKenna (2003) concerning the effects of aphasia-friendly formats on the reading comprehension of people with aphasia. It was hypothesised that people with aphasia would comprehend significantly more paragraphs that were formatted in an aphasia-friendly manner than control paragraphs. This study also aimed to investigate if each single aspect of aphasia-friendly formatting (i.e., simplified vocabulary and syntax, large print, increased white spacem and pictures) used in isolation would result in increased comprehension compared to control paragraphs. Other aims were to compare the effect of aphasia-friendly fromatting with the effects of each single adaptation, and to investigate if the effects of aphasia-friendly formates were related to aphasia severity. Methods & Procedures: Participants with mild to moderately severe aphasia (N = 9) read a battery of 90 paragraphs and selected the best word of phrase from a choice of four to complete each paragraph. A linear mixed model (p < .05) was used to analyse the differences in reading comprehension with each paragraph fromat across three reading grade levels. Outcomes & Results: People with aphasia comprehended significantly more aphasia-friendly paragraphs than control paragraphs. They also comprehended significantly more paragraphs with each of the following single adaptations: simplified vocabulary and syntax, large ptint, and increased white spaces. Although people with aphasia tended to comprehend more paragraphs with pictures added than control paragraphs, this difference was not significant. No significant correlation between aphasia severity and the effect of aphasia-friendly formatting was found. Conclusion: This study supports the idea that aphasia-friendly formats increase the reading comprehension of people with aphasia. It suggests that adding pictures, particularly Clip Art pictures, may not significantly improve the reading the reading comprehension of people with aphasia. These findings have implications for all written communication with people with aphasia, both in the clinical setting and in the wider community. Applying these findings may enable people with aphasia to have equal access to written information and to participate in society.