The success of software engineering projects largely depends on complex decision-making. For example, which tasks should a developer do first, who should perform this task, is the software of high quality, is a software system reliable and resilient enough to deploy, etc. However, erroneous decisionmaking for these complex questions is costly in terms of money and reputation. Thus, Artificial Intelligence/Machine Learning (AI/ML) techniques have been widely used in software engineering for developing software analytics tools and techniques to improve decision-making, developer productivity, and software quality. However, the predictions of such AI/ML models for software engineering are still not practical (i.e., coarse-grained), not explainable, and not actionable. These concerns often hinder the adoption of AI/ML models in software engineering practices. In addition, many recent studies still focus on improving the accuracy, while a few of them focus on improving explainability. Are we moving in the right direction? How can we better improve the SE community (both research and education)? In this tutorial, we first provide a concise yet essential introduction to the most important aspects of Explainable AI and a hands-on tutorial of Explainable AI tools and techniques. Then, we introduce the fundamental knowledge of defect prediction (an example application of AI for Software Engineering). Finally, we demonstrate three successful case studies on how Explainable AI techniques can be used to address the aforementioned challenges by making the predictions of software defect prediction models more practical, explainable, and actionable. The materials are available at https://xai4se.github.io.
Several socio-economic trends are driving customer demands towards individualization. Many suppliers are responding by offering supplier-led software product design customization choices (“mass customization”). Some are also offering customer-led software product design choices (“mass personalization”). This tutorial introduces these concepts and explores the implications for software product line development. One particular technical challenge is being able to respond to and manage at scale the increasing variety of common, supplier-led and customer-led features. We will discuss two different approaches to address this challenge. One is grounded in feature modelling, the other in case-based reasoning, where the latter relies on measuring similarities. We will then describe a specific product similarity evaluation process in which a product configured from a product line feature model is represented as a weighted binary string, the overall similarity between products is compared using a binary string metric, and the significance of individual feature combinations for product similarity can be explored by modifying the weights. We will illustrate our ideas with mobile phone worked examples, and discuss some of the benefits and limitations of this approach.
Enterprises are increasingly moving their production workloads to the cloud to take advantage of capabilities, such as streamlined provisioning of infrastructure and services, elasticity, scalability, reliability, and security. To leverage such capabilities, monolithic applications typically have to be decomposed to cloud-native architectures, such as microservices. A microservice encapsulates a small and well-defined set of business functionalities and interacts with other services using lightweight mechanisms, often implemented as RESTful APIs. A recent report shows that only 20% of the enterprise workloads are in the cloud, and they were predominately written for native cloud architectures. This leaves 80% of legacy applications onpremises, waiting to be refactored and modernized for the cloud. In this tutorial, we will discuss the motivation—supported by illustrative industrial case studies—for modernizing and migrating legacy applications to cloud. We will then present a detailed tool-supported approach for transforming a monolithic Java application into microservices. This will be followed by a handson virtual lab, where participants will have the opportunity to apply the learned concepts on a real-world enterprise application. Finally, we will conclude the tutorial with a discussion of promising directions for future research more broadly in the area of application modernization.