Now if there is one class you should make sure you actually learn throughout your software engineering studies at McMaster University - it is this one. SFWR ENG 3A04 is one of the most fundamental classes to software engineering and teaches you about designing large scale software systems.
This is what software engineers do in the real world.
The course starts off with teaching the basics of designing classes/modules, which is in general - UML. This overlaps with SFWR ENG 3RA3 to the point where the two professors are literally using the same slides. Following that, the course moves on into software architectures and how to select the appropriate architecture for a problem at hand. This is the
key thing all software engineers should understand. You learn about some of the very key architectures used in all software systems today, such as MVC (for web applications) and Black-Board (for decision supporting systems). Pretty much any software system in existence is some sort of mash-up of the architectures you will learn about.
Beyond that, you will learn some pretty concrete design principles (again crossing over with SFWR ENG 3RA3) which for example include "A security feature should not be secure because of concealed functionality", meaning that your security feature shouldn't only be secure because nobody knows how it works. There are a lot more of these simple yet important design principles you will learn.
That about covers the content of the course. Here is what the breakdown was when I took it:
40% - 4 assignments/deliverables
20% - Midterm
40% - Final Exam
The professor I had for this course was Dr. Khedri and he was great (just as he was in 2FA3). Everything was pretty fairly marked. He gave random quizzes to encourage students to come to class, which if you were listening in prior classes, were extremely easy. Each quiz was worth one percent and for each one he did, he reduced the weighting of the final exam by 1%. We got it down to 36% (4 quizzes) when I took it.
The unique part about this course is the assignments - they're all in groups. The assignments are actually deliverables in a massive project where you design a software system from the ground up - learning which steps to take for each deliverable as the class progresses. The first deliverable was writing software requirements (what your software must do/be), the second is an architecture design (laying out the classes, abstractly talking about what you're going to do), the third is actually designing it in detail (over 9000 UML diagrams), and the fourth is actually implementing it. The thing you're actually making is up to Dr. Khedri. In my year, we had to make a task manager.
Unfortunately when I took this course, I had a horrible experience with the assignments. The groups were selected based on people's cumulative GPAs by the registrar. The idea was the average GPAs of the groups would be relatively equal. I had a 10.9 GPA at the time, so I got placed with the worst of the worst - two people who had been reinstated (one of them twice), a guy who was planning on switching out of engineering and a guy who just didn't care about school. Basically, I ended up doing around 80% of this project myself and having several arguments outside of class with the professor and my TA. It was god awful and something I would never want to do again. We ended up doing pretty good on all the deliverables, except the last one because none of the morons in my group understood object oriented programming and I simply didn't have the time to write everything myself. So ya, as long as you're average in GPA... you should be fine :p.
The midterm and final exam ended up being pretty easy. Most of the questions were "Here's a problem. What architecture would you use to build a software system to solve this problem and why?" Basically stuff you couldn't get wrong if you had a solid argument. Other than that, the rest was just definitions and a few diagrams.
Overall, even though I had a crap group, I would say I learned a lot. The textbook for this course is really boring, but it is very informative and worth reading all the way through. For both the midterm and exam I just stayed up all night reading the book and I did fine.
Got a 12 in the end
. Just pay attention, don't mess up any of your deliverables (Dr. Khedri will make you do them again) and you will be fine.