About
268
Publications
96,560
Reads
How we measure 'reads'
A 'read' is counted each time someone views a publication summary (such as the title, abstract, and list of authors), clicks on a figure, or views or downloads the full-text. Learn more
5,409
Citations
Citations since 2017
Introduction
Publications
Publications (268)
Artificial Intelligence (AI) engineering is an engineering discipline that is concerned with all aspects of development and evolution of AI systems (that is, systems that include AI components). AI engineering is primarily an extension of software engineering, but it also includes methods and technologies from data science and AI in general.
Artificial intelligence (AI) and machine learning (ML) are increasingly broadly adopted in industry, However, based on well over a dozen case studies, we have learned that deploying industry-strength, production quality ML models in systems proves to be challenging. Companies experience challenges related to data quality, design methods and process...
Background: Data errors are a common challenge in machine learning (ML) projects and generally cause significant performance degradation in ML-enabled software systems. To ensure early detection of erroneous data and avoid training ML models using bad data, research and industrial practice suggest incorporating a data validation process and tool in...
Artificial intelligence (AI) and machine learning (ML) are increasingly broadly adopted in industry. However, based on well over a dozen case studies, we have learned that deploying industry-strength, production quality ML models in systems proves to be challenging. Companies experience challenges related to data quality, design methods and process...
Heterogeneous computing is one of the most important computational solutions to meet rapidly increasing demands on system performance. It typically allows the main flow of applications to be executed on a CPU while the most computationally intensive tasks are assigned to one or more accelerators, such as GPUs and FPGAs. We have observed that the re...
Development of machine learning (ML) enabled applications in real-world settings is challenging and requires the consideration of sound software engineering (SE) principles and practices. A large body of knowledge exists on the use of modern approaches to developing traditional software components, but not ML components. Using exploratory case stud...
Background: Developing and maintaining large scale machine learning (ML) based software systems in an industrial setting is challenging. There are no well-established development guidelines, but the literature contains reports on how companies develop and maintain deployed ML-based software systems.
Objective: This study aims to survey the literatu...
The most important way to achieve higher performance in computer systems is through heterogeneous computing, i.e., by adopting hardware platforms containing more than one type of processor, such as CPUs, GPUs, and FPGAs. Several types of algorithms can be executed significantly faster on a heterogeneous platform. However, migrating CPU-executable s...
Deploying machine-, and in particular deep-learning, (ML/DL) solutions in industry-strength, production quality contexts proves to challenging. This requires a structured engineering approach to constructing and evolving systems that contain ML/DL components. In this paper, we provide a conceptualization of the typical evolution patterns that compa...
Context: Multiple types of processing units (e.g., CPUs, GPUs and FPGAs) can be used jointly to achieve better performance in computational systems. However, these units are built with fundamentally different characteristics and demand attention especially towards software deployment.
Objective: The goal of this work is to summarize the state--of-...
One way to improve the performance of embedded systems is through heterogeneous platforms, i.e., using hardware containing more than one type of processor, like CPU + GPU or CPU + FPGA. This approach has shown improved performance, particularly in the domain of artificial intelligence, in which computationally demanding models must be trained and e...
Artificial intelligence enabled systems have been an inevitable part of everyday life. However, efficient software engineering principles and processes need to be considered and extended when developing AI- enabled systems. The objective of this study is to identify and classify software engineering challenges that are faced by different companies...
Robotic research is making huge progress. However, existing solutions are facing a number of challenges preventing them from being used in our everyday tasks: (i) robots operate in unknown environments, (ii) robots collaborate with each other and even with humans, and (iii) robots shall never injure people or create damages. Researchers are targeti...
Teaching Distributed Software Development with real distributed settings is a challenging and rewarding task. Distributed courses are idiosyncratically more challenging than standard local courses. We have experienced this during our distributed course, which has been run for 14 consecutive years. In this article, we present and analyze the emergin...
The increasing demands for computing performance have been a reality regardless of the requirements for smaller and more energy efficient devices. Throughout the years, the strategy adopted by industry was to increase the robustness of a single processor by increasing its clock frequency and mounting more transistors so more calculations could be e...
The increasing demands for computing performance have been a reality regardless of the requirements for smaller and more energy efficient devices. Throughout the years, the strategy adopted by industry was to increase the robustness of a single processor by increasing its clock frequency and mounting more transistors so more calculations could be e...
Context: Application of component based software engineering methods to heterogeneous computing (HC) enables different software configurations to realize the same function with different non–functional properties (NFP). Finding the best software configuration with respect to multiple NFPs is a non–trivial task.
Objective: We propose a Software Comp...
Embedded systems are becoming more and more complex, thus demanding innovative means to tame their challenging development. Among others, early architecture optimization represents a crucial activity in the development of embedded systems to maximise the usage of their limited resources and to respect their real-time requirements. Typically, archit...
When choosing components for software intensive systems decisions are made on multiple levels. On the highest level, the component's origin or source is chosen (e.g. In-house versus Components Off-The-Shelf), which answers the question where to get a component from. In this study we investigate how practitioners choose among the component sourcing...
The choice of which software component to use influences the success of a software system. Only a few empirical studies investigate how the choice of components is conducted in industrial practice. This is important to understand to tailor research solutions to the needs of the industry. Existing studies focus on the choice for off-the-shelf (OTS)...
Mission-critical Internet of Things (MC-IoT) systems involve heterogeneous things from both the digital and physical worlds. They run applications whose failure might cause significant and possibly dramatic consequences, such as interruption of public services, significant business losses, and deterioration of enterprise operations. These applicati...
The ability to predict Quality of Service
(QoS) of a software architecture
supports a large set of decisions across multiple lifecycle phases that span from design through implementation-integration to adaptation phase. However, due to the different amount and type of information available, different prediction approaches can be introduced in each...
Establishing and mastering continuous experimentation as an instrument in the portfolio of software product managers is of growing importance resulting in continuous renewal of products for continuous user satisfaction. Product managers for purely software-based products like web-based applications found in online web-shops or smartphone apps can m...
By focussing on Cyber Physical Systems (CPS), this
paper investigates how component-based principles and practices
are used and support the activity of architecting CPS. For doing
so, by running a systematic process, we selected 49 primary
studies from the most important publishers search engines. Those
papers have been analyzed and their contents...
Decision process is often based on multi-faceted and mutually opposing criteria. In order to provide rigorous techniques for problem structuring and criteria aggregation used for classification and ranking of alternatives, Multiple Criteria Decision Analysis (MCDA) has been used as a method to achieve architectural decisions. Even though it has alr...
This book constitutes the refereed proceedings of the 8th International Workshop on Software Engineering for Resilient Systems, SERENE 2016, held in Gothenburg, Sweden, in September 2016.The 10 papers presented were carefully reviewed and selected from 15 submissions. They cover the following areas: development of resilient systems; incremental dev...
This paper deals with task scheduling in heterogeneous distributed embedded computer environments of renewable and timing variable resources. Real-time application performance can be considerably influenced by unexpected events in the environment. The predictive-reactive rescheduling procedure can enable significant improvements. The rescheduling p...
Message exchange between distributed software components in cyber-physical systems is a frequent and resource-demanding activity. Existing data description languages simply map user-specified messages literally to the system implementation creating the data stream that is exchanged between the software components; however, our research shows that t...
Cyber-physical systems like robots and self-driving vehicles comprise complex software systems. Their software is typically realized as distributed agents that are responsible for dedicated tasks like sensor data handling, sensor data fusion, or action planning. The modular design allows a flexible deployment as well as algorithm encapsulation to e...
The sustainability analysis framework enables software developers to specifically consider environmental and social dimensions relative to technical and economic dimensions. The framework helps draw a more comprehensive picture of the relevant quality dimensions and, as a result, improve decision making. Sustainability is achievable only when accou...
Publish/subscribe communication is a common architectural design pattern in component-based software systems used in many of today's cyber-physical systems to exchange information between distributed software components. These systems typically deal with an increased number of data transfers, with a risk of lacking resources. Our recent domain anal...
Software reuse has numerous benefits, including reduced development time, defect density, and increased developer productivity. Numerous approaches to software reuse have been developed and we can divide them into two categories: preplanned approaches, where software artifacts are developed to be reused; and pragmatic approaches, that facilitate th...
The evolution of Cloud Computing motivates teaching this subject to computer science senior students and graduate students so that they can gain broad exposure to the main body of knowledge of Cloud Computing and get prepared for occupations in industry. We started the development of such a course from the end of 2013. To efficiently develop a cour...
Typically, architecture optimization searches for good architecture candidates based on analyzing a model of the system. Model-based analysis inherently relies on abstractions and estimates, and as such produces approximations which are used to compare architecture candidates. However, approximations are often not sufficient due to the difficulty o...
The idea of developing software components was envisioned more than forty years ago. In the past two decades, Component-Based Software Engineering (CBSE) has emerged as a distinguishable approach in software engineering, and it has attracted the attention of many researchers, which has led to many results being published in the research literature....
Software Product Lines (SPL) approach has been widely developed in academia and successfully applied in industry. Based on the selection of features, stakeholders can efficiently derive tailor-made programs satisfying different requirements. While SPL was very successful at building products based on identified features, achievements and preservati...
In the domain of high performance computing, software deployment on heterogeneous distributed processing units has been in practice for many years. However, new hardware technologies, increased complexity of software and significant increase of requirements demand new methods that can manage these concerns in an efficient way. In this paper we prop...
The Software Product Lines (SPL) paradigm has arisen for taking advantage of existing common aspects between different products, while also considering product-specific features. The architecture of a SPL comprises a model that will result in product architectures, and may include solutions leading to bad (architectural) design. One way to assess s...
Growing advances in hardware technologies are enabling significant improvements in application performance by the deployment of components to dedicated executable units. This is particularly valid for Cyber Physical Systems in which the applications are partitioned in HW and SW execution units. The growing complexity of such systems, and increasing...
Cloud Computing is changing the services consumption and delivery platform as well as the way businesses and users interact with IT resources. It represents a major conceptual shift that introduces new elements in programming models and development environments that are not present in traditional technologies. The evolution of Cloud Computing motiv...
A recent development of heterogeneous platforms (i.e. those containing different types of computational units such as multicore CPUs, GPUs, and FPGAs) has enabled significant improvements in performance for real-time data processing. This potential, however, is still not fully utilized due to a lack of methods for optimal configuration of soft-ware...
The technique of virtualization and cloud computing to manage system functionality and resources regardless of their physical locations is changing the way businesses and users interact with IT resources. Although several commercially available virtualization solutions already exist in the market, both for server and embedded real-time based system...
Web applications are one of today's fastest growing software systems. Structurally, they are composed of two parts: the server side, used for data access and business logic, and the client side, used as a user interface. In recent years, with developers building complex interfaces, the client side is playing an increasingly important role. Unfortun...
The world of component-based systems is as appealing as it is challenging. Components, as first-class citizens of component-based systems, serve as the main units of encapsulated functionality and also units of composition, with the intention to improve development efficiency and software quality through reusability, extensibility and analyzability...
Demand for low-power sensing devices with integrated image processing capabilities is increasing, especially for resource-constrained systems such as WSNs. CMOS technology enables the integration of image sensing and image processing, which improves ...
Client-side applications often contain similar features and facilitating reuse could offer considerable benefits in terms of faster de-velopment. Unfortunately, due to the specifics of prevailing technologies, the techniques and tools used to support reuse are not as advanced as in other software engineering disciplines and the main method of reuse...
In many embedded systems types the separation process for deploying the applications as software and hardware executable units, called partitioning is crucial. This is due to the fact that partitioning decisions impact the overall life cycle of the systems. In industry it is common practice to take partitioning decisions in an early stage of the de...
Many types of embedded systems applications are implemented as a combination of software and hardware. For such systems the mapping of the application units into hardware and software, i.e. the partitioning process, is a key phase of the design. Although there exist techniques for partitioning, the entire process, in particular in relation to diffe...
When a project had followed advices from the best practices, we can raise a question whether the success (or failure) of the project came from following (or not following) the best practices, or whether there were additional reasons that led to the positive (or negative) outcome. In this paper we analyze a case of a student project performed as a p...
In software intensive systems the integration becomes complex since both software and hardware components are integrated and run in the execution environment for the first time. Support for this stage is thus essential. Practices for Product Integration are described in different reference models. We have investigated these and compared them with a...
A recent development of heterogeneous platforms (i.e. those containing different types of computing units such as multicore CPUs, GPUs, and FPGAs) has enabled significant improvements in performance processing large amount of data in realtime. This possibility however is still not fully utilized due to a lack of methods for optimal configuration of...
In recent years, there has been a clear trend in research and practice to bring benefits of component based
development into the embedded systems domain. However, one often neglected aspect in component models is support for integration of hardware devices like sensors and actuators. In most component models, communication with such devices is eith...
Most component models currently in use do not try to provide extensive support for dealing with hardware devices like sensors and actuator. Lack of such support means that software components and subsystems often include device- and platform-specific code, limiting our ability to reuse them and forcing us to deal with specifics of underlying hardwa...
In 2012, the International Symposium on Component-based Software Engineering (CBSE) is being organized for the 15th time. This is a great opportunity to take a step back and reflect on the impact of the symposium over these 15 years. Several interesting questions immediately come to mind: What were the main topics of interest in the community? What...
Students and teachers do not necessarily have the same understanding of a course - of the purpose, the objective, and in particular of the course elements - the way the course is performed, the examination procedure, and similar. In distributed-development courses, in which students and teachers are dispersed over different locations, this differen...
Due to increasing complexity of software in embedded systems, the software development requires approaches that can manage that complexity in a similar way as this is done in general-purpose software, but at the same time provide support for embedded systems specifics. In this paper we give a short overview of a component-based approach that meets...
Energy is an important constraint in embedded systems, and there exists a huge expertise in this domain about monitoring, managing and optimizing energy consumption in the computer systems. The aim of this paper is to present the energy management addressed in the research literature. Based on a systematic review, the paper presents a taxonomy of e...
The need for educating future software engineers in the field of global software engineering is recognized by many educational institutions. In this paper we outline the characteristics of an existing global software development course run over a period of nine years, and present a flexible project framework for conducting student projects in a dis...
The most effective setting for training in Global Software Engineering is to provide a distributed environment for students. In such an environment, students will meet challenges in recognizing problems first-hand. Teaching in a distributed environment is, however, very demanding, challenging and unpredictable compared to teaching in a local enviro...
The web application domain is one of the fastest growing and most wide-spread application domains today. By utilizing fast, modern web browsers and advanced scripting techniques, web developers are developing highly interactive applications that can, in terms of user-experience and responsiveness, compete with standard desktop applications. A web a...
Hiding critical information has resulted in disastrous failures of some major software projects. This paper investigates, using a subset of Keil's test, how graduates (70% of them with work experience) from different cultural backgrounds who are enrolled in a postgraduate course on global software development would handle negative information that...
Software evolvability describes a software system’s ability to easily accommodate future changes. It is a fundamental characteristic for making strategic decisions, and increasing economic value of software. For long-lived systems, there is a need to address evolvability explicitly during the entire software lifecycle in order to prolong the produc...
A power consumption of a high performance computer (HPC) system has been an issue lately. Many programming techniques are still relying on performance gain, but only few of them are concerning energy footprint of the increased computing power. MPI and OpenMP are considered as a core scientific HPC programming libraries for distributed-memory and sh...
Highly interactive web applications that offer user experience and responsiveness of standard desktop applications are becoming prevalent in the web application domain. However, with these benefits come certain drawbacks. For example, the event-based architectural style, and poor support for code organization, often lead to a situation where code r...
In the last decade, a large number of different software component models have been developed, with different aims and using different principles and technologies. This has resulted in a number of models which have many similarities, but also principal differences, and in many cases unclear concepts. Component-based development has not succeeded in...
More and more systems are developed from components instead of from scratch. Reusing components has many advantages: The development time dramatically decreases, the usability of the products increases, the production costs usually decrease, and so on. However, there is a big difference between a "classic" and component-based development, and there...
This paper gives a short overview of the talk related to the challenges in software development of resilient systems. The challenges come of the resilience characteristic as such; it a system emerging lifecycle property, neither directly measurable nor computable.While software is an essential part of a system, its analysis not enough for determini...
Software engineering (SE) conference in 1968, Doug Mc Ilroy introduced the concept of software components during his keynote speech, "Mass-Produced Software Components." That components hold such an esteemed place in SE history should come as no surprise: componentization is a fundamental engineering principle. Top-down approaches decompose large s...
A look at 10 case studies addresses the technological, personnel, and organizational challenges. The 10 cases involved seven organizations in different business sectors. Our data collection methods included our participation in projects, several rounds of interviews with project leaders and software architects, and several rounds of questionnaires...
PROGRESS is a project and strategic research centre at Mälardalen University in Sweden that is funded for 2006-2010 by the Swedish Foundation for Strategic Research (SSF). PROGRESS research targets embedded software in the vehicular, automation, and telecom domains, focusing on the areas of component technology, verification and analysis for predic...
In this paper we discuss challenges faced in conducting distributed student projects within a scope of a distributed software development university course. Student motivation and demotivation factors, along with perceived cultural differences, are identified and analyzed on the basis of data collected from a number of student projects.
As component-based software engineering is growing and its usage expanding, more and more component models are developed. In this paper we present a survey of software component models in which models are described and classified respecting the classification framework for component models proposed by Crnković et. al. [1]. This framework specifies...
Teaching Distributed Software Development (DSD) is a challenging task. A convincing simulation of distributed environment in a local environment is practically impossible. Teaching DSD in distributed environment is more realistic since the students directly experience all its specifics. However, teaching in distributed environment, in which several...