CSCI3100 Software Engineering - CUHK Course Review

Term Taken: 2020 Spring

Remote Teaching due to COVID19

Instructor: Prof. Lyu Rung Tsong Michael

Grading Scheme

  • 6 written assignments (20%)
  • Group project - (free topic) web application (40%)
  • Final exam (40%)

Midterm exam cancelled due to COVID-19


Fundamentals of Software Engineering. (Ghezzi, Jazayeri, Mandrioli)

Topics Covered

  • Software life cycle.
  • Software qualities.
  • Software engineering principles.
  • Software specification: UML, DFD, FSM, petri-net, logic spec, ER-diagram.
  • Software design: design patterns, step-wise refinement, TDN.
  • Software testing and analysis.

Covered in tutorials:

  • Web client side intro.
  • Web server side intro.
  • Android dev intro.


This is a required course for both CS Major, CS Minor, and CE Major, so there were up to 250 students in the class. Holy Moly. It taught us the more theoretical side of software engineering, which I disliked a lot since I always got bored when studying pure theory. Aside from that, software engineering’s theory was mostly based on heuristics and was seldom rigorous, this doubled the boredom. I just don’t get how studying terms like “rigor and formality”, “incrementality”, “portability”, “interoperability, and “ideal/complete/finer test set” could improve our software engineering skills.

Another focus of the course was to learn specification techniques in software engineering. This included UML, DFD, FSM, Petri-net, logic specification, and ER diagram. This part was more useful, since we got a lot of chance practicing the techniques we studied when doing assignments and writing the specifications of the group project. However, I haven’t really worked in the industry before, so I don’t know whether the software engineering companies really write their specifications this way. Nevertheless, I think we got a chance to understand deeper the structural design of our programs (or not, I don’t know actually).

The last part of the course is software testing. I got really excited at first since I always wanted to hone up my software testing skills, but after the lectures, I was slightly disappointed since the focus was again on the more theoretical side of software testing. We were introduced to McCabe’s cyclomatic number, white-box testing, black-box testing, and other not-too-practical ideas. We only got the chance to analyze a program and write some test sets using pen and paper instead of exercising a real software testing process.

The assignments of the course were kind of tedious. Each of the assignment contains 4 usually open-ended questions. (Students could get homework coupons by answering questions in class, each of it could be used as a waiver for one homework question.) Although there were only 4 questions, we usually need to draw tons of diagrams for each of them, so spending 5 or more hours on a single assignment is not exaggerating. Also, the questions of the homework were always too ambiguous, so we had to spend a lot of time just to understand the questions. In short, I hated the assignments.

The group project was the spotlight of the course. We grouped in a team of 4-5 people and worked on a web application idea of our own choice. If you’ve ever attended a hackathon before, it was pretty much like it, except we had to write rigorous specifications of our project, and the project timeline was 13 weeks. In this term, due to COVID-19, we had to do the project remotely, so it was a little harder. Usually there were 1-2 free-riders per group on average, and for our group there was a Mainland Chinese student who simply couldn’t contact us since we were using What’s App and Google Doc to communicate and he was blocked by the Great Firewall of China and he probably didn’t know how to use VPN. Free-riders were reportable to the professor, but we let our poor group mate pass for the sake of karma.

The course didn’t teach us any web application skills, so we had to learn frontend, backend, and database all by ourselves. For our group, we decided to make a bus management system including an administrator’s web client, an end user’s mobile client, and a backend which connects the clients to the database. The technology to use is also free of choice, so our group used Go, PostgreSQL for backend, Bootstrap for web client, and React Native for mobile client. It was interesting to look at the technologies used by other groups, including Vue, Flutter, Node, Typescript, Ruby on Rails, Django, PHP, and so on. The most painful part of the project was that we had to write a design report at the beginning and final report at the end, which contained UML, DFD, and other specification techniques taught in the lecture. The final report should be 30+ pages, and for our group, the final version of the report was over 60 pages long. It was impossible to do it alone, so group mates were very important. Aside from that, we needed to do a short project demo at the end of the course to demonstrate that the project was fully operable (that is, we didn’t lie in our reports).

In conclusion, I don’t think the course was interesting and useful except for the group project. However, since this is a major and minor required course, welp

Project Link


More CUHK Course Reviews