Table of contents : Foreword Preface Acknowledgment Contents Contributors 1 Introduction 1.1 Introduction 1.2 The Rise of Artificial Intelligence 1.3 AI4SE: Artificial Intelligence for Software Engineering 1.4 Organisation of This Book 1.4.1 AI for the Software Development Process 1.4.2 Background on Metaheuristics and Machine Learning References Part I Planning and Analysis 2 Artificial Intelligence in Software Project Management 2.1 Introduction 2.2 Software Project Scheduling (SPS) 2.2.1 AI Approaches for SPS 2.2.2 Running an AI Algorithm for SPS 2.3 Software Effort Estimation (SEE) 2.3.1 AI Approaches for SEE 2.3.2 Running an AI Algorithm for SEE 2.4 Conclusion References 3 Requirements Engineering 3.1 Introduction 3.2 Requirements Engineering 3.3 Use Case About Requirements Elicitation 3.3.1 The Problem of Requirements Elicitation from User Feedback 3.3.2 A Solution to Requirements Elicitation Based on NLP Techniques 3.3.3 Identifying Speech Acts 3.3.4 Training a Classifier 3.3.5 Applying on Two Case Studies 3.3.6 Discussion 3.4 Use Case About Requirements Prioritisation 3.4.1 The Problem of Requirements Prioritisation Using User Feedback 3.4.2 A Solution to Requirements Prioritisation Based on Genetic Algorithms 3.4.3 Applying the Prioritisation Method 3.4.4 Discussion 3.5 The Two Use Cases in a Requirements Management Process 3.6 Discussion 3.7 Conclusions References 4 Leveraging Artificial Intelligence for Model-based Software Analysis and Design 4.1 Introduction 4.2 Background 4.2.1 Model-Driven Engineering: Models, Meta-models, and Model Transformations 4.2.2 Running Example 4.2.3 Selected Applications of AI for Model-Based Engineering Problems 4.3 Optimizing Models with AI Techniques: Two Encodings for the Modularization Case 4.3.1 Model-based versus Transformation-based Encodings: An Overview 4.3.2 Model-based Approach 4.3.3 Transformation-based Approach 4.3.4 Synopsis 4.4 Conclusion and Outlook References Part II Development and Deployment 5 Statistical Models and Machine Learning to Advance Code Completion: Are We There Yet? 5.1 Introduction 5.2 Code Completion with Software Mining 5.2.1 Frequent Pairs or Sets as Code Patterns 5.2.2 Graphs of Code Elements as Code Patterns 5.2.3 Leveraging Editing History for Code Completion 5.2.4 API Code Recommendation Using Statistical Learning from Fine-Grained Changes 5.3 Code Completion with Statistical Language Models 5.3.1 N-Gram Language Model 5.3.2 Lexical Code Tokens and Sequences 5.3.3 Lexical N-Gram Model for Source Code 5.3.4 Semantic n-Gram Language Model for Source Code 5.3.5 Code Suggestion with Semantic N-Gram Language Model 5.3.6 Graph-Based Statistical Language Model 5.4 Deep Learning for Code Completion 5.4.1 Deep Neural Network language Model 5.4.2 Recurrent Neural Network Language Model 5.4.3 Deep Neural Network Language Model with Syntactic and Type Information 5.4.4 Other Neural Models for Code Completion 5.5 Conclusion References 6 Cloud Development and Deployment 6.1 Introduction 6.2 Open Problems in the Context of Software Configuration, Integration and Transition 6.2.1 Open Problems and Suitable AI Techniques 6.2.2 The QoS-aware Web Service Binding Problem 6.2.3 Optimal Configuration Selection Problem in HCSs 6.3 Solving the QoS-aware Web Service Binding Problem 6.3.1 Path Relinking 6.3.2 Objective Function 6.3.3 Solution Encoding 6.3.4 Constraints Handling 6.3.5 GRASP Building Phase 6.3.6 GRASP Improvement Phase 6.3.7 Adaption of Path Relinking 6.3.8 Running Example 6.4 Solving the Optimal Configuration Selection Problem in Highly-Configurable Systems 6.4.1 Solution Encoding 6.4.2 Constraints Handling 6.4.3 Objective Functions 6.4.4 Operators 6.4.5 Running Example 6.5 Conclusions and Future Trends References Part III Testing and Maintenance 7 Automated Support for Unit Test Generation 7.1 Introduction 7.2 Example System—BMI Calculator 7.3 Unit Testing 7.3.1 Supporting Unit Testing with AI 7.4 Search-Based Test Generation 7.4.1 Solution Representation 7.4.2 Fitness Function 7.4.3 Metaheuristic Algorithms 7.4.4 Examining the Resulting Test Suites 7.4.5 Assertions 7.5 Advanced Concepts 7.5.1 Distance-Based Coverage Fitness Function 7.5.2 Multiple and Many Objectives 7.5.3 Human-Readable Tests 7.5.4 Finding Input Boundaries 7.5.5 Finding Diverse Test Suites 7.5.6 Oracle Generation and Specification Mining 7.5.7 Other AI Techniques 7.6 Conclusion References 8 Artificial Intelligence Techniques in System Testing 8.1 Introduction 8.2 System Testing 8.3 Application of AI in System Testing 8.3.1 Classification Scheme 8.3.2 Test Optimization 8.4 Industrial Case Study 8.4.1 Motivation 8.4.2 Industrial Context 8.4.3 Detecting Test Case Similarity Using Natural Language Processing 8.4.4 Clustering Similar Test Cases Using Unsupervised Machine Learning 8.4.5 Data Processing and Visualization 8.4.6 Test Optimization Strategies 8.5 Levels of Autonomy of AI in System Testing 8.6 Conclusion References 9 Intelligent Software Maintenance 9.1 Introduction 9.2 Background 9.2.1 Anti-patterns 9.2.2 Convolutional Neural Networks 9.2.3 Regularisation 9.3 CAME: Convolutional Analysis of code Metrics Evolution 9.3.1 Input 9.3.2 Architecture 9.3.3 Training 9.3.4 Evaluation of CAME 9.3.5 Impact of Metrics History's Length on the Performance of CAME 9.3.6 Comparison of CAME with Existing Techniques 9.4 NLP2API: A Query Reformulation Technique for Improved Code Search 9.4.1 Development of Candidate API Lists 9.4.2 Borda Score Calculation 9.4.3 Query-API Semantic Proximity Analysis 9.4.4 API Class Relevance Ranking and Query Reformulation 9.4.5 Evaluation of NLP2API 9.5 Conclusion References Part IV AI Techniques from Scratch 10 Metaheuristics in a Nutshell 10.1 Introduction 10.2 Background: Formal Definitions 10.2.1 Optimisation Problem Definition 10.2.2 Multi-objective Optimisation Problems 10.2.3 Metaheuristics Definition 10.3 Taxonomy 10.3.1 Constructive Heuristics and Local Search Methods 10.3.2 Trajectory-Based and Population-Based Metaheuristics 10.4 Trajectory-Based Metaheuristics 10.4.1 Hill Climbing 10.4.2 Iterated Local Search 10.4.3 Variable Neighbourhood Search 10.4.4 GRASP 10.4.5 Tabu Search 10.4.6 Simulated Annealing 10.5 Population-Based Metaheuristics 10.5.1 Evolutionary Algorithms 10.5.2 Swarm Intelligence 10.5.3 Multi-objective Algorithms 10.6 Methodology for Evaluating Results 10.6.1 Quality Indicators 10.6.2 Statistical Analysis Procedure 10.7 Conclusions References 11 Foundations of Machine Learning for Software Engineering 11.1 Introduction 11.2 The ML Pipeline 11.2.1 Overview 11.2.2 Data Preprocessing 11.2.3 Learning from Data 11.3 Classification 11.3.1 Algorithms 11.3.2 Evaluation 11.4 Regression 11.4.1 Algorithms 11.4.2 Evaluation 11.5 Clustering 11.5.1 Algorithms 11.5.2 Evaluation 11.6 Deep Learning 11.6.1 Convolutional Networks 11.6.2 Recurrent Networks 11.6.3 Autoencoders 11.6.4 Other Deep Learning Models 11.7 Conclusions References