This paper discussed ways in which students can be taught to test software effectively. It is based on the authors' experience of teaching software engineering on range of MSc, BSc, HND and professional courses, both fulltime and part-time. The approaches used by the authors are described and are used to raise discussion points on possible alternative approaches. Software Quality is used as a theme in the design of courses, with the emphasis on building quality into the software throughout the development cycle. This raises issues of how best to give students an understanding of the place of testing in this context. The languages that the students will meet first are third generation languages, and their early experience of testing is done with relatively small programs. Much of the literature on testing, and most of the available software tools also relate to third generation languages. Effective testing of large programs in these languages must also be considered. The transfer of 3GL skills to the testing of 4GL programs is also considered and the testing of programs relating to different programming paradigms, such as object-oriented programming and logic programming is discussed.