* CSCI 352 Assignments, Fall 2018

CSCI 352: Software Engineering
Fall 2018

Course Assignments


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

Assigned: 8/28
Due: 9/4 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: 9/4
Due: 9/11 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: Reading

Assigned: 9/18
Due: 9/25 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 4: Readings

Assigned: 9/25
Due: 10/2 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 5: Reading and Research

Assigned: 10/4
Due: 10/11 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 6: Reading and Research

Assigned: 10/11
Due: 10/23 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 (NOT an EULA). 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 7: Debate Prep

Assigned: 10/30
Due: Be ready to debate Pokemon Go on 11/1, the rest by 11/13

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

You will need to create an annotated bibliography for this assignment - this includes writing down full citation information, as well as notes (at least a few sentences) explaining what points you got from each source. You are welcome to create a separate annotated bibliography for each topic, or a single one containing the sources for all topics. Starter files can be found here: AnnotatedBibliography.zip. When compiling in LaTeX, make sure to run: pdflatex, bibtex, pdflatex, pdflatex.

We will be treating Thursday (11/1) as a warmup and trial run to get ready for a full in-class debate on 11/13!

Either email me your annotated bibliographies by 11/13 or turn them in after class!

HW 8: Readings

Assigned: 11/13
Due: 11/20 by email by 5pm
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, Interview, and Resume (oh my)

Assigned: 11/20
Due: 11/30 by email by 6pm
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. Next, 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?
  6. One more thing... Download a copy of ResumeAssignment.zip, and make a first pass (maybe) of your resume. I have provided a sample starter resume, there are notes in the comments about possible other titles of sections. Minimally you should have the following:
    • Your name
    • Contact information:
      • email, linked in (if you have it), github, phone (mailing address is optional)
    • Objective: a small, 1-2 sentence describing what you're looking for (for example: looking to hone web development skills, interested in an internship in the gaming industry, wanting to grow as a software developer, etc). It can be tailored for each job you submit too, so don't go too crazy with it now.
    • Education: name of degree, where at, when you're going to graduate
    • Skills: what languages/tools do you know? List in order from most comfortable (or most want to do) to least comfortable (least want to do). Don't include Office -_-
    • Experience: Any work experience you have (it's OK if it's not related to CS, if you don't have any yet, skip this section)
    • Projects: List any major projects you've worked on. It's OK to list class assignments you're proud of! (should have final 352 project here)
    • Don't forget to add sections for any outreach/awards/positions you have held/etc that you have done!
    It's OK if your resume is a bit long, this is your first pass!
What to turn in:
  • Your response to the reading, as well as your interview results/reflections. Please submit as a *.pdf
  • Your (possibly) first draft at a resume. Submit your *.pdf


Classwork 1: Tie your Shoes

Assigned: 8/28
Due: 8/28

Classwork 2: Getting into Git!

Assigned: 8/30
Due: 9/4 before the start of class
Assignment can be found here: Git Assignment.

Classwork 3: Basic UML

Assigned: 9/6
Due: 9/11 before the start of class

Classwork 4: Turning UMLs into code

Assigned: 9/13
Due: 9/18 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: Databases in WPF applications

Assigned: 9/20
Due: 9/25 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 6: Telestrations

Assigned: 9/27
Due: 9/27

Classwork 7: Recognizing Patterns and Decorator Practice

Assigned: 10/4
Due: 10/8 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 prints what it should be drawing so you don't have to worry about actually creating visual representations. For example: "I am a border decorator, holding a: I am a border decorator, holding a: ..." 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: Mini Lab: Introduction to Threads!

Assigned: 10/23
Due: 10/25 by email (or via GitHub inviatation) before the start of class
This is meant as a warmup for Thursday's distributed/networking lab (woo!). You will be practicing working with threads in C# to estimate pi. Instructions can be found here: Introduction to Threads. It's a bit wordy (particularly at the beginning), because I'm not yet sure when I'll be able to join you. The first part is essentially what I would have introduced in lecture before heading to lab. I should be there shortly if you get stuck, and we should also have some time for review!

Classwork 9: C# Chat Program

Assigned: 10/25
Due: 10/29 by 6pm

The goal of this assignment is to introduce the networking concept of using sockets for communication between machines. You will need to leverage your new Threading skills to complete a distributed chat application. Instructions for the assignment can be found here: C# Chat Program. At the bottom there should be a link to a GitHub classroom assignment. This should create a new repo just for you, containing starter code that I made available for everyone. Work your way though the program, filling in all sections labeled TODO. For extra credit: also email me screenshots or descriptions that you believe would make the assignment clearer!

Classwork 10: LEGO City Redux

Assigned: 11/8
Due: 11/13 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 11: Unit Tests in Visual Studio

Assigned: 11/20
Due: 11/27 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!

Programming Assignments

Programming Assignment 1: Welcome C#

Assigned: 8/30
Due: 9/6 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 Item class. This will define what attributes a store item will have. Minimally: items should have a private Name, as well as a private Type. Items should also have Restock, Sell, and Info functions (that will be overridden). These should all be public.
  • a concrete Book class. Minimally it will need to override all abstract item functions.
  • a concrete Movie class. Minimally it will need to override all abstract item functions.
  • a concrete class of your choice that inherits from Item (have some fun with it!). Minimally it will need to override all abstract item functions.
  • a main driver. This will be the entry point to your program. It will declare a List of Items, and have a menu-driven interface that minimally allows you to add items, restock, sell and access information on each item, 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 store program
    • A README documenting all of your design decisions, as well as how to run your program.

Programming Assignment 2: Welcome to Pain(t)

Assigned: 9/11
Due: 9/18 by 9pm

For this assignment, you will be building upon the rough paint application started in class. Make sure that in addition to having a button to clear the canvas, you can change pen color and thickness (you should also be able to change the pen back to the original settings). There are multiple ways to encode this functionality, make sure you discuss your design decisions in your README.

NOTE: you do not need to be able to recreate the picture from your first written assignment.

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: 9/25
Due: 10/2 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 Pain(t)

Assigned: 10/8
Due: 10/18 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: End of Pain(t)

Assigned: 10/30
Due: 11/15 by 9pm

For this last paint assignment, we're going to be revisiting paint to work on adding another design pattern. This time, you are required to (minimally) implement one structural or behavioral pattern into 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. (Don't forget to let me know in your README if that's what you're doing)


  • 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 (we could potentially even network them together across machines now?)
  • Visitor: have a button that allows your code to visit each line - perform different actions based on width/color?

In addition to adding a structureal or behavioral pattern, please take this time to go back and modify anything you did not like from your previous paint assignments. I will regrade 1 previous paint programming assignment of your choice - make sure to identify which one you would like a regrade for in your README.

What to turn in:

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

Group Project Deliverables

Group Deliverable 1: Teams

Assigned: 8/28
Due: 9/4

Let me know via email (make sure everyone on the team emails me, 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: 9/4
Due: 9/20 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

Due: 10/9 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: 10/4
Due: 10/11 during class

Describe your project to everyone else in class! Make sure to show off your interface mockups!

Group Deliverable 4: Project Update

Assigned: 10/18
Due: 11/12

This is a monthly check-up on your project and its status. Plot out your structure, and start working! Prototypes and Tracerbullets are recommended as you work to build up your projects. Make sure your code has been pushed to GitHub regularly, and have an updated proposal ready. The proposal update should reflect any changes you have made to your project as you contunue to design and implement it. 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 12/6 (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: 11/20
Due: 11/29 During class

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

Group Deliverable 6: Penultimate Writeup!

Assigned: 11/20
Due: 12/4 by 9pm

This is your penultimate writeup submission: at this point, all sections of your paper should be fleshed out. Don't forget to include: describe what design patterns you used and where. Project timeline (should be largely a retrospective) 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. At this point, you are free to convert any remaining tasks to Agile methodology/approaches.

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 7: Final Presentation

Assigned: 11/20
Due: 12/5 (by email by 4pm)

We will be doing a final presentation in class 12/6 - 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: 11/20
Due: 12/12 by 6pm

My goal is to get you some feedback from the last writeup, and give you a chance to make any changes you want, based on the feedback. If you are OK with your grade from the penultimate writeup, and don't want to bother, just don't push anything new to your repo (or leave a note in the main README/send me an email saying to just duplicate your grade for the last deliverable)

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!)