HW 1: brainstorming about software testing and debugging difficulties

When you submit your completed assignment, please indicate how long it took to complete. This will not factor into your grade. For anything that you submit in this class, place your name and UW ID on the top of the first page.

Instructions

Think about your own 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.

For each difficulty, discuss the underlying cause and motivate why people should care about it. Additionally, explain why it is not easy to solve or work around.

Spend about half a page discussing each difficulty, and submit a 1-page PDF.

Grading

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.

Avoid discussing implementation annoyances unless you can identify an underlying principle. (Example: “Windows (or Unix) lacks this feature that Unix (or Windows) has” or “My favorite tool does not support x.”) Avoid discussing difficulties in performing tasks that don’t matter. (Example: “I can’t determine the cyclomatic complexity of my Tcl code.”) Avoid discussing problems that are extremely minor or that can be solved easily. (Example: “I often fail to balance delimiters before attempting to compile a file.”)

A common problem in submissions to this assignment is vagueness. Vagueness prevents the reader from understanding either the problem or the proposed solution. For 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? Giving concrete examples will provide needed context to the reader. 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.