Effective and Efficient Reuse with Software Libraries

Total Page:16

File Type:pdf, Size:1020Kb

Effective and Efficient Reuse with Software Libraries Effective and Efficient Reuse with Software Libraries Lars Heinemann Institut für Informatik der Technischen Universität München Effective and Efficient Reuse with Software Libraries Lars Heinemann Vollständiger Abdruck der von der Fakultät für Informatik der Technischen Universität München zur Erlangung des akademischen Grades eines Doktors der Naturwissenschaften (Dr. rer. nat.) genehmigten Dissertation. Vorsitzender: Univ.-Prof. Dr. Daniel Cremers Prüfer der Dissertation: 1. Univ.-Prof. Dr. Dr. h.c. Manfred Broy 2. Prof. Martin Robillard, Ph.D. McGill University, Montréal, Kanada Die Dissertation wurde am 26.07.2012 bei der Technischen Universität München eingere- icht und durch die Fakultät für Informatik am 20.11.2012 angenommen. Abstract Research in software engineering has shown that software reuse positively affects the competitive- ness of an organization: the productivity of the development team is increased, the time-to-market is reduced, and the overall quality of the resulting software is improved. Today’s code repositories on the Internet provide a large number of reusable software libraries with a variety of functionality. To analyze how software projects utilize these libraries, this thesis contributes an empirical study on the extent and nature of software reuse in practice. The study results indicate that third-party code reuse plays a central role in modern software development and that reuse of software libraries is the predominant form of reuse. It shows that many of today’s software systems consist to a considerable fraction of code reused from software libraries. While these libraries represent a great reuse opportunity, they also pose a great challenge to de- velopers. Often these libraries and their application programming interfaces (APIs) are large and complex, leading to cognitive barriers for developers. These obstacles can cause unintended reim- plementation in a software system. This negatively affects the system’s maintainability due to the unnecessary size increase of the code base and may even compromise its functional correctness, as library functionality is often more mature. To investigate the applicability of analytic methods for finding missed reuse opportunities, this work presents an empirical study on detecting functionally similar code fragments. It reports on the considerable challenges of the automated detection of reimplemented functionality in real-world software systems. The results of the study emphasize the need for constructive approaches to avoid reimplementation during forward-engineering. Motivated by these results, this thesis introduces an API method recommendation system to support developers in using large APIs of reusable libraries. The approach employs data mining for extract- ing the intentional knowledge embodied in the identifiers of code bases using the APIs. The knowl- edge obtained is used to assist developers with context-specific recommendations for API methods. The system suggests methods that are useful for the current programming task based on the code the developer is editing within the integrated development environment (IDE). It thereby makes reuse of software libraries both more effective and efficient. As opposed to existing approaches, the proposed system is not dependent on the previous use of API entities and can therefore produce sensible recommendations in more cases. We evaluate the approach with a case study showing its applicability to real-world software systems and quantitatively comparing it to previous work. In addition, we present an approach that transfers the idea of API recommendation systems to the field of model-based development. We introduce a recommendation system that assists develop- ers with context-dependent model element recommendations during modeling. We instantiate and evaluate the approach for the Simulink modeling language. To the best of our knowledge, this is the first work to adopt recommendation systems to the field of model-based development. 3 Acknowledgements I am grateful to all the people that supported me on the way to this thesis. First, I want to thank Manfred Broy for providing me with the opportunity to work at his chair and for supervising this thesis. Working at the chair in teaching and research has both extended and sharpened my view on computer science in a way I did not expect. The professional environment at his chair is outstanding in many ways, in particular with respect to the challenging research projects involving key players from both industry and academia. I am also grateful to Martin Robillard for co-supervising this thesis and his valuable feedback on my work. In addition, I want to express my gratitude to the complete staff at the chair of Prof. Broy. I very much enjoyed working with all of you in the last three and a half years. I especially thank Silke Müller for the organizational support, the IT department for always providing me with all I needed in terms of hardware and software resources, Florian Deißenböck for the most direct and honest review feedback I ever received, Elmar Jürgens for being a great example regarding his remarkable writing skills, Benjamin Hummel for a constantly open door for discussing research ideas, Veronika Bauer for sharing an office with me, and Andreas Vogelsang for his numerous and always helpful paper reviews. My scientific work in the last years included the publication of a number of research papers. I am thankful for the co-authorship in joint paper projects of Veronika Bauer, Florian Deißenböck, Mario Gleirscher, Markus Herrmannsdörfer, Benjamin Hummel, Maximilian Irlbeck, Elmar Jür- gens, Klaus Lochmann, Daniel Ratiu, and Stefan Wagner. I also worked in interesting and challenging research projects at the chair of Prof. Broy together with a number of fellow researchers. I want to express my gratitude to Veronika Bauer, Sebastian Eder, Benedikt Hauptmann, Markus Herrmannsdörfer, Benjamin Hummel, Maximilian Junker, Klaus Lochmann, and Daniel Méndez-Fernández for being great colleagues during research projects. Further thanks go to the proof-readers of this thesis for insightful discussions and valuable feedback: Veronika Bauer, Jonas Eckhardt, Sebastian Eder, Henning Femmer, Bendikt Hauptmann, Benjamin Hummel, Maximilan Junker, Elmar Jürgens, Klaus Lochmann, Birgit Penzenstadler, and Andreas Vogelsang. Last but not least I want to thank my family and friends for their support during my entire education and especially this thesis project. 5 Contents 1 Introduction 9 1.1 Problem Statement . 11 1.2 Contribution . 11 1.3 Outline . 12 2 Preliminaries 13 2.1 Why Software Reuse? . 13 2.2 Software Reuse Approaches . 13 2.3 Obstacles for Software Reuse . 16 2.4 Perspective of this Thesis . 17 2.5 Data Mining Background . 18 2.6 Recommendation Systems in Software Engineering . 21 2.7 Model-Based Development . 22 2.8 ConQAT: Continuous Quality Assessment Toolkit . 23 3 State of the Art 25 3.1 Quantifying Reuse in Software Projects . 25 3.2 Detection of Functional Similarity in Programs . 27 3.3 Developer Support for Library Reuse . 31 3.4 Recommendation Systems for Model-Based Development . 37 4 Empirical Study on Third-Party Code Reuse in Practice 39 4.1 Terms . 40 4.2 Study Design . 40 4.3 Study Objects . 41 4.4 Study Implementation and Execution . 43 4.5 Results . 46 4.6 Discussion . 52 4.7 Threats to Validity . 55 4.8 Summary . 57 5 Challenges of the Detection of Functionally Similar Code Fragments 59 5.1 Terms . 59 5.2 Dynamic Detection Approach . 61 5.3 Case Study . 68 5.4 Threats to Validity . 80 5.5 Comparison to Jiang&Su’s Approach . 80 7 Contents 5.6 Discussion . 82 5.7 Summary . 83 6 Developer Support for Library Reuse 85 6.1 Motivation . 85 6.2 Terms . 86 6.3 Approach . 86 6.4 Case Study . 92 6.5 Discussion . 104 6.6 Threats to Validity . 105 6.7 Summary . 106 7 Beyond Code: Reuse Support for Model-Based Development 107 7.1 Approach . 108 7.2 Case Study . 109 7.3 Discussion . 113 7.4 Threats to Validity . 113 7.5 Summary . 114 8 Tool Support 115 8.1 API Method Recommendation . 115 8.2 Model Recommendation . 118 9 Conclusion 121 9.1 Third-Party Code Reuse in Practice . 121 9.2 Detection of Functionally Similar Code Fragments . 122 9.3 Developer Support for Library Reuse . 123 9.4 Reuse Support for Model-Based Development . 124 10 Future Work 125 10.1 Analysis of Third-Party Code Reuse . 125 10.2 Detection of Functionally Similar Code Fragments . 126 10.3 API Recommendation . 126 10.4 Model Recommendation . 127 Bibliography 129 8 1 Introduction Software reuse addresses the use of existing artifacts for the construction of new software. Research in software engineering has shown that it positively affects the competitiveness of an organization in multiple ways: the productivity of the development team is increased, the time-to-market is reduced, and the overall quality of the resulting software is improved [46, 66]. While software reuse can take many forms, a particularly attractive form are externally developed artifacts, for which the complete development and maintenance is outsourced to third parties. Fueled by both the free/open source movements and commercial marketplaces for software components in combination with the evolution of the Internet as a commodity resource in software development, a large number of reusable libraries and frameworks is available for building new software [101]. The Internet itself has become an interesting reuse repository [43] and is emerging as “a de facto standard library for reusable assets” [26]. For example, the Java library search engine findJAR.com1 indexes more than 140,000 Java class libraries2 and the Apache Maven repository3 contains about 40,000 unique artifacts4. To effectively use a software library, and thus achieve high reuse rates, profound knowledge about the library’s content is required. Unfortunately, recent research indicates that developers still rein- vent the wheel and reimplement general purpose functionality in their code instead of reusing ma- ture and well-tested library functionality [52, 57].
Recommended publications
  • New Inheritance Models That Facilitate Source Code Reuse in Object-Oriented Programming
    NEW INHERITANCE MODELS THAT FACILITATE SOURCE CODE REUSE IN OBJECT- ORIENTED PROGRAMMING By HISHAM M. AL-HADDAD Bachelor of Science Yarmouk University lrbid, Jordan 1986 Master of Science Northrop University Los Angeles, California 1988 Submitted to the Faculty of the Graduate College of the Oklahoma State University in partial fulfillment of the requirements for the degree of DOCTOR OF PHILOSOPHY July, 1992 Oklahoma Statt.' Ur1iv. Library NEW INHERITANCE MODELS THAT FACILITATE SOURCE CODE REUSE IN OBJECT- ORIENTED PROGRAMMING C/ wU::r-~ B I A~c;p .... _.-~ Dean of the Graduate CoUege ii PREFACE Code reusability is a primary objective in the development of software systems. The object-oriented programming methodology is one of the areas that facilitate the development of software systems by allowing and promoting code reuse and modular designs. Object-oriented programming languages (OOPLs) provide different facilities to attain efficient reuse and reliable extension of existing software components. Inheritance is an important language feature that is conducive to reusability and extensibility. Various OOPLs provide different inheritance models based on different interpretations of the inheritance notion. Therefore, OOPLs have different characteristics derived from their respective inheritance models. This dissertation is concerned with solutions for three major problems that limit the utilization of inheritance for code reusability. The range of object-oriented applications and thus the usage of object-oriented programming in general is also discussed. The three major problems are: 1) the relationship between inheritance and other related issues such as encapsulation, access techniques, visibility of inheritance, and subtyping; 2) the hierarchical structure imposed by inheritance among classes; and 3) the accessibility of previous versions of the modified methods defmed in classes located at higher levels of the inheritance structure than the parent classes.
    [Show full text]
  • Clubedu Clubdigitalhome Clubdev Strahlung
    Nr. 165/Juni 2020 € 5,00 ISSN 1022-1611 · Politik digital aktiv mitgestalten Politik digital aktiv mitgestalten CLUBEDU Wien Teleteaching mit Windows CLUBDIGITALHOME XnView U-2623 CLUBDEV Visual Studio Code Spaces STRAHLUNG Strahlung Schwingkreise Fehleinschätzungen P.b.b. 16Z040679 M ClubComputer, Siccardsburggasse 4/1/22 1100 1100 4/1/22 Siccardsburggasse ClubComputer, M 16Z040679 P.b.b. Inhalt Liebe Leserinnen und Leser! Franz Fiala LIESMICH Dass diese Ausgabe mit etwas Verspätung hergestellt wurde, liegt an diesem winzigen 1 Cover Etwas, das sich zwischen die Menschen geschoben hat und das nicht nur Veranstal- Franz Fiala Fußball und Kunst, tungen verunmöglicht hat, sondern auch den Grenzübertritt zur Slowakei, wo sich die am meisten be- Druckerei der PCNEWS befindet. Dass diese Pandemie auch einen Zusammenhang zu troffen vom Corona- unserem Jahresregenten, dem Thema „Strahlung“, hat, darauf wären wir wohl auch Virus—oder von mit viel Phantasie nicht gekommen. Unwissen macht vieles möglich. docj eher von 5G? Bild: „Strahlung“ ist größtenteils unsichtbar—so wie ein Virus—und die Beschäftigung mit Simpl am 2.1.20202 diesem Thema sollte unser Wissen vertiefen und uns gegen die um sich greifende Wis- senschaftsfeindlichkeit mit abgesichertem Wissen immunisieren. 2 Liebe Leser, Inhalt Es liegt in der Natur der Sache, dass „lehren“ und „belehren“ verwandte Begriffe und Franz Fiala die Vermittlung komplexerer Zusammenhänge von bildungsfernen Schichten eher als 3 Impressum, Autoren, Inserenten, Zweiteres empfunden und daher auch abgelehnt wird und sie gleichzeitig eine verein- Services, Web 2020 fachte Gegenwelt der Verschwörungstheorien und alternativen Fakten errichten. IGITAL OCIETY Typisch für Wissenschaftsgegner ist das Postulieren nicht vorhandener Zusammen- D S hänge, eine „Dummheit zweiter Art“, die meist die „Dummheit der ersten Art“, näm- 4 Politik digital aktiv mitgestalten lich das Nicht-Verstehen von Zusammenhängen voraussetzt.
    [Show full text]
  • Generic Programming
    Generic Programming July 21, 1998 A Dagstuhl Seminar on the topic of Generic Programming was held April 27– May 1, 1998, with forty seven participants from ten countries. During the meeting there were thirty seven lectures, a panel session, and several problem sessions. The outcomes of the meeting include • A collection of abstracts of the lectures, made publicly available via this booklet and a web site at http://www-ca.informatik.uni-tuebingen.de/dagstuhl/gpdag.html. • Plans for a proceedings volume of papers submitted after the seminar that present (possibly extended) discussions of the topics covered in the lectures, problem sessions, and the panel session. • A list of generic programming projects and open problems, which will be maintained publicly on the World Wide Web at http://www-ca.informatik.uni-tuebingen.de/people/musser/gp/pop/index.html http://www.cs.rpi.edu/˜musser/gp/pop/index.html. 1 Contents 1 Motivation 3 2 Standards Panel 4 3 Lectures 4 3.1 Foundations and Methodology Comparisons ........ 4 Fundamentals of Generic Programming.................. 4 Jim Dehnert and Alex Stepanov Automatic Program Specialization by Partial Evaluation........ 4 Robert Gl¨uck Evaluating Generic Programming in Practice............... 6 Mehdi Jazayeri Polytypic Programming........................... 6 Johan Jeuring Recasting Algorithms As Objects: AnAlternativetoIterators . 7 Murali Sitaraman Using Genericity to Improve OO Designs................. 8 Karsten Weihe Inheritance, Genericity, and Class Hierarchies.............. 8 Wolf Zimmermann 3.2 Programming Methodology ................... 9 Hierarchical Iterators and Algorithms................... 9 Matt Austern Generic Programming in C++: Matrix Case Study........... 9 Krzysztof Czarnecki Generative Programming: Beyond Generic Programming........ 10 Ulrich Eisenecker Generic Programming Using Adaptive and Aspect-Oriented Programming .
    [Show full text]
  • Code Reuse and Refactoring: Going Agile on Complex Products
    Code Reuse and Refactoring: Going Agile on Complex Products Using enterprise Software Version Management to coordinate complex products, seamlessly support Git developers, and solve refactoring problems. Table of Contents Component-Based Development __________________________________________________ 1 CBD Product Model ______________________________________________________________ 1 The Repository Model ____________________________________________________________ 2 Managing CBD in Git _____________________________________________________________ 2 Setting Up the CBD Model _____________________________________________________ 2 Incorporating Non-Software Components ____________________________________ 3 Updating Component Baselines ________________________________________________ 3 Submitting Patches to Components _____________________________________________ 4 Developer View _______________________________________________________________ 4 Refactoring: In Practice ________________________________________________________ 4 Refactoring: Developer Impact _________________________________________________ 4 Managing CBD in Perforce Software Version Management and Perforce Git Fusion ______ 5 Setting Up the CBD Model _____________________________________________________ 5 Incorporating Non-Software Components ____________________________________ 5 Updating Component Baselines ________________________________________________ 5 Submitting Patches to Components _____________________________________________ 5 Developer View _______________________________________________________________
    [Show full text]
  • A Model of Inheritance for Declarative Visual Programming Languages
    An Abstract Of The Dissertation Of Rebecca Djang for the degree of Doctor of Philosophy in Computer Science presented on December 17, 1998. Title: Similarity Inheritance: A Model of Inheritance for Declarative Visual Programming Languages. Abstract approved: Margaret M. Burnett Declarative visual programming languages (VPLs), including spreadsheets, make up a large portion of both research and commercial VPLs. Spreadsheets in particular enjoy a wide audience, including end users. Unfortunately, spreadsheets and most other declarative VPLs still suffer from some of the problems that have been solved in other languages, such as ad-hoc (cut-and-paste) reuse of code which has been remedied in object-oriented languages, for example, through the code-reuse mechanism of inheritance. We believe spreadsheets and other declarative VPLs can benefit from the addition of an inheritance-like mechanism for fine-grained code reuse. This dissertation first examines the opportunities for supporting reuse inherent in declarative VPLs, and then introduces similarity inheritance and describes a prototype of this model in the research spreadsheet language Forms/3. Similarity inheritance is very flexible, allowing multiple granularities of code sharing and even mutual inheritance; it includes explicit representations of inherited code and all sharing relationships, and it subsumes the current spreadsheet mechanisms for formula propagation, providing a gradual migration from simple formula reuse to more sophisticated uses of inheritance among objects. Since the inheritance model separates inheritance from types, we investigate what notion of types is appropriate to support reuse of functions on different types (operation polymorphism). Because it is important to us that immediate feedback, which is characteristic of many VPLs, be preserved, including feedback with respect to type errors, we introduce a model of types suitable for static type inference in the presence of operation polymorphism with similarity inheritance.
    [Show full text]
  • Beginning SOLID Principles and Design Patterns for ASP.NET Developers — Bipin Joshi Beginning SOLID Principles and Design Patterns for ASP.NET Developers
    THE EXPERT’S VOICE® IN .NET DEVELOPMENT Beginning SOLID Principles and Design Patterns for ASP.NET Developers — Bipin Joshi Beginning SOLID Principles and Design Patterns for ASP.NET Developers Bipin Joshi Beginning SOLID Principles and Design Patterns for ASP.NET Developers Bipin Joshi 301 Pitruchhaya Thane, India ISBN-13 (pbk): 978-1-4842-1847-1 ISBN-13 (electronic): 978-1-4842-1848-8 DOI 10.1007/978-1-4842-1848-8 Library of Congress Control Number: 2016937316 Copyright © 2016 by Bipin Joshi This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Exempted from this legal reservation are brief excerpts in connection with reviews or scholarly analysis or material supplied specifically for the purpose of being entered and executed on a computer system, for exclusive use by the purchaser of the work. Duplication of this publication or parts thereof is permitted only under the provisions of the Copyright Law of the Publisher's location, in its current version, and permission for use must always be obtained from Springer. Permissions for use may be obtained through RightsLink at the Copyright Clearance Center. Violations are liable to prosecution under the respective Copyright Law. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark.
    [Show full text]
  • Empfehlungsliste Für Alternative Software
    Alternative Programme und Dienste Aktuelle Tipps immer auf unserer Website: https://digitalcourage.de/digitale-selbstverteidigung statt Google Suche: Startpage, ixquick.eu, statt #%9 6SN oder Sk+pe 7chat8: =a!!er Metager, DuckDuckGo, etc. .XMPP) k>nnen vielen Programmen '.B. • https://www.startpage.com/ www.metager.de Pidgin • Sie lassen sich in !irefo" auch als Standard- • $infache $rkl?rung unter Suchmaschine einrichten. https://helmschrott.de/blog/jabber-in-3-minuten • https://www.pidgin.im/ kann auch viele anderen statt #nternet $"plorer $dge %hrome: 6essenger wie #%9 oder 6SN integrieren Firefox & auch mobil • https://www.mo'illa.org/de/firefo" statt Sk+pe 7:ideotelefonie8: 0itsi, %inp one, -ing, • $mpfohlene Add-ons: )TTPS $verywhere 1e!-T+ Privac+ Badger uBlock -rigin BetterPrivac+ • =itsi https://[email protected]/ Self-Destructing %ookies • 4inpone https://www.linphone.org/ - gibt es auch • !/r !ortgeschrittene: Re1uestPolic+ v2.3 4egac+ f/r Smartphone 5oScript • Ring https://ring.c"/ 7Android Win -S < 4inu"8 • Web0T% im Browser etliche Anbieter; l?sst sich statt -utlook: T underbird auch auf einem eigenen Server installieren • https://www.mo'illa.org/de/thunderbird • $rweiterungen: Enigmail #dentit+ statt Windows oder 6ac-S: G234%inux .5.B. %hooser SOGo %onnector 3!untu, Mageia/ • #nfos und )ilfe 7bei #nstallation und !ragen8 Passwort-Speicher: #eepass$ gibt es bei gan' vielen 4okalen Gruppen wie '.B. • https://www.keepass".org den 4inu" ;ser Groups 7siehe unten8 statt 6icrosoft -f(ce: %i!re&f'ce • https://mageia.org/ & https://www.ubuntu.com/ 75achfolger von -pen-f(ce8 • https://wiki.ubuntuusers.de/ ;buntu-!orum mit • https://de.libreof(ce.org detaillierten Antworten 'u vielen !ragen &nline-Dienste statt Windows 6edia Pla+er oder 9uicktime Pla+er: SM(Pla)er oder *%+ statt Google6aps: &penStreetMap • http://smpla+er.sourceforge.net/ SM*la+er • https://www.openstreetmap.org - kann hat ein paar !unktionen die :4% nicht hat auch Routenplanung !ahrradwege wie '.B.
    [Show full text]
  • Software Reusability: Approaches and Challenges
    International Journal of Research and Innovation in Applied Science (IJRIAS) |Volume VI, Issue V, May 2021|ISSN 2454-6194 Software Reusability: Approaches and Challenges Moko Anasuodei1, Ojekudo, Nathaniel Akpofure2 1Department of Computer Science and Informatics, Faculty of Science, Federal University Otuoke, Nigeria 2Department of Computer Science, Faculty of Natural and Applied Sciences, Ignatius Ajuru University of Education, Nigeria Abstract: Software reuse is used to aid the software phases. Software engineering has been more centered on development process which in recent times can improve the original development which gives an optimal software at a resulting quality and productivity of software development, by faster and less costly price, a design process based on assisting software engineers throughout various software systemic reusable is now recognized. engineering phases to enhance the quality of software, provide quick turnaround time for software development using few Software reuse reduces efforts and cost, because software people, tools, and methods, which creates a good software development costs can be extremely high, but they are quality by enhancing integration of the software system to shared, such that the cost of reuse can be extremely low. provide a competitive advantage. This paper examines the One major advantage of software reuse suggested by concept of software reuse, the approaches to be considered for keswani et al (2014) explains that there is a significant need software reuse, which is broadly shared into three categories: component-based software reuse, domain engineering and for the number of bugs to be reduced during software software product lines, architecture-based software reuse and development process, such that instead of developing an challenges that affect the software reuse development process.
    [Show full text]
  • Ubuntu 16.04 LTS – Das Umfassende Handbuch 1145 Seiten, Gebunden, Mit DVD, 9
    Wissen, wie’s geht. Leseprobe Ob Sie Einsteiger oder fortgeschrittener Ubuntu-User sind: Von der Installation bis zur Administration (Desktop und Server) zeigt Ihnen dieses Standardwerk, was Sie für Ihre Arbeit mit der beliebtesten Linux-Distribution benötigen. In dieser Leseprobe finden Sie nicht nur interessante Ubuntu-Grundlagen, sondern können außerdem einen Blick darauf werfen, wie tief Sie mit diesem Buch bei Bedarf in diese spannende Linux-Distribution eintauchen können. »Vorwort und Leitfaden für die Nutzung« »Die Wurzeln von Ubuntu« »Ubuntu ohne Risiko ausprobieren und Daten retten« »Daten sichern, migrieren und synchronisieren »Erste Schritte mit dem Unity-Desktop« »Datensicherung und Sicherheit« Inhaltsverzeichnis Index Der Autor Leseprobe weiterempfehlen Marcus Fischer Ubuntu 16.04 LTS – Das umfassende Handbuch 1145 Seiten, gebunden, mit DVD, 9. Auflage 2016 49,90 Euro, ISBN 978-3-8362-4299-8 www.rheinwerk-verlag.de/4214 Vorwort Vorwort Ein Betriebssystem auf GNU/Linux-Basis wurde früher lediglich von Spezialisten, Informa- tikern und besonders mutigen Nutzern verwendet. Technisch weit fortgeschritten, aber für einen Normalnutzer unbedienbar war die weit verbreitete Meinung. Dies änderte sich 2004, als einige erfahrene Entwickler sich zusammentaten, die Firma Canonical gründeten und ein kostenloses Betriebssystem namens Ubuntu entwickelten. Ubuntu sollte GNU/Linux aus der Expertenecke befreien und durch Benutzerfreundlichkeit einer breiten Öffentlichkeit zugänglich gemacht werden. Nicht alle Wege, die während der Entwicklung eingeschlagen wurden, waren von Erfolg ge- krönt, aber Ubuntu hat es wie kein zweites GNU/Linux-Betriebssystem geschafft, derart viele Nutzer von z. B. Windows zu einem Umstieg zu bewegen. Über die genauen Zahlen gibt es kein gesichertes Wissen, aber Canonical geht aufgrund der Downloadzahlen von inzwischen mehreren hundert Millionen Nutzern aus, die das System auf Notebooks, PCs, Servern und in virtuellen Maschinen nutzen.
    [Show full text]
  • Using Recursive Java Generics to Support Code Reuse in the CS2 Course
    Using Recursive Java Generics to Support Code Reuse in the CS2 Course J. Andrew Holey and Lynn R. Ziegler Department of Computer Science Saint John’s University and the College of Saint Benedict Collegeville, Minnesota 56321 [email protected] and [email protected] Abstract Showing students examples of code reuse in early Java programming courses is highly desirable, but one significant class of examples, linked data structures, is difficult to reuse and leads to frequent casting. We show a technique for using recursive generic parameters that significantly simplifies the inheritance of linked data structures, and we discuss the use of this technique in the CS2 course. 1 Introduction Java is well-established as the most frequently-used language in the first two programming courses at colleges and universities (CS1 and CS2). While there is serious and well-founded debate about whether other languages may be more appropriate for an introductory programming sequence at the college level, many computer science faculty members have become comfortable with using Java in these courses and are able to teach programming and problem-solving very effectively using this language. One of the advantages of using object-oriented languages like Java for teaching introductory programming is their support for the construction of abstract data types (ADTs). This support was enhanced in Java 5.0 with the introduction of generics. Libraries like the Java Collection Framework have reduced the emphasis on construction of ADTs in many CS2 courses, but most textbooks and instructors still choose to spend considerable time on the implementation of ADTs. It is now possible to guide students to produce simple and elegant implementations of the standards ADTs, including stacks, queues, various types of lists and trees, maps and even graphs.
    [Show full text]
  • Complete Thesis
    University of Groningen Applying patterns in embedded systems design for managing quality attributes and their trade-offs Feitosa, Daniel IMPORTANT NOTE: You are advised to consult the publisher's version (publisher's PDF) if you wish to cite from it. Please check the document version below. Document Version Publisher's PDF, also known as Version of record Publication date: 2019 Link to publication in University of Groningen/UMCG research database Citation for published version (APA): Feitosa, D. (2019). Applying patterns in embedded systems design for managing quality attributes and their trade-offs. University of Groningen. Copyright Other than for strictly personal use, it is not permitted to download or to forward/distribute the text or part of it without the consent of the author(s) and/or copyright holder(s), unless the work is under an open content license (like Creative Commons). The publication may also be distributed here under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license. More information can be found on the University of Groningen website: https://www.rug.nl/library/open-access/self-archiving-pure/taverne- amendment. Take-down policy If you believe that this document breaches copyright please contact us providing details, and we will remove access to the work immediately and investigate your claim. Downloaded from the University of Groningen/UMCG research database (Pure): http://www.rug.nl/research/portal. For technical reasons the number of authors shown on this cover page is limited to 10 maximum. Download date: 02-10-2021 Applying Patterns in Embedded Systems Design for managing Quality Attributes and their Trade-offs PhD thesis to obtain the degree of PhD at the University of Groningen on the authority of the Rector Magnificus Prof.
    [Show full text]
  • A Foundation for Trait-Based Metaprogramming
    A foundation for trait-based metaprogramming John Reppy Aaron Turon University of Chicago {jhr, adrassi}@cs.uchicago.edu Abstract We present a calculus, based on the Fisher-Reppy polymorphic Scharli¨ et al. introduced traits as reusable units of behavior inde- trait calculus [FR03], with support for trait privacy, hiding and deep pendent of the inheritance hierarchy. Despite their relative simplic- renaming of trait methods, and a more granular trait typing. Our ity, traits offer a surprisingly rich calculus. Trait calculi typically in- calculus is more expressive (it provides new forms of conflict- clude operations for resolving conflicts when composing two traits. resolution) and more flexible (it allows after-the-fact renaming) In the existing work on traits, these operations (method exclusion than the previous work. Traits provide a useful mechanism for shar- and aliasing) are shallow, i.e., they have no effect on the body of the ing code between otherwise unrelated classes. By adding deep re- other methods in the trait. In this paper, we present a new trait sys- naming, our trait calculus supports sharing code between methods. tem, based on the Fisher-Reppy trait calculus, that adds deep oper- For example, the JAVA notion of synchronized methods can im- ations (method hiding and renaming) to support conflict resolution. plemented as a trait in our system and can be applied to multiple The proposed operations are deep in the sense that they preserve methods in the same class to produce synchronized versions. We any existing connections between the affected method and the other term this new use of traits trait-based metaprogramming.
    [Show full text]