## 1 Introduction  
Studies have estimated that about 36 billion electronic devices would connect to the internet by 2021 [1] and about 54% of the world population would be online using software of various kinds [2]. The volume of software in terms of lines of code is estimated to be remarkably high--for example, the size of a typical iPhone application is estimated to be about 10-15 thousand lines of code, and the size of Google's code base to be about two billion lines of code [3]. Since the quality of human life has become dependent on computing devices and the software they run, it becomes quite important to ensure high quality within the high volume of software produced [3]. Building the software is a unique engineering effort and it involves four distinct characteristics of complexity, conformity, changeability, and invisibility, each of which has the potential to introduce defects in the software produced [4]. A research has listed multiple adverse economic and social situations caused by defective software including-\"a software defect in converting measurement units\" leading to the loss of NASA's Mars climate orbiter which was worth $125 million, \"a numeric overflow error\" crashing the Ariane 5 rocket whose development cost was about $8 billion and \"a software defect\" causing the largest non-nuclear explosion in the former Soviet Union [5]. A study shows that software quality assurance (SQA), an activity that helps preventing software defects such as the ones listed above, is quite expensive to deploy and operate [3]. Research shows that in the year 2018, about $4 trillion were spent on IT and telecom systems development [6] and about $2.84 trillion was attributed to the cost of poor software quality in the USA region alone [3]. The same research estimated that about 37% of the cost of poor quality is attributed to software failures and about 17% is to find and fix software defects [3]. Software quality assurance is a collection of activities performed by software developers to ensure that the software produced meets a specific quality standard. With research highlighting a high cost of poor software quality, there is a need to prioritize SQA activities to eliminate maximum number defects with a minimum spend on resources [7]. One such activity would be to isolate parts of the software that is more prone to defects. Such a process of determining areas of a software system that may contain software defects is called _software defect prediction_ (SDP) [7]. It is also called as _defect prediction in software_ (DeP) by some authors [8]. It should be noted that the ultimate objective of SDP is defect removal and SDP is not the only defect removal method [7]. There are several other defect removal methods including model checking [9], static analysis [10], fault localization [7], etc. The main difference between them and SDP is that these methods help identifying defects in the current codebase whereas SDP \"... warms about future defect-prone areas... \" as well [7]. SDP needs a dataset consisting of software features such as afferent coupling (Ca), Class Leaf Depth (CLD), Coupling between Objects (CBO), Efferent Couplings (Ce), Lines of Code (LOC), Number of Weighted Methods (WMC), Response for a Class (EFC), etc. These features could be captured either at class level or method level. An SDP model is built by selecting the best combinations of these software features. Employing a labelled training dataset (having an indication whether the software module is defective or not), the SDP model is trained to detect relation between input software features and the output defect indication. A trained SDP model is run on the software feature dataset of the software under development to classify software modules as defective or non-defective. In earlier years, several statistical models were proposed to locate defect prone modules of software under development [11]. Recently, machine learning, search-based and hybrid artificial intelligence techniques are commonly proposed for SDP.