Prerequisites¶
This is not an introductory programming course.
Expected knowledge¶
Students should already be comfortable with:
- object-oriented programming and polymorphism;
- interfaces/abstract classes and dependency management;
- unit testing;
- Git and basic collaborative development;
- reading UML class/sequence diagrams;
- basic software architecture terminology;
- data structures and algorithms.
Recommended for the automation track¶
The following are useful but can be learned during the project:
- Python for analysis scripts;
- parsing/AST libraries;
- graph algorithms and graph representations;
- software metrics;
- basic statistics and experimental design;
- introductory machine learning;
- containers for reproducible experiments.
Diagnostic exercise¶
Before the course, you should be able to explain why the following design can become difficult to change:
class CheckoutService {
MySqlConnection db;
StripeClient stripe;
SmtpClient email;
void checkout(Order order) {
// validate, price, persist, charge, notify, log, retry ...
}
}
A graduate-level answer should go beyond “violates SRP.” It should identify change reasons, dependency direction, test seams, transaction boundaries, failure modes, and plausible refactoring options.