Software defect prediction is a much talked about open problem in classification. Much prior work has been done in this field, ranging from novel algorithms to literature reviews\cite{prior2,prior3,prior1}. Most approaches to software defect prediction involve static code metrics such as the McCabe\cite{mccabeMetrics} metrics, Halstead\cite{halsteadMetrics} metrics, and lines of code counts. There is some evidence to show that the information contained within the code metrics is insufficient to represent the structure within the data\cite{codeMetricsBad1}. 

Classifiers are also often augmented by clustering algorithms\cite{clusForClas3,clusForClas1,clusForClas2}. Clustering algorithms find the clusters within the global space, which can then be used in training various classifiers. A cluster contains data which is similar within the cluster, while being dissimilar to data in other clusters. This similarity represents the localization of the data. They help to decrease the noise, and find the relevant data. When coupled with a classification algorithm, clustering can increase the Probability of Detection, and decrease the Probability of False Detection\cite{GAC}.

There is a wide variety of classification algorithms, each with individual strengths and weaknesses. In this chapter, I will describe some of the basics of software defect prediction. Next, I will cover the concept of locality. Third, I will detail the Burak filter, a relevancy filter. Following, I will explain the operation of several localized and global classification algorithms such as: RIPPER, C4.5, OneR, Ridor, and Naive Bayes. A home grown solution called Clump is explored in \chap{clump}. Finally, I will also explore three clustering algorithms: Cover Trees, KD Trees, and Ball Trees.
