Cardiovascular Diseases (CVDs) diagnosis requires an expert interpretation of ECG (Electrocardiogram). The ECG is an essential tool that is used to diagnose CVDs for medical treatment to take place. The ECG represents the electrical events of the cardiac cycle which coordinates the contraction and relaxation of the heart chambers to circulate oxygenated and deoxygenated blood. Automation of ECG classification is considered recently to accelerate the diagnoses process and enable continuous monitoring to detect abnormalities in heart functions. ECG classification problem comes with some challenges that need to be considered such as noise, feature extraction, segmentation, and classification. This review article discusses various techniques of classification in a machine, deep, and transfer learning context as well as it considers various denoising methods to enhance the performance of different classifiers. These different classifiers are trained and tested by various and different data sets which may affect their performance as well as the number of classification classes.