
Quantum computing holds the potential to deliver faster and more precise solutions to complex problems that remain intractable for classical computers. However, the limited number of qubits and the high error rates of current quantum devices restrict the size of computations that can be successfully performed. An approach to address this is quantum circuit cutting, which divides a quantum computation into multiple smaller parts executable on available quantum devices and classically combines their results to obtain the original computation's outcome. Even when quantum devices mature, the importance of circuit cutting may even increase because of the addition of quantum devices with limited numbers of qubits to the existing computing infrastructure. However, there is a lack of comprehensive surveys comparing current circuit cutting techniques, let alone providing abstract guidance for quantum software engineers in applying them. Moreover, to facilitate collaboration, quantum software engineers need a common understanding of circuit cutting. In this work, we introduce three patterns focusing on quantum circuit cutting, which describe proven solution strategies as a first step towards providing abstract guidance and fostering a common understanding in this domain. These patterns are integrated into an existing quantum computing pattern language, thereby supporting the comprehension and application of quantum circuit cutting for quantum software engineers and promoting its practical implementation.
Prompt engineering is becoming a critical skill for software developers by facilitating enhanced interactions with conversational large language models (LLMs), such as ChatGPT, Claude, and Gemini. This emerging discipline focuses on crafting prompts, which are instructions that guide LLMs in generating precise outputs, automating tasks, and ensuring adherence to specific qualitative and quantitative standards. Prompts are also a form of natural language programming that tailor the dialogue between users and LLMs, optimizing input, output, and interaction dynamics for many computational tasks, such as developing software, analyzing documents, and/or addressing cyber vulnerabilities. This paper introduces a comprehensive catalog of prompt engineering techniques---structured as a collection of patterns---aimed at addressing common challenges encountered when integrating LLMs into the software development lifecycle. These prompt patterns serve as an effective means for knowledge transfer, similar to software patterns. In particular, they provide reusable solutions to common problems faced in particular contexts, such as output generation and interaction when conversing with LLMs in the domain of software-reliant systems. This paper provides three contributions to research on---and the practice of---prompt engineering for applying LLMs to aid users performing computational tasks. First, it establishes a framework for documenting and deploying prompt patterns across various domains, focusing on enhancing LLM utility in software development endeavors. Second, it curates a catalog of prompt patterns, validated through successful application in refining LLM interactions and outputs. Third, it explores the synergistic potential of creating more complex prompts by combining multiple prompt patterns.
Security patterns offer a time-tested solution for common security issues. Patterns can help organizations develop secure software and achieve compliance with ever-increasing regulations. However, an analysis of the existing literature shows that there is a lack of uniformity when describing security patterns and a lack of an up-to-date catalog, as patterns are spread across multiple papers and publication venues, leading organizations to discard their use. Our work solves these gaps by developing a concise pattern catalog by analyzing over 295 security patterns and filtering them based on quality metrics, as well as the means to expand it further as new security patterns emerge. We also use our catalog to improve the Portuguese national cybersecurity reference board in order to help organizations achieve compliance.
Context: Design patterns are reusable solutions for recurring problems of software design. Although useful for software analysis, detecting design patterns is often challenging especially in large and complex software systems. In this context, several tools have been proposed for automating this process. Objective: Past attempts to summarize existing detection tools contain gaps in their scope, such as the lack of a comparison of the output provided by the tools in terms of precision and agreement. We address some of these gaps through a literature review and a comparison of design pattern detection tools. Our goal is to assist practitioners and researchers not only looking for useful tools, but also exploring opportunities for their improvements. Method: We present a systematic literature review of design pattern detection tools based on strict guidelines. We compare the performance of four tools in detecting six design patterns based on precision, recall, F-measure, and agreement. Results: From the 42 tools found, only ten are available for download. Altogether, the tools detect all 23 design patterns summarized by the Gang of Four's book. The comparison results suggest that some tools are more suitable for specific design patterns, e.g., the FINDER tool for Composite, Decorator and Visitor. We also observed a low agreement among tools. Conclusions: Despite the high number of tools published, design pattern detection tools are mostly ineffective and unavailable for use. Particularly, practitioners might struggle to find a tool that matches their expectations. The available tools provide inaccurate yet complementary detection results; thus, solutions for either improving or combining tools are needed. Researchers are encouraged to propose novel tools capable of filling this literature gap.
Adopting DevOps practices is nowadays a recurring task in the industry. DevOps is a set of practices intended to reduce the friction between the software development (Dev) and the IT operations (Ops), resulting in higher quality software and a shorter development lifecycle. Even though many resources are talking about DevOps practices, they are often inconsistent with each other on the best DevOps practices. Furthermore, they lack the needed detail and structure for beginners to the DevOps field to quickly understand them. In order to tackle this issue, this paper proposes four foundational DevOps patterns: Version Control Everything, Continuous Integration, Deployment Automation, and Monitoring. The patterns are both detailed enough and structured to be easily reused by practitioners and flexible enough to accommodate different needs and quirks that might arise from their actual usage context. Furthermore, the patterns are tuned to the DevOps principle of Continuous Improvement by containing metrics so that practitioners can improve their pattern implementations.
The Idioms for Synchronization Mechanisms is a collection of patterns related with the implementation of synchronization mechanisms for the communication components of parallel software systems. The selection of these idioms take as input information (a) the design pattern of the communication components to synchronize, (b) the memory organization of the parallel hardware platform, and (c) the type of communication required. In this paper, it is presented the application of the Idioms for Synchronization Mechanisms to synchronize the communication components for an N Body Simulation, within the Detailed Design stage of the Pattern-based Parallel Software Design Method. In two previous papers, this method has been used in two previous stages: (a) in the Coordination Design stage, selecting the Manager-Workers architectural patterns as the coordination, which depends on the N- Body problem; and (b) in the Communication Design stage, selecting the Remote Rendezvous design pattern as communication, which depends on the memory organization of the parallel hardware platform, and on the architectural pattern previously selected.
There are multiple issues/challenges that must be addressed for making agile more suitable for safety-critical systems. In this paper we will address the issues relevant to team formation, communication and testing. Up-front testing goes well in line with agile principles, this is the reason we choose it for our proposed approach.
Martin Fowler coined the term "Strangler Application" as a metaphor to describe a way of doing an evolutionary rewrite of a system, keeping it working while you evolve it. The main idea is to gradually create a new system around the edges of the old, letting it grow slowly over several years until the old system is strangled. The microservices architecture style has become very popular, and has been used to apply the strangler application to monolithic service-based systems. This paper describes different strategies (patterns) for applying the strangler application while evolving a monolith to use the microservices architecture style. The main ideas are: Wrap the monolith and protect services and system from change, Start Small and gradually evolve the system (baby steps), Pave the Road making microservices easier to create; Macroservice first then split to Microservice, Add new functionality as microservices, Extract Module / Component to Microservice, and Replace functionality with Microservice. As the system evolve it is common to Proxy Monolith Components and Add Façade to the microservices
Quantum computers have the potential to solve certain problems faster than classical computers. However, loading data into a quantum computer is not trivial. To load the data, it must be encoded in quantum bits (qubits). There are several ways how qubits can represent the data and, thus, multiple data encodings are possible. Both the data itself and the chosen encoding influence the runtime of the loading process. In the worst case, loading requires exponential time. This is critical because quantum algorithms that promise a speed-up assume that loading data can be done faster, in logarithmic or linear time. To outline abstract knowledge about encodings and the consequences of choosing a particular data encoding, we present three common encodings as patterns. Especially in complex domains like quantum computing, patterns can contribute to making this new technology and its broad potential accessible to users with different backgrounds. In particular, they facilitate the development of quantum applications for software developers.
To improve education, teachers need to apply strategies based in research on how people learn, and then use technology and other means to leverage these strategies to meet the needs of an ever growing population. This paper briefly surveys proven approaches for active learning, and describes initial efforts to analyze activities to identify reusable patterns that could help researchers understand how activities work and how to improve them. The objective is to inspire teachers to learn more about active learning and explore ways to help people learn more effectively.
The key inquiry in this paper, to move the discussion forward on innovation and the future of Pattern Language, is about the relationship between patterns (and more precisely our capacities as humans to recognize and use patterns, aka 'patterning') and language (both in its form and in the processes of 'languaging' involved), in order to assess how each can be leveraged in understanding and communication, within and across domains. I dive here deep into the biological and bio-semiotic underpinnings of patterning and languaging, seeking to make a clear distinction between them. I explore the nature and "timeless properties" of patterns as signs and their role in the emergence of human cognition and language from an evolutionary perspective. In particular I examine their involvement in 'habit taking' and in the coordination of unselfconscious action and creative processes, such as evoked by Christopher Alexander. This paper does not provide solutions or answers, it sets a foundation to show how the development of a pattern literacy around patterns seen as basic units for the coordination of action and the understanding of the world, beyond domain knowledge and linguistic divides, could bring new possibilities for the study and orientation of socio-ecological and socio-technological systems. This will open up opportunities to further explore how pattern languages could be understood and applied towards this objective, in order to actually realize their potential as lingua franca.
The Architectural Patterns for Parallel Programming is a set of patterns along with a method for designing the coordination of parallel software systems. Their application takes as input: (a) the available parallel hardware platform, (b) the available parallel programming language, and (c) the analysis of the problem as an algorithm and data. This paper presents the application of the architectural patterns within the method for solving the Matrix Multiplication. The method takes information from the problem analysis, selects an architectural pattern for the coordination, and provides some elements about its implementation.
In this paper, we present principles of pattern illustration design and summaries of subsequent pattern seeds. Pattern illustration is a visual expression to convey the core idea of a pattern symbolically, which is shown in combination with its pattern name. Although many patterns for drawing pattern illustration have been proposed, this paper focuses more on fundamental principles of pattern illustration design. The principles were extracted by analyzing more than 600 pattern illustrations for 19 pattern languages in various domains, which we have been creating for the past decade. Our discoveries on design principles of pattern illustration are grouped into the following 12 principles: (1) Space that has Depth; (2) Characters with a Mind and Body; (3) Interactions on the Spot; (4) Time Flow from Left to Right; (5) Symbolic Object for Abstract Things; (6) Visible Lines for Clusters and Connection; (7) The Effect Given by Things Created; (8) Object-like Speech Bubbles; (9) Visual Expressions in Comics; (10) Abbreviation for Simplicity; (11) Evolving Stories from Patterns; and (12) A Magical Touch for Charms. In this paper, we explain these principles, the subsequent pattern seeds, and examples from our pattern languages.
IoT devices are increasingly present in our lives, and today constitute a strong pillar for designing smart systems that perceive the environment and intervene in it according to predefined rules. This ability to interact with the environment has historically been the target of cyberattacks, causing erratic behavior in these systems, which brings serious consequences. This work introduces Secure Actuator Node, a pattern that addresses the design of a secure actuator that considers the identification of threats and their respective countermeasures to mitigate or eliminate these types of security issues.
This paper started because we are two authors who plan to make a book from a set of related patterns papers, and in doing so we really want to reach our target audience and provide a practical and useful piece of work. Our approach had two distinct investigation activities. One was to do an informal analysis of books about software processes and methods to gain a better understanding of characteristics and book design practices for this kind of book. The second was to use a combination of interviews and surveys to gather feedback on what readers are looking for when accessing information about software engineering. To better understand our potential readers and how to design our writing for their consumption, we created personas where we incorporated feedback from the reader survey into their personalities and preferences. Finally, we combined our information sources to create guidance for our future work of turning a set of patterns papers into a cohesive whole.
Capturing the wholeness of design solutions in order to effectively communicate them to others can be challenging. We posit that patterns are observable phenomena of design solutions. To represent these phenomena, a pattern author needs to generalize and omit information. Experienced designers are able to unfold the essence of the pattern and generate design solutions based on the information that they do find in a pattern description. Not surprisingly, their personal design heuristics play a central role in this. As they create a design solution, they also liberally apply their pre-existing design know-how and heuristics. But novice designers may have more difficulty. As this folding and unfolding of information and knowledge seems to be quite an abstract concept, we have chosen to make our point by discussing elephants. Like patterns, elephants are an observable phenomenon, a pattern in nature. Many different descriptions, representations, and accounts of elephants exist. Many people claim to know what elephants are. Yet they actually have little or limited knowledge of them. This analogy helps to understand how at the same time we both know and do not know what a thing is.
This paper discusses five patterns to create more hybrid learning opportunities on campuses by designing and connecting available spaces appropriately. A HYBRID DESIGN ENGINEERING STUDIO provides a digitally enhanced environment for rich collaboration among different locations. HYBRID INNOVATION SPACES support the design thinking process on-site with digital tools. MAKER GARAGES provide space for students to work transparently on their projects. An OPEN EDUCATION POP-UP SHOP makes it possible to reach out and present results off-campus. SHOW CASE GALLERIES invite the public on-campus and transforms the university into a museum to engage citizens and external stakeholders.
Many software systems in the area of educational technology can produce grades or other kind of feedback for students’ submissions automatically. Depending on the context of a particular system, there are different software engineering challenges regarding performance or flexibility of the submission evaluation process. During the experimental design of educational technology, these challenges and their consequences are often not considered appropriately, which leads to sub-optimal design decisions that limit productive use. This paper establishes a pattern catalogue that captures available design choices and their consequences in order to support developers and researchers in the domain of educational technology in making their design decisions. Two small case studies demonstrate the usefulness of the catalogue and the gains from applying appropriate patterns for each context.
Artificial Intelligence (AI) is widely acknowledged as one of the most disruptive technologies driving the digital transformation of industries, enterprises, and societies in the 21st century. Advances in computing speed, algorithmic improvements, and access to a vast amount of data contributed to the adaption of AI in many different domains. Due to the outstanding performance, AI technology is increasingly integrated into safety-critical applications. However, the established safety engineering processes and practices have been only successfully applied in conventional model-based system development and no commonly agreed approaches for integrating AI technology are available yet. This work presents two architectural patterns that can support designers and engineers in the conception of safety-critical AI-enhanced cyber-physical system (CPS) applications. The first pattern addresses the problem of integrating AI capabilities into safety-critical functions. The second pattern deals with architectural approaches to integrate AI technologies for monitoring and learning system-specific behavior at runtime.
API management of public, partner, and group Web APIs (APIs) is an organizational function at the interface between several stakeholders inside and outside of an organization. Most current API management literature is concerned with technical aspects of API management. Therefore, we use a design science approach to identify API management stakeholders, pattern candidates, and patterns focusing on collaboration. We derive these results from 16 expert interviews with API management team members, mainly working at established and SME organizations in Europe. The pattern’s target audience are API provider team members. The purpose of this paper is to describe the design approach, the two exemplary patterns ”Role-based marketing” and ”Frontend venture”, and six overarching observations made during the pattern language design. The first observation is that API provider teams usually control the resources used to collaborate with API consumers. Nevertheless, consumers want personal contact and contractual agreements before integrating an API. Also, most API management concerns are related to the API consumer. Then again, few standardized approaches for collaboration with backend functionality providers, legal or marketing exist. Additionally, an API has its own lifecycle. Finally, the strategic relevance of the API resources and the API consumers’ organizational structure influence a patterns’ suitability.