25 research outputs found

    Towards Improving the Code Lexicon and its Consistency

    Get PDF
    RÉSUMÉ La comprĂ©hension des programmes est une activitĂ© clĂ© au cours du dĂ©veloppement et de la maintenance des logiciels. Bien que ce soit une activitĂ© frĂ©quente—mĂȘme plus frĂ©- quente que l’écriture de code—la comprĂ©hension des programmes est une activitĂ© difficile et la difficultĂ© augmente avec la taille et la complexitĂ© des programmes. Le plus souvent, les mesures structurelles—telles que la taille et la complexité—sont utilisĂ©es pour identifier ces programmes complexes et sujets aux bogues. Cependant, nous savons que l’information linguistique contenue dans les identifiants et les commentaires—c’est-Ă -dire le lexique du code source—font partie des facteurs qui influent la complexitĂ© psychologique des programmes, c’est-Ă -dire les facteurs qui rendent les programmes difficiles Ă  comprendre et Ă  maintenir par des humains. Dans cette thĂšse, nous apportons la preuve que les mesures Ă©valuant la qualitĂ© du lexique du code source sont un atout pour l’explication et la prĂ©diction des bogues. En outre, la qualitĂ© des identifiants et des commentaires peut ne pas ĂȘtre suffisante pour rĂ©vĂ©ler les bogues si on les considĂšre en isolation—dans sa thĂ©orie sur la comprĂ©hension de programmes par exemple, Brooks avertit qu’il peut arriver que les commentaires et le code soient en contradiction. C’est pourquoi nous adressons le problĂšme de la contradiction et, plus gĂ©nĂ©ralement, d’incompatibilitĂ© du lexique en dĂ©finissant un catalogue d’Antipatrons Linguistiques (LAs), que nous dĂ©finissons comme des mauvaises pratiques dans le choix des identifiants rĂ©sultant en incohĂ©rences entre le nom, l’implĂ©mentation et la documentation d’une entitĂ© de programmation. Nous Ă©valuons empiriquement les LAs par des dĂ©veloppeurs de code propriĂ©taire et libre et montrons que la majoritĂ© des dĂ©veloppeurs les perçoivent comme mauvaises pratiques et par consĂ©quent elles doivent ĂȘtre Ă©vitĂ©es. Nous distillons aussi un sous-ensemble de LAs canoniques que les dĂ©veloppeurs perçoivent particuliĂšrement inacceptables ou pour lesquelles ils ont entrepris des actions. En effet, nous avons dĂ©couvert que 10% des exemples contenant les LAs ont Ă©tĂ© supprimĂ©s par les dĂ©veloppeurs aprĂšs que nous les leur ayons prĂ©sentĂ©s. Les explications des dĂ©veloppeurs et la forte proportion de LAs qui n’ont pas encore Ă©tĂ© rĂ©solus suggĂšrent qu’il peut y avoir d’autres facteurs qui influent sur la dĂ©cision d’éliminer les LAs, qui est d’ailleurs souvent fait par le moyen de renommage. Ainsi, nous menons une enquĂȘte auprĂšs des dĂ©veloppeurs et montrons que plusieurs facteurs peuvent empĂȘcher les dĂ©veloppeurs de renommer. Ces rĂ©sultats suggĂšrent qu’il serait plus avantageux de souligner les LAs et autres mauvaises pratiques lexicales quand les dĂ©veloppeurs Ă©crivent du code source—par exemple en utilisant notre plugin LAPD Checkstyle dĂ©tectant des LAs—de sorte que l’amĂ©lioration puisse se faire sur la volĂ©e et sans impacter le reste du code.----------ABSTRACT Program comprehension is a key activity during software development and maintenance. Although frequently performed—even more often than actually writing code—program comprehension is a challenging activity. The difficulty to understand a program increases with its size and complexity and as a result the comprehension of complex programs, in the best- case scenario, more time consuming when compared to simple ones but it can also lead to introducing faults in the program. Hence, structural properties such as size and complexity are often used to identify complex and fault prone programs. However, from early theories studying developers’ behavior while understanding a program, we know that the textual in- formation contained in identifiers and comments—i.e., the source code lexicon—is part of the factors that affect the psychological complexity of a program, i.e., factors that make a program difficult to understand and maintain by humans. In this dissertation we provide evidence that metrics evaluating the quality of source code lexicon are an asset for software fault explanation and prediction. Moreover, the quality of identifiers and comments considered in isolation may not be sufficient to reveal flaws—in his theory about the program understanding process for example, Brooks warns that it may happen that comments and code are contradictory. Consequently, we address the problem of contradictory, and more generally of inconsistent, lexicon by defining a catalog of Linguistic Antipatterns (LAs), i.e., poor practices in the choice of identifiers resulting in inconsistencies among the name, implementation, and documentation of a programming entity. Then, we empirically evaluate the relevance of LAs—i.e., how important they are—to industrial and open-source developers. Overall, results indicate that the majority of the developers perceives LAs as poor practices and therefore must be avoided. We also distill a subset of canonical LAs that developers found particularly unacceptable or for which they undertook an action. In fact, we discovered that 10% of the examples containing LAs were removed by developers after we pointed them out. Developers’ explanations and the large proportion of yet unresolved LAs suggest that there may be other factors that impact the decision of removing LAs, which is often done through renaming. We conduct a survey with developers and show that renaming is not a straightforward activity and that there are several factors preventing developers from renaming. These results suggest that it would be more beneficial to highlight LAs and other lexicon bad smells as developers write source code—e.g., using our LAPD Checkstyle plugin detecting LAs—so that the improvement can be done on-the-fly without impacting other program entities

    Model-based risk assessment

    Get PDF
    In this research effort, we focus on model-based risk assessment. Risk assessment is essential in any plan intended to manage software development or maintenance process. Subjective techniques are human intensive and error-prone. Risk assessment should be based on architectural attributes that we can quantitatively measure using architectural level metrics. Software architectures are emerging as an important concept in the study and practice of software engineering nowadays, due to their emphasis on large-scale composition of software product, and to their support for emerging software engineering paradigms, such as product line engineering, component based software engineering, and software evolution.;In this dissertation, we generalize our earlier work on reliability-based risk assessment. We introduce error propagation probability in the assessment methodology to account for the dependency among the system components. Also, we generalize the reliability-based risk assessment to account for inherent functional dependencies.;Furthermore, we develop a generic framework for maintainability-based risk assessment which can accommodate different types of software maintenance. First, we introduce and define maintainability-based risk assessment for software architecture. Within our assessment framework, we investigate the maintainability-based risk for the components of the system, and the effect of performing the maintenance tasks on these components. We propose a methodology for estimating the maintainability-based risk when considering different types of maintenance. As a proof of concept, we apply the proposed methodology on several case studies. Moreover, we automate the estimation of the maintainability-based risk assessment methodology

    A Multi-Level Framework for the Detection, Prioritization and Testing of Software Design Defects

    Full text link
    Large-scale software systems exhibit high complexity and become difficult to maintain. In fact, it has been reported that software cost dedicated to maintenance and evolution activities is more than 80% of the total software costs. In particular, object-oriented software systems need to follow some traditional design principles such as data abstraction, encapsulation, and modularity. However, some of these non-functional requirements can be violated by developers for many reasons such as inexperience with object-oriented design principles, deadline stress. This high cost of maintenance activities could potentially be greatly reduced by providing automatic or semi-automatic solutions to increase system‟s comprehensibility, adaptability and extensibility to avoid bad-practices. The detection of refactoring opportunities focuses on the detection of bad smells, also called antipatterns, which have been recognized as the design situations that may cause software failures indirectly. The correction of one bad smell may influence other bad smells. Thus, the order of fixing bad smells is important to reduce the effort and maximize the refactoring benefits. However, very few studies addressed the problem of finding the optimal sequence in which the refactoring opportunities, such as bad smells, should be ordered. Few other studies tried to prioritize refactoring opportunities based on the types of bad smells to determine their severity. However, the correction of severe bad smells may require a high effort which should be optimized and the relationships between the different bad smells are not considered during the prioritization process. The main goal of this research is to help software engineers to refactor large-scale systems with a minimum effort and few interactions including the detection, management and testing of refactoring opportunities. We report the results of an empirical study with an implementation of our bi-level approach. The obtained results provide evidence to support the claim that our proposal is more efficient, on average, than existing techniques based on a benchmark of 9 open source systems and 1 industrial project. We have also evaluated the relevance and usefulness of the proposed bi-level framework for software engineers to improve the quality of their systems and support the detection of transformation errors by generating efficient test cases.Ph.D.Information Systems Engineering, College of Engineering and Computer ScienceUniversity of Michigan-Dearbornhttp://deepblue.lib.umich.edu/bitstream/2027.42/136075/1/Dilan_Sahin_Final Dissertation.pdfDescription of Dilan_Sahin_Final Dissertation.pdf : Dissertatio

    SchĂ€tzwerterfĂŒllung in Softwareentwicklungsprojekten

    Get PDF
    Effort estimates are of utmost economic importance in software development projects. Estimates bridge the gap between managers and the invisible and almost artistic domain of developers. They give a means to managers to track and control projects. Consequently, numerous estimation approaches have been developed over the past decades, starting with Allan Albrecht's Function Point Analysis in the late 1970s. However, this work neither tries to develop just another estimation approach, nor focuses on improving accuracy of existing techniques. Instead of characterizing software development as a technological problem, this work understands software development as a sociological challenge. Consequently, this work focuses on the question, what happens when developers are confronted with estimates representing the major instrument of management control? Do estimates influence developers, or are they unaffected? Is it irrational to expect that developers start to communicate and discuss estimates, conform to them, work strategically, hide progress or delay? This study shows that it is inappropriate to assume an independency of estimated and actual development effort. A theory is developed and tested, that explains how developers and managers influence the relationship between estimated and actual development effort. The theory therefore elaborates the phenomenon of estimation fulfillment.SchĂ€tzwerte in Softwareentwicklungsprojekten sind von besonderer ökonomischer Wichtigkeit. Sie ĂŒberbrĂŒcken die LĂŒcke zwischen Projektleitern und der unsichtbaren und beinahe kĂŒnstlerischen DomĂ€ne der Entwickler. Sie stellen ein Instrument dar, welches erlaubt, Projekte zu verfolgen und zu kontrollieren. Daher wurden in den vergangenen vier Jahrzehnten diverse SchĂ€tzverfahren entwickelt, beginnend mit der "Function Point" Analyse von Allan Albrecht. Diese Arbeit versucht allerdings weder ein neues SchĂ€tzverfahren zu entwickeln noch bestehende Verfahren zu verbessern. Anstatt Softwareentwicklung als technologisches Problem zu charakterisieren, wird in dieser Arbeit eine soziologische Perspektive genutzt. Dementsprechend fokussiert diese Arbeit die Frage, was passiert, wenn Entwickler mit SchĂ€tzwerten konfrontiert werden, die das wichtigste Kontrollinstrument des Managements darstellen? Lassen sich Entwickler von diesen Werten beeinflussen oder bleiben sie davon unberĂŒhrt? WĂ€re es irrational, zu erwarten, dass Entwickler SchĂ€tzwerte kommunizieren, diese diskutieren, sich diesen anpassen, strategisch arbeiten sowie Verzögerungen verschleiern? Die vorliegende Studie zeigt, dass die UnabhĂ€ngigkeitsannahme von SchĂ€tzwerten und tatsĂ€chlichem Entwicklungsaufwand unbegrĂŒndet ist. Es wird eine Theorie entwickelt, welche erklĂ€rt, wie Entwickler und Projektleiter die Beziehung von SchĂ€tzungen und Aufwand beeinflussen und dass das PhĂ€nomen der SchĂ€tzwerterfĂŒllung auftreten kann

    ICSEA 2021: the sixteenth international conference on software engineering advances

    Get PDF
    The Sixteenth International Conference on Software Engineering Advances (ICSEA 2021), held on October 3 - 7, 2021 in Barcelona, Spain, continued a series of events covering a broad spectrum of software-related topics. The conference covered fundamentals on designing, implementing, testing, validating and maintaining various kinds of software. The tracks treated the topics from theory to practice, in terms of methodologies, design, implementation, testing, use cases, tools, and lessons learnt. The conference topics covered classical and advanced methodologies, open source, agile software, as well as software deployment and software economics and education. The conference had the following tracks: Advances in fundamentals for software development Advanced mechanisms for software development Advanced design tools for developing software Software engineering for service computing (SOA and Cloud) Advanced facilities for accessing software Software performance Software security, privacy, safeness Advances in software testing Specialized software advanced applications Web Accessibility Open source software Agile and Lean approaches in software engineering Software deployment and maintenance Software engineering techniques, metrics, and formalisms Software economics, adoption, and education Business technology Improving productivity in research on software engineering Trends and achievements Similar to the previous edition, this event continued to be very competitive in its selection process and very well perceived by the international software engineering community. As such, it is attracting excellent contributions and active participation from all over the world. We were very pleased to receive a large amount of top quality contributions. We take here the opportunity to warmly thank all the members of the ICSEA 2021 technical program committee as well as the numerous reviewers. The creation of such a broad and high quality conference program would not have been possible without their involvement. We also kindly thank all the authors that dedicated much of their time and efforts to contribute to the ICSEA 2021. We truly believe that thanks to all these efforts, the final conference program consists of top quality contributions. This event could also not have been a reality without the support of many individuals, organizations and sponsors. We also gratefully thank the members of the ICSEA 2021 organizing committee for their help in handling the logistics and for their work that is making this professional meeting a success. We hope the ICSEA 2021 was a successful international forum for the exchange of ideas and results between academia and industry and to promote further progress in software engineering research

    Une approche pragmatique pour mesurer la qualité des applications à base de composants logiciels

    Get PDF
    Over the past decade, many companies proceeded with the introduction of component-oriented software technology in their development environments. The component paradigm that promotes the assembly of autonomous and reusable software bricks is indeed an interesting proposal to reduce development costs and maintenance while improving application quality. In this paradigm, as in all others, architects and developers need to evaluate as soon as possible the quality of what they produce, especially along the process of designing and coding. The code metrics are indispensable tools to do this. They provide, to a certain extent, the prediction of the quality of « external » component or architecture being encoded. Several proposals for metrics have been made in the literature especially for the component world. Unfortunately, none of the proposed metrics have been a serious study regarding their completeness, cohesion and especially for their ability to predict the external quality of developed artifacts. Even worse, the lack of support for these metrics with the code analysis tools in the market makes it impossible to be used in the industry. In this state, the prediction in a quantitative way and « a priori » the quality of their developments is impossible. The risk is therefore high for obtaining higher costs as a consequence of the late discovery of defects. In the context of this thesis, I propose a pragmatic solution to the problem. Based on the premise that much of the industrial frameworks are based on object-oriented technology, I have studied the possibility of using some « conventional » code metrics unpopular to component world, to evaluate component-based applications. Indeed, these metrics have the advantage of being well defined, known, equipped and especially to have been the subject of numerous empirical validations analyzing the predictive power for imperatives or objects codes. Among the existing metrics, I identified a subset of them which, by interpreting and applying to specific levels of granularity, can potentially provide guidance on the compliance of developers and architects of large principles of software engineering, particularly on the coupling and cohesion. These two principles are in fact the very source of the component paradigm. This subset has the ability to represent all aspects of a component-oriented application : internal view of a component, its interface and compositional view through architecture. This suite of metrics, identified by hand, was then applied to 10 open-source OSGi applications, in order to ensure, by studying of their distribution, that it effectively conveyed relevant information to the component world. I then built predictive models of external quality properties based on these internal metrics : reusability, failure, etc. The development of such models and the analysis of their power are only able to empirically validate the interest of the proposed metrics. It is also possible to compare the « power » of these models with other models from the literature specific to imperative and/or object world. I decided to build models that predict the existence and frequency of defects and bugs. To do this, I relied on external data from the history of changes and fixes a panel of 6 large mature OSGi projects (with a maintenance period of several years). Several statistical tools were used to build models, including principal component analysis and multivariate logistic regression. This study showed that it is possible to predict with these models 80% to 92% of frequently buggy components with reminders ranging from 89% to 98%, according to the evaluated projects. Models for predicting the existence of a defect are less reliable than the first type of model. This thesis confirms thus the interesting « practice » of using common and well equipped metrics to measure at the earliest application quality in the component world.Ces derniĂšres annĂ©es, de nombreuses entreprises ont introduit la technologie orientĂ©e composant dans leurs dĂ©veloppements logiciels. Le paradigme composant, qui prĂŽne l’assemblage de briques logiciels autonomes et rĂ©utilisables, est en effet une proposition intĂ©ressante pour diminuer les coĂ»ts de dĂ©veloppement et de maintenance tout en augmentant la qualitĂ© des applications. Dans ce paradigme, comme dans tous les autres, les architectes et les dĂ©veloppeurs doivent pouvoir Ă©valuer au plus tĂŽt la qualitĂ© de ce qu’ils produisent, en particulier tout au long du processus de conception et de codage. Les mĂ©triques sur le code sont des outils indispensables pour ce faire. Elles permettent, dans une certaine mesure, de prĂ©dire la qualitĂ© « externe » d’un composant ou d’une architecture en cours de codage. Diverses propositions de mĂ©triques ont Ă©tĂ© faites dans la littĂ©rature spĂ©cifiquement pour le monde composant. Malheureusement, aucune des mĂ©triques proposĂ©es n’a fait l’objet d’une Ă©tude sĂ©rieuse quant Ă  leur complĂ©tude, leur cohĂ©sion et surtout quant Ă  leur aptitude Ă  prĂ©dire la qualitĂ© externe des artefacts dĂ©veloppĂ©s. Pire encore, l’absence de prise en charge de ces mĂ©triques par les outils d’analyse de code du marchĂ© rend impossible leur usage industriel. En l’état, la prĂ©diction de maniĂšre quantitative et « a priori » de la qualitĂ© de leurs dĂ©veloppements est impossible. Le risque est donc important d’une augmentation des coĂ»ts consĂ©cutive Ă  la dĂ©couverte tardive de dĂ©fauts. Dans le cadre de cette thĂšse, je propose une rĂ©ponse pragmatique Ă  ce problĂšme. Partant du constat qu’une grande partie des frameworks industriels reposent sur la technologie orientĂ©e objet, j’ai Ă©tudiĂ© la possibilitĂ© d’utiliser certaines des mĂ©triques de codes "classiques", non propres au monde composant, pour Ă©valuer les applications Ă  base de composants. Parmi les mĂ©triques existantes, j’ai identifiĂ© un sous-ensemble d’entre elles qui, en s’interprĂ©tant et en s’appliquant Ă  certains niveaux de granularitĂ©, peuvent potentiellement donner des indications sur le respect par les dĂ©veloppeurs et les architectes des grands principes de l’ingĂ©nierie logicielle, en particulier sur le couplage et la cohĂ©sion. Ces deux principes sont en effet Ă  l’origine mĂȘme du paradigme composant. Ce sous-ensemble devait ĂȘtre Ă©galement susceptible de reprĂ©senter toutes les facettes d’une application orientĂ©e composant : vue interne d’un composant, son interface et vue compositionnelle au travers l’architecture. Cette suite de mĂ©trique, identifiĂ©e Ă  la main, a Ă©tĂ© ensuite appliquĂ©e sur 10 applications OSGi open- source afin de s’assurer, par une Ă©tude de leur distribution, qu’elle vĂ©hiculait effectivement pour le monde composant une information pertinente. J’ai ensuite construit des modĂšles prĂ©dictifs de propriĂ©tĂ©s qualitĂ© externes partant de ces mĂ©triques internes : rĂ©utilisation, dĂ©faillance, etc. J’ai dĂ©cidĂ© de construire des modĂšles qui permettent de prĂ©dire l’existence et la frĂ©quence des dĂ©fauts et les bugs. Pour ce faire, je me suis basĂ©e sur des donnĂ©es externes provenant de l’historique des modifications et des bugs d’un panel de 6 gros projets OSGi matures (avec une pĂ©riode de maintenance de plusieurs annĂ©es). Plusieurs outils statistiques ont Ă©tĂ© mis en Ɠuvre pour la construction des modĂšles, notamment l’analyse en composantes principales et la rĂ©gression logistique multivariĂ©e. Cette Ă©tude a montrĂ© qu’il est possible de prĂ©voir avec ces modĂšles 80% Ă  92% de composants frĂ©quemment buggĂ©s avec des rappels allant de 89% Ă  98%, selon le projet Ă©valuĂ©. Les modĂšles destinĂ©s Ă  prĂ©voir l’existence d’un dĂ©faut sont moins fiables que le premier type de modĂšle. Ce travail de thĂšse confirme ainsi l’intĂ©rĂȘt « pratique » d’user de mĂ©triques communes et bien outillĂ©es pour mesurer au plus tĂŽt la qualitĂ© des applications dans le monde composant

    Modelling software quality : a multidimensional approach

    Full text link
    Les sociĂ©tĂ©s modernes dĂ©pendent de plus en plus sur les systĂšmes informatiques et ainsi, il y a de plus en plus de pression sur les Ă©quipes de dĂ©veloppement pour produire des logiciels de bonne qualitĂ©. Plusieurs compagnies utilisent des modĂšles de qualitĂ©, des suites de programmes qui analysent et Ă©valuent la qualitĂ© d'autres programmes, mais la construction de modĂšles de qualitĂ© est difficile parce qu'il existe plusieurs questions qui n'ont pas Ă©tĂ© rĂ©pondues dans la littĂ©rature. Nous avons Ă©tudiĂ© les pratiques de modĂ©lisation de la qualitĂ© auprĂšs d'une grande entreprise et avons identifiĂ© les trois dimensions oĂč une recherche additionnelle est dĂ©sirable : Le support de la subjectivitĂ© de la qualitĂ©, les techniques pour faire le suivi de la qualitĂ© lors de l'Ă©volution des logiciels, et la composition de la qualitĂ© entre diffĂ©rents niveaux d'abstraction. Concernant la subjectivitĂ©, nous avons proposĂ© l'utilisation de modĂšles bayĂ©siens parce qu'ils sont capables de traiter des donnĂ©es ambiguĂ«s. Nous avons appliquĂ© nos modĂšles au problĂšme de la dĂ©tection des dĂ©fauts de conception. Dans une Ă©tude de deux logiciels libres, nous avons trouvĂ© que notre approche est supĂ©rieure aux techniques dĂ©crites dans l'Ă©tat de l'art, qui sont basĂ©es sur des rĂšgles. Pour supporter l'Ă©volution des logiciels, nous avons considĂ©rĂ© que les scores produits par un modĂšle de qualitĂ© sont des signaux qui peuvent ĂȘtre analysĂ©s en utilisant des techniques d'exploration de donnĂ©es pour identifier des patrons d'Ă©volution de la qualitĂ©. Nous avons Ă©tudiĂ© comment les dĂ©fauts de conception apparaissent et disparaissent des logiciels. Un logiciel est typiquement conçu comme une hiĂ©rarchie de composants, mais les modĂšles de qualitĂ© ne tiennent pas compte de cette organisation. Dans la derniĂšre partie de la dissertation, nous prĂ©sentons un modĂšle de qualitĂ© Ă  deux niveaux. Ces modĂšles ont trois parties: un modĂšle au niveau du composant, un modĂšle qui Ă©value l'importance de chacun des composants, et un autre qui Ă©value la qualitĂ© d'un composĂ© en combinant la qualitĂ© de ses composants. L'approche a Ă©tĂ© testĂ©e sur la prĂ©diction de classes Ă  fort changement Ă  partir de la qualitĂ© des mĂ©thodes. Nous avons trouvĂ© que nos modĂšles Ă  deux niveaux permettent une meilleure identification des classes Ă  fort changement. Pour terminer, nous avons appliquĂ© nos modĂšles Ă  deux niveaux pour l'Ă©valuation de la navigabilitĂ© des sites web Ă  partir de la qualitĂ© des pages. Nos modĂšles Ă©taient capables de distinguer entre des sites de trĂšs bonne qualitĂ© et des sites choisis alĂ©atoirement. Au cours de la dissertation, nous prĂ©sentons non seulement des problĂšmes thĂ©oriques et leurs solutions, mais nous avons Ă©galement menĂ© des expĂ©riences pour dĂ©montrer les avantages et les limitations de nos solutions. Nos rĂ©sultats indiquent qu'on peut espĂ©rer amĂ©liorer l'Ă©tat de l'art dans les trois dimensions prĂ©sentĂ©es. En particulier, notre travail sur la composition de la qualitĂ© et la modĂ©lisation de l'importance est le premier Ă  cibler ce problĂšme. Nous croyons que nos modĂšles Ă  deux niveaux sont un point de dĂ©part intĂ©ressant pour des travaux de recherche plus approfondis.As society becomes ever more dependent on computer systems, there is more and more pressure on development teams to produce high-quality software. Many companies therefore rely on quality models, program suites that analyse and evaluate the quality of other programs, but building good quality models is hard as there are many questions concerning quality modelling that have yet to be adequately addressed in the literature. We analysed quality modelling practices in a large organisation and identified three dimensions where research is needed: proper support of the subjective notion of quality, techniques to track the quality of evolving software, and the composition of quality judgments from different abstraction levels. To tackle subjectivity, we propose using Bayesian models as these can deal with uncertain data. We applied our models to the problem of anti-pattern detection. In a study of two open-source systems, we found that our approach was superior to state of the art rule-based techniques. To support software evolution, we consider scores produced by quality models as signals and the use of signal data-mining techniques to identify patterns in the evolution of quality. We studied how anti-patterns are introduced and removed from systems. Software is typically written using a hierarchy of components, yet quality models do not explicitly consider this hierarchy. As the last part of our dissertation, we present two level quality models. These are composed of three parts: a component-level model, a second model to evaluate the importance of each component, and a container-level model to combine the contribution of components with container attributes. This approach was tested on the prediction of class-level changes based on the quality and importance of its components: methods. It was shown to be more useful than single-level, traditional approaches. To finish, we reapplied this two-level methodology to the problem of assessing web site navigability. Our models could successfully distinguish award-winning sites from average sites picked at random. Throughout the dissertation, we present not only theoretical problems and solutions, but we performed experiments to illustrate the pros and cons of our solutions. Our results show that there are considerable improvements to be had in all three proposed dimensions. In particular, our work on quality composition and importance modelling is the first that focuses on this particular problem. We believe that our general two-level models are only a starting point for more in-depth research

    Uso de riscos na validação de sistemas baseados em componentes

    Get PDF
    Orientadores: Eliane Martins, Henrique Santos do Carmo MadeiraTese (doutorado) - Universidade Estadual de Campinas, Instituto de ComputaçãoResumo: A sociedade moderna estĂĄ cada vez mais dependente dos serviços prestados pelos computadores e, conseqĂŒentemente, dependente do software que estĂĄ sendo executado para prover estes serviços. Considerando a tendĂȘncia crescente do desenvolvimento de produtos de software utilizando componentes reutilizĂĄveis, a dependabilidade do software, ou seja, a segurança de que o software irĂĄ funcionar adequadamente, recai na dependabilidade dos componentes que sĂŁo integrados. Os componentes sĂŁo normalmente adquiridos de terceiros ou produzidos por outras equipes de desenvolvimento. Dessa forma, os critĂ©rios utilizados na fase de testes dos componentes dificilmente estĂŁo disponĂ­veis. A falta desta informação aliada ao fato de se estar utilizando um componente que nĂŁo foi produzido para o sistema e o ambiente computacional especĂ­fico faz com que a reutilização de componentes apresente um risco para o sistema que os integra. Estudos tradicionais do risco de um componente de software definem dois fatores que caracteriza o risco, a probabilidade de existir uma falha no componente e o impacto que isso causa no sistema computacional. Este trabalho propĂ”e o uso da anĂĄlise do risco para selecionar pontos de injeção e monitoração para campanhas de injeção de falhas. TambĂ©m propĂ”e uma abordagem experimental para a avaliação do risco de um componente para um sistema. Para se estimar a probabilidade de existir uma falha no componente, mĂ©tricas de software foram combinadas num modelo estatĂ­stico. O impacto da manifestação de uma falha no sistema foi estimado experimentalmente utilizando a injeção de falhas. Considerando esta abordagem, a avaliação do risco se torna genĂ©rica e repetĂ­vel embasando-se em medidas bem definidas. Dessa forma, a metodologia pode ser utilizada como um benchmark de componentes quanto ao risco e pode ser utilizada quando Ă© preciso escolher o melhor componente para um sistema computacional, entre os vĂĄrios componentes que provĂȘem a mesma funcionalidade. Os resultados obtidos na aplicação desta abordagem em estudos de casos nos permitiram escolher o melhor componente, considerando diversos objetivos e necessidades dos usuĂĄriosAbstract: Today's societies have become increasingly dependent on information services. A corollary is that we have also become increasingly dependent on computer software products that provide such services. The increasing tendency of software development to employ reusable components means that software dependability has become even more reliant on the dependability of integrated components. Components are usually acquired from third parties or developed by unknown development teams. In this way, the criteria employed in the testing phase of components-based systems are hardly ever been available. This lack of information, coupled with the use of components that are not specifically developed for a particular system and computational environment, makes components reutilization risky for the integrating system. Traditional studies on the risk of software components suggest that two aspects must be considered when risk assessment tests are performed, namely the probability of residual fault in software component, and the probability of such fault activation and impact on the computational system. The present work proposes the use of risk analysis to select the injection and monitoring points for fault injection campaigns. It also proposes an experimental approach to evaluate the risk a particular component may represent to a system. In order to determine the probability of a residual fault in the component, software metrics are combined in a statistical mode!. The impact of fault activation is estimated using fault injection. Through this experimental approach, risk evaluation becomes replicable and buttressed on well-defined measurements. In this way, the methodology can be used as a components' risk benchmark, and can be employed when it is necessary to choose the most suitable among several functionally-similar components for a particular computational system. The results obtained in the application of this approach to specific case studies allowed us to choose the best component in each case, without jeopardizing the diverse objectives and needs of their usersDoutoradoDoutor em CiĂȘncia da Computaçã
    corecore