25 research outputs found
Towards Improving the Code Lexicon and its Consistency
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
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
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
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
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
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
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
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çã