* CSCI 352 Assignments, Spring 2018

CSCI 352: Software Engineering
Spring 2018

Course Assignments


Homework 1: Drawing a Picture (Developing a Use Case) and Reading

Assigned: 1/11
Due: 1/16 by email before the start of class

Using the paint program on any Windows machine, draw a picture.
It does not need to be a masterpiece, try to aim for 1st grade level drawings (stick figures are encouraged). Make sure to:

  • Use different colors (at least 2)
  • Use different tools (at least 3)
  • Document!
    • Take note of everything you do
    • Track color/tool changes
    • What steps did you take to complete your drawing?
In addition to this, read chapter 1.2 Software Entropy from The Pragmatic Programmer.
In a file separate from your painting instructions, answer these questions:
  • What do broken windows have to do with code?
  • What software do you use with "broken windows"?
    • What is this software?
    • What are (some of) the "broken windows"?
    • In your opinion, why are these windows still broken?

What to turn in:
  • Your picture
  • Picture documentation (pdf)
    • A sentence describing the picture
    • Your detailed steps that you took to create the picture
  • Reading Responses (pdf)

Homework 2: Readings

Assigned: 1/18
Due: 1/25 by email before the start of class

Read chapter 1.4 Good-Enough Software from The Pragmatic Programmer, and answer the second challenge:

Consider the effect of modularization on the delivery of software. Will it take more or less time to get a monolithic block of software to the required quality compared with a system designed in modules? Can you find commercial examples?
Be sure to explain your reasoning for the first part, and give at least one specific commercial example.

Next, read chapter 2.10 Tracer Bullets from The Pragmatic Programmer and answer the following:

  1. In your own words, explain the difference between a prototype and tracer code. Which one are you more likely to hand over to a client to play with? Defend your answer
  2. Imagine you are creating a ride-share application (feel free to use Uber/Lyft/etc. as inspiration). Give an example of:
    • A prototype you might develop along the way. What makes it a prototype (as opposed to tracer code/anything else)? (feel free to use your definitions from above) Defend your answer.
    • Tracer code you might develop along the way. What makes this tracer code (as opposed to a prototype/anything else)? (feel free to use your definitions from above) Defend your answer.
  3. Do you believe you will be more likely to see tracers in monolithic code, modular code, or about the same? Defend your answer.

What to turn in:
  • Your reading responses (pdf)

Homework 3: Readings

Assigned: 1/25
Due: 1/30 by email before the start of class
Read chapter 4.21 Design by Contract from The Pragmatic Programmer.
Answer these questions:
  1. Why isn't DBC used more widely?
  2. Create a C++ function to divide 2 numbers (supplied by argument). Write the contract for that function. What are the preconditions and post conditions?
HINT: Check out the exercises at the end of the chapter - I will not be collecting them, but they should give you good practice.

In addition to this, read this article about Design by Contract, and prepare an official summary. Your summary should be a minimum of 2 paragraphs: the first should summarize the article. The second should critically assess the article. Do you agree with the points the author is making? What (if any) problems do you see with their assertions?

What to turn in:
  • Your response to the Pragmatic Programmer reading
  • Your article summary. Make sure that this is a pdf file

HW 4: Reading and Research

Assigned: 1/30
Due: 2/6 by email before the start of class
Read Chapter 2.8 Orthoganlity from The Pragmatic Programmer.
Answer the first Challenge question:
Consider the difference between large GUI-oriented tools typically found on Windows systems and small but combinable command line utilities used at shell prompts. Which set is more orthogonal, and why? Which is easier to use for exactly the purpose for which it was intended? Which set is easier to combine with other tools to meet new challenges?
Be sure to explain your reasoning for each of these questions.

In addition to this, do some research into the Space Shuttle Challenger disaster. Be sure to cite all sources used (there should be more than the wiki page I have already given to you). Write a minimum of 2 paragraphs. One should be an overall summary of what happened, a second one should dig deeper into what went wrong. Be sure to include what you believe happened after conducting your research. Feel free to write more if you so desire.

What to turn in:
  • Your response to the reading (pdf)
  • Your Challenger research (pdf)

Homework 5: Reading and Research

Assigned: 2/6
Due: 2/13 by email before the start of class
Read Chapter 8.46 (Pride and Prejudice) from The Pragmatic Programmer.
Answer the following questions:
  1. Give an example of how you have "owned your code".
  2. When working on group projects, is it "owned" by an individual, or the group?
In keeping with the theme of "owning code", do some research into different licensing schemes. Dig through Creative Commons, GPL, BSD open license, and one other licensing scheme of your choice. For each licensing scheme:
  • What is its official name?
  • What variations are there? (CC has about 7 basic ones)
  • When can you use it? When can't you use it?
  • Give an example of a piece of software released under this license.

Homework 6: Reading

Assigned: 2/13
Due: 2/20 by email before the start of class
Read Chapter 6.35 Evil Wizards from The Pragmatic Programmer.
Answer this modified challenge question:
Look back at the code Visual Studio autogenerated for your paint program. Go through every line of code it produced (try to find it all! Which files did you find?). What parts do you understand? What parts are confusing? Could you have produced it yourself? Would you have written it, or is it doing extra things you don't need?
What to turn in:
  • Your response to the reading (pdf)

Homework 7: Debate Prep

Assigned: 2/20
Due: 2/27 by the end of class

We will be spending class time discussing several programming-related incidents. Please prepare by researching incidents involving:

  • Pokemon Go
  • Therac-25
  • Ariane 5
  • Mars Climate Orbiter
  • Patriot Missle Bug
Be prepared to turn in your notes at the end of class for credit!

HW 8: Readings

Assigned: 3/13
Due: 3/20
Read Chapter 2.7 The Evils of Duplication from The Pragmatic Programmer.
Answer the following:
  • When was a time you did not follow DRY principles? (think back to when you first started programming, I am certain there was at least once)
  • Which of the 4 reasons the book cites was behind the problem?
  • When is too much reuse a bad thing?
Read Chapter 6.31 Programming by Coincidence from The Pragmatic Programmer.
Answer the following:
  • From your own experience, describe a time you ran into an "Accident of Implementation"
    • Make sure to include some background, how did you find yourself in this situation? What project were you working on?
    • How did you realize you were in such a situation?
    • Were you able to recover from this? If so, how? If not, what approaches would you now take to try to fix things?
What to turn in:
  • Your responses to the reading (pdf)

Homework 9: Reading and Interview

Assigned: 4/10
Due: 4/17 by email before the start of class
Read Chapter 1.5 from The Pragmatic Programmer.
Answer the following questions:
  1. What is your most recent "investment"?
  2. What professional organizations are available to Computer Scientists? (list at least 2) Are you part of any?
  3. Look into (at least) 2 languages which are new to you. What are these languages? What does a "Hello World!" look like in each of these languages?
  4. What kind of "investments" are you planning on making into the future? Did this assignment change your plans?
  5. For this last part, put on your reporter hat! Find a senior from CSCI 495 (senior seminar)/someone from CSCI 352 in a previous semester and ask them about their project!
    • What is the project?
    • Why did they choose this project?
    • What tools are they using?
    • What do they wish they knew before starting?
    • After the interview, reflect. What do you think about the project? Is there anything you would do differently?
    • How do their experiences line up with your experiences on your 352 project?
What to turn in:
  • Your response to the reading, as well as your interview results/reflections. Please submit as a *.pdf


Classwork 1: Tie your Shoes

Assigned: 1/11
Due: 1/11

Classwork 2: Getting into Git!

Assigned: 1/23
Due: 1/25 before the start of class
Assignment can be found here: Git Assignment.

Classwork 3: Basic UML

Assigned: 1/25
Due: 1/30 before the start of class

Classwork 4: Turning UMLs into code

Assigned: 2/6
Due: 2/8 before the start of class
For this assignment, you will be working with Factory Pattern (pdf, dia) and Abstract Factory Pattern (pdf, dia) UMLs to create simple C# console programs. Make sure to zip up both projects and email them in to recieve credit.

Classwork 5: Telestrations

Assigned: 2/8
Due: 2/8

Classwork 6: Databases in WPF applications

Assigned: 2/13
Due: 2/15 by email before the start of class
For this assignment, we're running through a crash course of creating databases and attaching them to WPF applications. The outline of the steps you need to take can be found here: DB Classwork. Make sure to invite me to your public GitHub repository for this classwork! You should minimally have 2 buttons - one that will display all data from the Assets table, and another that will display all data from the Employees table. For extra credit: add the ability to add employees/assets. Also for extra credit: screenshots that would make this easier to follow!

Classwork 7: Recognizing Patterns and Decorator Practice

Assigned: 3/13
Due: 3/15 before the start of class
This assignment has 2 parts. First, download this zip file: ConsoleApplication2.zip. It contains a working C# console project. Construct a UML based on this code, and write a short (think a paragraph) statement outlining which design pattern you see used in this code, and defending your stance.
For the next part of this assignment, you will be working on implementing a decorator design pattern. Download the provided dia diagram decorator.dia. Use this as a guide to create a quick and dirty decorator implementation! Make it a console application, where the draw function just tells you what it should be drawing (don't worry about actually creating visual representations). Expand the provided design to include a new decorator (add it to both the *.dia diagram and your code).
What to turn in:
  • RecognizingPatterns.dia - your UML created for the first part of the assignment, be sure to also turn in your opinion of what pattern you see (either as an extra *.pdf file, or include this in a note in the UML diagram)
  • Decorator.zip - this should contain an updated UML diagram, as well as your source code for your decorator example.
  • NOTE: if you feel it is easier to create a GitHub repository for your decorator work, feel free to do so. Make sure to share the repository with me, and include a link to it when you email me your RecognizingPatterns.dia diagram.

Classwork 8: LEGO City Redux

Assigned: 3/22
Due: 3/27 before the start of class
Think back to our first foray into Agile development. Answer the following questions:
  1. What did you observe about working within the Agile development framework?
  2. How did it feel working on a Scrum team?
  3. How did the short iterations go?
  4. How accurate were your estimations? Make sure to give a specific example!
  5. What would you do differently if we tried this again?
  6. How did inter-team communication go? Were there any dependencies? How were they resolved?
What to turn in:
  • A pdf document containing your answers

Classwork 9: Evaluating Use Cases in Paint

Assigned: 4/3
Due: 4/5 by email before the start of class

Remember our very first homework assignment? The step-by-step instructions for creating an image are essentially a first pass at writing a step-by-step use case. We are going to revisit that by swapping drawing instructions. Find your assigned instruction set in a private message on Piazza. Do your best to create a picture following these instructions, and email me your picture and any comments that you have on the instructions you were assigned.

What to turn in:
  • Your created drawing
  • Your feedback on the instructions

Classwork 10: Unit Tests in Visual Studio

Assigned: 4/5
Due: 4/10 by email before the start of class
Walk through the Unit Testing lab here: Unit Test Lab
Make sure to zip up and send me your solution with full unit tests (should be 6). Alternatively, place this in a github repo, and share it with me - make sure to send me an email with a link as well, so I know to look for it in GitHub! NOTE: this does have a follow-up component, make sure you don't lose your code!

Classwork 11: Regression tests in Visual Studio

Assigned: 4/19
Due: 4/24 by email before the start of class
Update your simple bank application with the following
  • Debits are no longer free: make sure to induce an extra $1.45 fee for every debit action
  • The fee is applied after a successful debit - this may result in a negative balance!
  • As soon as the balance becomes negative, an account should be frozen

You will need to:
  • Add this functionality to your Bank program
  • Develop tests for this new behavior
  • Perform regression testing to ensure that you haven't broken any other functionality

Programming Assignments

Programming Assignment 1: Welcome C#

Assigned: 1/11
Due: 1/23 by email before the start of class

For this assignment you will be developing a console application in C#. This assignment is designed to help us transition from C++ to C#. Your program will need the following:

  • an abstract Pet class. This will define what attributes a pet will have. Minimally: pets should have a private Name, as well as a private Species. Pets should also have Play, Speak, and Eat functions (that will be overridden). These should all be public.
  • a concrete Dog class. Minimally it will need to override all abstract pet functions.
  • a concrete Cat class. Minimally it will need to override all abstract pet functions.
  • a concrete class of your choice that inherits from Pet (have some fun with it!). Minimally it will need to override all abstract pet functions.
  • a main driver. This will be the entry point to your program. It will declare a List of Pets, and have a menu-driven interface that minimally allows you to add pets, interact with individual pets, and exit the program. Feel free to implement more functionality if you desire.
What to turn in:
  • A zip file containing:
    • All of the source code needed to run your pet management program
    • A README documenting all of your design decisions, as well as how to run your program.

Programming Assignment 2: Rough Paint

Assigned: 1/30
Due: 2/6 by 9pm

For this assignment, you will be building a rough paint application. Make sure that in addition to having a button to clear the canvas, you can change pen color and thickness. There are multiple ways to encode this functionality, make sure you discuss your design decisions in your README.

What to turn in:
  • Nothing! Make sure you link your code to your course repo, and keep it up to date!

Programming Assignment 3: Breaking into Main()

Assigned: 2/13
Due: 2/20 by 9pm

For this assignmnt, you will start digging into your autogenerated C# code. You will need to first find out where the wizard autogenerated a Main() function. You will then need to create your own Main (somewhere where it won't be overwritten!) and use that to launch your paint program.

After reclaiming your Main, you will need to programmatically add a text field to your paint program, printing out "Hello from Main!" (or something equivalent, feel free to be more creative. Just make sure that you add a feature programmatically, not through the xaml gui).

What to turn in:

Nothing! Make sure to commit your changes to the private course repository.

Programming Assignment 4: Creational Paint

Assigned: 2/27
Due: 3/13 by 9pm

For this assignment you will be leveraging the abilities you gained from the last assignment. The goal of this assignment is to implement one of the Creational Patterns discussed in class (Abstract Factory/Factory).

Exactly which one you implement is up to you, but be sure to fully document your design decisions in your README.

Suggestions: Create "themed" versions of paint: one for fun, one that is more serious. Create code to help with the creation of objects in your program - perhaps button creation, or generating items in a drop-down menu.

What to turn in:

Nothing! Make sure all your changes have been pushed to the private course repository.

Programming Assignment 5: Final Paint

Assigned: 3/20
Due: 3/27 by 9pm

For this last paint assignment, we're going to be revisiting paint to work on adding another design pattern. You will need to (minimally) implement one structural or behavioral pattern in your paint program. I will leave the final decision of what to implement up to you. Make sure to document which pattern you chose and why as well as your specific implementation notes. If you are interested in extra credit, attempt to implement extra patterns. (Make sure to let me know in your README if you do).


  • Composite: allow users to select lines and group together?
  • Decorator: decorate your buttons? Allow users to add functionality to lines (effectively decorate them)?
  • Observer: have multiple windows communicate with each other when one draws (networking them together is a bit beyond the scope of this class...)
  • Visitor: have a button that allows your code to visit each line - perform different actions based on width/color?

What to turn in:

Nothing! Make sure to commit your changes to the private course repository.

Group Project Deliverables

Group Deliverable 1: Teams

Assigned: 1/11
Due: 1/18

Let me know via email (each team member email please, so I know no one got volunteered) who you plan to work with for the course project. I am ideally looking for teams of 2.

Group Deliverable 2: Project proposal draft

Assigned: 1/11
Due: 1/30 2/1 by 9pm

This assignment has 2 parts:

  1. This is your first draft of your group project proposal. The more thorough this version of proposal is, the less work you will have to do for the next deliverable. In this document you need to convince me that a: this is a worthwhile project, and will make an appropriate semester-long goal, and b: this is not too ambitious of a project and you will be able to complete it within the semester.
  2. Create a github repo for the project (make sure you have a placeholder C# project in it from Visual Studio!), and make sure your proposal is added to your repo by the due date.

You can find a starter project file here: 352 Project Starter. This is a LaTeX file, and you should be able to just start typing your own words into the provided sections.

For this Deliverable, I expect to see (minimally) the following:

  • A name for the project
  • The names of everyone working on the project
  • An abstract
  • The introduction (aim for 2 paragraphs introducing the project, don't forget to describe your target audience!)
    • Including both Background and Challenges, to the best of your capabilities
  • Scope: Just get the first part under section 2 filled in (2.1 can be ignored at this point). Give me an idea of what point you feel you would need to reach to consider the project "done".
    • Include at least 2 "stretch goals", things that would be cool to add to the project.

The goal of this assignment is to start a "living document" that will help you stay on track with your project for the rest of the semester. Anything you do past this point will simply make your life easier for the next deliverable! Let me know if you would like feedback on any additional sections!

What to turn in:
  • Nothing! Make sure you share your github repo is shared with me, and that you have uploaded either a pdf or all files needed to generate your proposal document (or both!)

Group Deliverable 3: Project proposal update

Assigned: 2/6
Due: 2/13 before the start of class

Based on our notes from last time, work on updating your proposal. Clean up the sections required from last time, and make sure you have clearly laid out goals, with at least 2 stretch goals.

In addition to your updates, I am looking for the following new sections:

  • At least 3 use cases
  • Functional and non-functional requirements
  • Interface mockups - your starter LaTeX file will accept *.png, *.jpg, and *.pdf image extensions

NOTE: it's OK if these change over the life of your document - I want to see that you are thinking about it!

What to turn in:
  • Nothing! Make sure you share your github repo is shared with me, and that you have uploaded either a pdf or all files needed to generate your proposal document (or both!)

Group Deliverable 3.5: Project proposal presentation

Assigned: 1/30
Due: 2/13 during class

Describe your project to everyone else in class! Feel free to show off your interface mockups!

Group Deliverable 4: Project Update

Assigned: 2/15
Due: 3/15

This is a monthly check-up on your project and its status. You should have your project started in GitHub, and have an updated proposal ready. The proposal update should reflect any changes you have made to your design after you have started work on the project. In addition to all the sections currently present, make sure you have:

  • Timeline - this should reflect not only what you have done, but project out to the future as well. Remember, you will be demoing your projects for the class on 4/27 (you should have your project be "done" by then)
  • Project Structure & UML Outline - make sure to describe your project structure and include UMLs that outline your projects structure. Remember, you will need to work 2 design patterns into your project by the end of the semester.

What to turn in:
  • Nothing! Make sure you share your github repo is shared with me, and that you have uploaded either a pdf or all files needed to generate your proposal document (or both!)

Group Deliverable 5: Demo Day!

Assigned: 3/15
Due: 4/5 During class

Demo your work so far as we go into the last few weeks of the semester!

Group Deliverable 6: Penultimate writeup

Assigned: 3/27
Due: 4/12

This is your second to last writeup (woo!). Make sure you go back, fix anything needed, and make sure all your documentation is up-to-date. As you get further into the process of implementing your project, things are likely to change. That is OK! Just make sure you update your documentation to match!. At this point in time, it is also acceptable to switch over to Agile terminology as you desire. Use cases can be rewritten as user stories, and your timeline can be laid out in sprints. You should have your own words in all sections (including results and future work, even if this is subject to change before the final writeup). This will be a last chance to get some feedback before the final writeup is due!

Group Deliverable 7: Final Presentation

Assigned: 3/27
Due: 4/24 (by email by 4pm)

We will be doing a final presentation in class 4/26 - with some luck I should be able to get these turned around to you with some feedback before your final presentation. An outline of a sample presentation can be found here: Sample Presentation

Group Deliverable 8: Final Writeup

Assigned: 3/27
Due: 4/29 by 9pm

All sections of your paper should be fleshed out. Don't forget to include: describe what design patterns you used and where. Project timeline (now be a retrospective) should include a paragraph about how you felt you did with budgeting your time. Use the results section to describe what you feel you have accomplished, with the future work subsection describing every goal that you didn't make/new things to add that have recently occurred to you.