Reflect on your software development experience. Oftentimes it is lots of fun, but at times it can be frustrating.
Describe two concrete difficulties that you have encountered during software development — one about software testing and one about software debugging.
1. Think of a time when software testing took you a lot of effort. Be specific: choose a concrete incident that you remember. It should not be trivially solvable by an existing technique or tool. (Don't believe that existing tools would solve all your problems, even if they claim to do so. They might only address part of your problem, or they might have poor usability, or they might have other limitations.) It should not be merely due to your ignorance or inexperience. (But, some tools can help you more rapidly learn facts or overcome inexperience. Don't believe that all problems you have had are due to your ignorance or inexperience: they are not!)
If you cannot remember a specific incident, then put the assignment aside, think about it in the background, and come back to it later. If you still can't remember anything, you might want to look through the history of commits in projects you have worked on, or issues opened and closed, or code reviews, or TA comments.
After your name (which should be on all assignments), write 1/2 to 2/3 page discussing the problem. Give it a descriptive title (not “A testing difficulty”). Write approximately the same amount of text on each of the following (number the paragraphs in your writeup):
2. Do the same thing, but for software debugging.
3. At the end of the document:
Submit a two-page PDF file. Use a font size of 10 or 11 points, and standard margins (about 1 inch). For anything that you submit in this class, place your name and UW ID on the top of the first page.
This assignment will reward careful thought about interesting problems and issues. Please introspect deeply and thoughtfully about the challenges of developing and analyzing modern software systems. Doing so will help you in this class, and beyond.
Here is how to avoid some common problems that past students have had with this assignment.
As another example, it is not helpful or informative to say, “programmers do
not use testing tools”. Such a statement needs to be clarified and supported in
multiple ways.
First, what sort of testing tools is this talking about? Unit test frameworks?
Mocking frameworks? Automated test generation tools? Test execution frameworks?
Second, why don't programmers use the tools, or why do they have trouble with
the task? If you are not sure of the reason, then think about it, or do some
research to learn the reason. At the very least, lay out some possible reasons
and discuss whether you believe those are the true reasons. Even this process
will increase your understanding and may lead you to come up with new and better
reasons.
Showing example code may be helpful, but is not needed for every writeup, not even all those about issues with code.