This book constitutes the refereed proceedings of the 16th International Conference on Software Reuse, ICSR 2017, held in Salvador, Brazil, in May 2017. The 8 revised full papers presented together with 3 short papers and 2 keynote presentations were carefully reviewed and selected from 34 submissions. The papers are grouped in topical sections on documentation reuse and repositories; software product lines; variability management and model variants; verification and refactoring for reuse; tools demonstrations; doctorial symposium; tutorials; and workshop.
This book is about software product lines (SPLs) designed and developed taking UML diagrams as the primary basis, modeled according to a rigorous approach composed of an UML profile and a systematic process for variability management activities, forming the Stereotype-based Management of Variability (SMarty) approach. The book consists of five parts. Part I provides essential concepts on SPL in terms of the first development methodologies. It also introduces variability concepts and discusses SPL architectures finishing with the SMarty approach. Part II is focused on the design, verification and validation of SMarty SPLs, and Part III concentrates on the SPL architecture evolution based on ISO/IEC metrics, the SystEM-PLA method, optimization with the MOA4PLA method, and feature interaction prevention. Next, Part IV presents SMarty as a basis for SPL development, such as, the M-SPLearning SPL for mobile learning applications, the PLeTs SPL for testing tools, the PlugSPL plugin environment for supporting the SPL life cycle, the SyMPLES approach for designing embedded systems with SysML, the SMartySPEM approach for software process lines (SPrL), and re-engineering of class diagrams into an SPL. Eventually, Part V promotes controlled experimentation in UML-based SPLs, presenting essential concepts on how to plan, conduct, and document experiments, as well as showing several experiments carried out with SMarty. This book aims at lecturers, graduate students and experienced practitioners. Lecturers might use the book for graduate level courses about SPL fundamentals and tools; students will learn about the SPL engineering process, variability management, and mass customization; and practitioners will see how to plan the transition from single-product development to an SPL-based process, how to document inherent variability in a given domain, or how to apply controlled experiments to SPLs.
This handbook distils the wealth of expertise and knowledge from a large community of researchers and industrial practitioners in Software Product Lines (SPLs) gained through extensive and rigorous theoretical, empirical, and applied research. It is a timely compilation of well-established and cutting-edge approaches that can be leveraged by those facing the prevailing and daunting challenge of re-engineering their systems into SPLs. The selection of chapters provides readers with a wide and diverse perspective that reflects the complementary and varied expertise of the chapter authors. This perspective covers the re-engineering processes, from planning to execution. SPLs are families of systems that share common assets, allowing a disciplined software reuse. The adoption of SPL practices has shown to enable significant technical and economic benefits for the companies that employ them. However, successful SPLs rarely start from scratch, but instead, they usually start from a set of existing systems that must undergo well-defined re-engineering processes to unleash new levels of productivity and competitiveness. Practitioners will benefit from the lessons learned by the community, captured in the array of methodological and technological alternatives presented in the chapters of the handbook, and will gain the confidence for undertaking their own re-engineering challenges. Researchers and educators will find a valuable single-entry point to quickly become familiar with the state-of-the-art on the topic and the open research opportunities; including undergraduate, graduate students, and R&D engineers who want to have a comprehensive understanding of techniques in reverse engineering and re-engineering of variability-rich software systems.
"Mastering Design Patterns in Java: Building Robust and Scalable Software" is your ultimate guide to understanding and implementing design patterns in Java. Whether you're a seasoned developer or just starting your journey with Java, this book equips you with the knowledge and practical skills to tackle software design challenges using well-established, time-tested solutions. Design patterns provide proven approaches to common problems in software design, making code more efficient, reusable, and scalable. This book delves deep into the three main categories of design patterns—Creational, Structural, and Behavioral—offering hands-on examples and practical guidance for each. Patterns such as Singleton, Factory, Adapter, Observer, and many more are explained in detail, with code examples specifically tailored to Java. By the end of each chapter, you’ll not only understand the theoretical underpinnings of each pattern but also know how to apply them effectively in real-world projects. In addition to covering core design patterns, this book takes a step further by addressing advanced topics such as anti-patterns (common pitfalls to avoid), combining patterns in large-scale systems, and using design patterns in cloud-based and microservices architectures. Java developers working on distributed systems, cloud infrastructure, or modern applications will find valuable insights into how design patterns can improve code organization and maintainability. The book’s practical approach ensures that you can immediately start implementing the patterns in your own projects. With exercises, examples, and in-depth explanations, it’s an invaluable resource for any developer looking to improve their software design skills. Whether you're building small applications or architecting large systems, Mastering Design Patterns in Java will help you write clean, modular, and scalable code, positioning you for success in today’s fast-evolving software development landscape. Let this book be your guide to mastering the art of design patterns in Java.
This book reports on recent advances in software engineering research and practice. Divided into 15 chapters, it addresses: languages and tools; development processes; modelling, simulation and verification; and education. In the first category, the book includes chapters on domain-specific languages, software complexity, testing and tools. In the second, it reports on test-driven development, processing of business rules, and software management. In turn, subsequent chapters address modelling, simulation and verification of real-time systems, mobile systems and computer networks, and a scrum-based framework. The book was written by researchers and practitioners, the goal being to achieve a synergistic combination of research results achieved in academia and best practices used in the industry, and to provide a valuable reference guide for both groups.
With the growing maturity of information and communication technologies, systems have been interconnected within growing networks, yielding new services through a combination of the system functionalities. This leads to an increasing complexity that has to be managed in order to take advantage of these system integrations. This book provides key answers as to how such systems of systems can be engineered and how their complexity can be mastered. After reviewing some definitions on systems of systems engineering, the book focuses on concrete applications and offers a survey of the activities and techniques that allow engineering of complex systems and systems of systems. Case studies, ranging from emergency situations such as Hurricane Katrina and its crisis management or a generic scenario of a major traffic accident and its emergency response, to the establishment of a scientific basis in the Antarctic region illustrate key factors of success and traps to avoid in order to cope with such situations.
Unlock APMG Certification and Agile Mastery: Your All-in-One Guide to Acing the Exams and Leading Agile Projects with Confidence! In the flux of today’s fast-paced and ever-changing project environments, agility in management has transcended from being a mere methodology to a vital skill. Introducing "Mastering Agile Project Management: Your Key to Excelling at the APMG Foundation and Practitioner Exams with Confidence!", a masterful creation by Morgan Carter, designed to be your steadfast companion through your journey towards agility in project management. 📘 Discover a Universe of Agile Knowledge Explore the essentials, principles, and advanced tenets of Agile Project Management and DSDM. Unravel the intricacies of Agile philosophy, from initiation to delivery, in a structured, comprehensible manner. 🛠️ Practical Tools and Insights for Real-world Application Dive into a wealth of real-world scenarios, case studies, and pragmatic approaches. Grasp the practicalities of agile concepts like MoSCoW Prioritisation and Timeboxing. 🎯 Ace the Agile Project Management Examinations with Confidence Navigate through targeted strategies devised for both Agile Project Management Foundation and Practitioner exams. Employ actionable tips, and insights to optimize your preparation journey. 🚀 Beyond Certification: A Career Catalyst Envision your career trajectory through the lens of Agile mastery and strategic project leadership. Infuse agile excellence into your projects and organizational practices. 🤝 Join Morgan Carter on a Journey to Agile Mastery Morgan, with decades of wisdom and experience in Agile environments, handholds you through a journey from understanding the nuts and bolts of Agile Project Management to mastering its application in complex project scenarios. This book does not merely focus on certification success but aims to shape you into an Agile leader, who drives projects to success while fostering an environment of continuous improvement and learning. What’s Inside? Engaging Chapters: Detailed, reader-friendly chapters covering both foundational and practitioner Agile concepts. Practical Scenarios: Actionable insights into dealing with common challenges and scenarios in Agile projects. Study Aids: Exam tips to solidify your preparation for Agile Project Management certifications. Lifetime Reference: A treasure trove of Agile wisdom that you will revisit throughout your career. "Mastering Agile Project Management" is not just a guide; it’s a lifelong career companion aiming to fortify your Agile knowledge and application, sculpting you into a revered Agile Project Leader. Embark on a transformative journey towards Agile mastery with a guide who understands not just the path but the adventures it entails. Grab Your Copy and Begin Your Journey towards Agile Excellence Today!
Discover your complete guide to designing, deploying, and managing OpenStack-based clouds in mid-to-large IT infrastructures with best practices, expert understanding, and more About This Book Design and deploy an OpenStack-based cloud in your mid-to-large IT infrastructure using automation tools and best practices Keep yourself up-to-date with valuable insights into OpenStack components and new services in the latest OpenStack release Discover how the new features in the latest OpenStack release can help your enterprise and infrastructure Who This Book Is For This book is for system administrators, cloud engineers, and system architects who would like to deploy an OpenStack-based cloud in a mid-to-large IT infrastructure. This book requires a moderate level of system administration and familiarity with cloud concepts. What You Will Learn Explore the main architecture design of OpenStack components and core-by-core services, and how they work together Design different high availability scenarios and plan for a no-single-point-of-failure environment Set up a multinode environment in production using orchestration tools Boost OpenStack's performance with advanced configuration Delve into various hypervisors and container technology supported by OpenStack Get familiar with deployment methods and discover use cases in a real production environment Adopt the DevOps style of automation while deploying and operating in an OpenStack environment Monitor the cloud infrastructure and make decisions on maintenance and performance improvement In Detail In this second edition, you will get to grips with the latest features of OpenStack. Starting with an overview of the OpenStack architecture, you'll see how to adopt the DevOps style of automation while deploying and operating in an OpenStack environment. We'll show you how to create your own OpenStack private cloud. Then you'll learn about various hypervisors and container technology supported by OpenStack. You'll get an understanding about the segregation of compute nodes based on reliability and availability needs. We'll cover various storage types in OpenStack and advanced networking aspects such as SDN and NFV. Next, you'll understand the OpenStack infrastructure from a cloud user point of view. Moving on, you'll develop troubleshooting skills, and get a comprehensive understanding of services such as high availability and failover in OpenStack. Finally, you will gain experience of running a centralized logging server and monitoring OpenStack services. The book will show you how to carry out performance tuning based on OpenStack service logs. You will be able to master OpenStack benchmarking and performance tuning. By the end of the book, you'll be ready to take steps to deploy and manage an OpenStack cloud with the latest open source technologies. Style and approach This book will help you understand the flexibility of OpenStack by showcasing integration of several out-of-the-box solutions in order to build a large-scale cloud environment.. It will also cover detailed discussions on the various design and deployment strategies for implementing a fault-tolerant and highly available cloud infrastructure.
As networks, devices, and systems continue to evolve, software engineers face the unique challenge of creating reliable distributed applications within frequently changing environments. C++ Network Programming, Volume 1, provides practical solutions for developing and optimizing complex distributed systems using the ADAPTIVE Communication Environment (ACE), a revolutionary open-source framework that runs on dozens of hardware platforms and operating systems. This book guides software professionals through the traps and pitfalls of developing efficient, portable, and flexible networked applications. It explores the inherent design complexities of concurrent networked applications and the tradeoffs that must be considered when working to master them. C++ Network Programming begins with an overview of the issues and tools involved in writing distributed concurrent applications. The book then provides the essential design dimensions, patterns, and principles needed to develop flexible and efficient concurrent networked applications. The book's expert author team shows you how to enhance design skills while applying C++ and patterns effectively to develop object-oriented networked applications. Readers will find coverage of: C++ network programming, including an overview and strategies for addressing common development challenges The ACE Toolkit Connection protocols, message exchange, and message-passing versus shared memory Implementation methods for reusable networked application services Concurrency in object-oriented network programming Design principles and patterns for ACE wrapper facades With this book, C++ developers have at their disposal the most complete toolkit available for developing successful, multiplatform, concurrent networked applications with ease and efficiency.