Basic Programming is one of the compulsory modules offered among computer science major and non-major students. Unfortunately, learning to programming can be difficult for many novice programmers. These students face numerous challenges and barriers while attempting to solve programming problems. To try to fix these issues, educational institutions (universities, institutes, colleges, schools) have been adopting intelligent tutoring systems (ITSs) to teach programming, which can provide students with personalized feedback (in the form of hints) of students’ solving process in programming exercises. Generally, constructing a domain model is an important step in the development of an ITS. In the existing literature, the domain modes can be constructed by the most systems. These systems use manually constructed domain models to generate feedback. However, this typically requires significant knowledge engineering effort and time-consuming. In the domain of programming, where most problems have several alternative solutions with many possible implementations. As a result, such domain models are difficult to create and are only usable for a limited set of well-defined problems (there is a bound is placed on the syntax or standard library functions that are allowed in a solution). The use of data-driven techniques to develop these ITSs is just starting to be explored in the field. Given that this is still a relatively new research field, any challenges are still remained unsolved. The main object of this chapter is to review and classify analysis techniques that are requested to generate data-driven hints in ITSs for programming. This chapter also highlights the possible future research directions in this field.