CS 384 Midterm Review

Good luck on your midterm this coming Monday, February 27. Your guest proctor Ben will pass out and collect exams, but will not be allowed to answer questions -- do your best to interpret the questions for yourselves.

The midterm examination in this class (CS 384) is an opportunity for you to think about what we've been doing, and what we are going to do. The questions do not emphasize memorization, but instead focus on integration and analysis. Three sample midterms are provided here with example questions for you from past semesters. Note that some of them may ask questions from a later point in the semester, over topics we haven't talked about yet. You can figure your midterm will emphasize topics where I've asked you to do work, or where I have presented materials on a subject in class. For example, anywhere on an old exam that SVN or CVS or Git were mentioned, you might expect a question on Mercurial. Another difference between these examples and your exam is that two of them are take-home exams, which generally might have more questions or expect longer answers than I will expect on Monday in a two-hour exam.

Midterm Exam Review

Recommended procedure: scan through lecture notes up to this point. Read the Bruegge on testing (chapter 11) and measurement/metrics (what little there is). Work hypothetical questions from past midterms (1 2 3). Note that two of the past midterms were "take-home" exams; this year the midterm will be in class.

Dr. J's crude summary of lecture notes up to this point:

mapping UML models to code
if you are coding without consulting your software design, you are missing an important point. but how do you turn a diagram into code? Review for various UML diagram types, how to implement them.
pair programming
you were supposed to try it, seriously, and learn about it, whether you liked it or not. know the pros and cons.
test driven development
ditto as per "pair programming". This too is a core agile method.
software testing
testing for different kinds of errors, unit tests, integration tests, system tests, black box tests, white box tests, regression tests...
test plans and test cases
documenting how to test, documenting a test outcome. If you have done this and results are in SVN, then you probably learned how.
unit test automation tools
how to use them. how many tests are needed per unit.
coverage testing
statement coverage, (interesting subsets of) path coverage
inspections and walkthroughs
another kind of "software testing", sort of. Roles and objectives.
models of integration testing
big bang, bottom up, top down, and sandwich style

Highlights a Past Midterm Exam

The following are some things written by students in a past midterm. How much would be true of our project and teams? I have inserted some opinions for some of the comments.
We are using a "communist" model, we do not have decision makers
Real communists have no problem making decisions.
A management/design/integration team should be formed to keep track of decisions that were made
This is not a bad idea but is needed more in larger scale (> 8) teams.
The easiest way to keep everyone informed would be a required weekly progress report from each team, posted on a webpage, indicating what has been done, what problems they have, and what changes and decisions they've made.
Teams this semester do not seem to have this problem, although I worry about sprint planning meetings in which subteams spend the whole time chatting independently from the rest of their team, and not planning or coordinating with their teammates. For some teams the status/ reports mechanism is not public enough, not shared enough, or not persistent enough. A wiki is one option. Another would be to put it in the repository in the teams' docs/ dirs?
The design we did last semester was definitely not complete.
Still VERY true, heh heh.
"I did not even look at the design documents before I started my [part of the project], because they were not useful".
This is just sad.
"Many of the teams do not have unit tests in the repository."
Uh oh, still true.
object oriented paradigm doesn't lend itself to unit testing ?!
Patently absurd.
"The unit tests that are there are trivial"
Uh oh, probably still true.
Some general confusion about requirements vs. design vs. implementation
Um, yeah.
I have not taught you guys about coverage testing very well
Ouch. Still true. Can't ask much about things not covered in detail.