




Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Community
Ask the community for help and clear up your study doubts
Discover the best universities in your country according to Docsity users
Free resources
Download our free guides on studying techniques, anxiety management strategies, and thesis advice from Docsity tutors
The final exam for the CSE 403 Software Engineering course at the University of Washington in Spring 2014. It contains 26 questions and is worth 100 points. The exam is closed book and closed notes, and students have 50 minutes to complete it. The exam covers topics such as refactoring, code review, and design diagrams.
Typology: Exams
1 / 8
This page cannot be seen from the preview
Don't miss anything!
This exam is closed book, closed notes. You have 50 minutes to complete it. It contains 26 questions and 8 pages (including this one), totaling 100 points. Before you start, please check your copy to make sure it is complete. Turn in all pages, together, when you are finished. Write your initials on the top of ALL pages (in case a page gets separated during test-taking or grading). When you are asked for multiple answers, give answers that are as different as possible, and give the most important answers. Please write neatly; we cannot give credit for what we cannot read. Good luck!
Initials: Solutions 2 MULTIPLE CHOICE
1 True/False
(2 points each) Circle the correct answer. T is true, F is false.
2 Multiple choice
(5 points each) Mark all of the following that can be true, by circling the appropriate letters.
(a) Is the code correct? This is a goal, but not a mail goal. Also, it’s too hard to definitively answer in a code review. (b) Is the code understandable?
(c) Are the tests testing the right thing? (d) Producing new test cases (e) Producing fixes/patches for bugs
(a) A “parent” element contains or owns zero or more “child” elements. (b) A strong life cycle dependency. (c) Shared possession. (d) At least one class in the relationship depends on the other (in the UML sense of depen- dency). (e) Both classes in the relationship depend on the other (in the UML sense of dependency).
Initials: Solutions 4 DESIGN PATTERNS
4 Design patterns
Give each answer in one sentence or less.
Initials: Solutions 5 DESIGN DIAGRAMS
5 Design diagrams
We accepted many answers. Common mistakes were making no association be- tween OrderItem and Product, multiplicities that seemed incompatible with the design of the system, and improper use of UML symbols.
Initials: Solutions 6 SOFTWARE ENGINEERING METHODOLOGY
6 Software engineering methodology
(a) Look for similar problems in other parts of your code. (b) Perform a postmortem; change your process/practice to avoid that kind of mistake in the future. (c) Write tests and/or add monitoring in case you do commit this or a similar error in the future.
We did not accept “put the bug in the issue tracker, because not all bugs (for example, those found during development) need to be added to the issue tracker, and because that practice is not as important as the ones listed above.
(a) Increases the bus number. Ensures that more people know the code. Teaches (new) employees about the abstractions, techniques, and patterns used by the system. (b) Teaches every team member about design and programming practices and tricks they might not know.
“Improve the documentation” is not a correct answer. That’s part of the code, or else is a separate thing that is being reviewed in its own right.
Initials: Solutions 6 SOFTWARE ENGINEERING METHODOLOGY
(a) Creativity: more ideas to choose from, more likely to choose a good one and not get stuck. (b) Quick feedback, avoid poor design/implementation decisions. There are fewer bugs because two pairs of eyes are looking at and thinking about the same code. Catching bugs earlier is cheaper. Less need to go back and rework, which is slow and costly. (c) The two employees can keep each other on-task. Taking turns gives each a break or change of pace without stopping work.
Reducing the bus number, improving group knowledge, and training developers are benefits, but they are not relevant to the question unless you explicitly linked them to delivered code. It’s not enough to say just better planning or two brains are better than one, without an explanation of how this affects delivered code. Merging and integration should not be a major time cost unless your project is very badly designed or modularized.
(a) Some people don’t work and/or communicate effectively with another person present. For instance, stopping to explain may interrupt flow. (b) Need to explain/discuss tradeoffs and get consensus, preventing people from going at their own pace. They might even over-discuss issues that aren’t all that important in the big picture. (c) For a straightforward task that these two developers can do relatively easily (calling the developers “experienced” is a weak way of saying this), you don’t need two people to mitigate risks in the design and coding, but pair programming suffers a keyboard bottleneck. (d) Two developers, not one, have to come up to speed on the problem and the codebase; the learning period is amortized over fewer developer-hours.
We gave partial credit for “the code might be better and more concise” — that may sometimes be true, but not always, and it’s not among the most important factors. Some people said that there will be more, and some said that there will be less, delivered code when one team member is inexperienced. Some of these answers were acceptable, but others were not. For example, answering an inexperienced developer’s questions would have to be done whether or not the team is using pair programming.