Well, that's it. The TOP lecture (techniques and tools for programming) is over for this year. That's what I was waiting for to update the slides distributed on my web page (I expect my students to assist the lectures, and don't want to help them not doing so). This lecture went from 112 slides last year to 214 slides this year. I guess it shows how much I improved and completed this recently. It also explains the overhead I had wrt to teaching in December/January...

The agenda of this lecture is given below. The slides, work sheets and lab assignments can be found here. I also distribute the teacher version of the work sheets and assignments. They are mainly aimed at my colleagues and the TA animating the lecture with me, but can reveal helpful to others too. Only the slides are in English, sorry.

### Chapter 1: Practical and Theoretical Foundations of

• Introduction (From the problem to the code; Computer Science vs. Software Engineering)
• Designing algorithms for complex problems (Composition; Abstraction)
• Comparing algorithms' efficiency (Best case, worst case, average analysis; Asymptotic complexity)
• Algorithmic stability
• Conclusion

### Chapter 2: Iterative Sorting Algorithms

• Problem Specification
• Selection Sort
• Insertion Sort
• Bubble Sort
• Conclusion

### Chapter 3: Recursion

• Introduction
• Principles of Recursion (First Example: Factorial; Schemas of Recursion; Recursive Data Structures)
• Recursion in Practice (Solving a Problem by Recursion: Hanoi Towers; Classical Recursive Functions; Recursive Sorting Algorithms)
• Avoiding Recursion (Non-Recursive Form of Tail Recursion; Transformation to Tail Recursion; Generic Algorithm Using a Stack)
• Back-tracking
• Conclusion

### Chapter 4: Correction of Software Systems

• Introduction
• Specification
• Hoare Logic
• Proving Recursive Functions
• Conclusion

### Chapter 5: Testing

• Introduction
• Testing Techniques (White Box Testing; Black Box Testing)
• Testing Strategies (Unit Testing; Integration Testing; Regression Testing; Acceptance Testing)
• Testing in Practice (JUnit; Right BICEP + CORRECT)
• Other Techniques for Practical Software Correctness (Design By Contract; Fuzzing; Formal Methods)
• Conclusion

That's quite a lot of material, for sure. Moreover, it targets beginners in computer science: some of them never heard the word Unix before last September, and almost none of them ever programmed before that date. It went however quite good, I'm happy. I now have to rank the exam as I said previously: Partiel ce matin.

And now, I stop using that useless blog to loose time and go rank the other exam I have waiting, for SDR.