CS314 Midterm-1 Study Guide

The midterm exam is on Monday, October 10, in class. You get 50 minutes to answer all the questions and get 50 points. This is a closed book, closed notes exam. No cheat-sheet, computers, or any other electronic devices are allowed. Use the following study guide to prepare for the exam.

DISCLAIMER:It is possible that something is missing in the description below, but that should not prevent you from answering questions on a topic that was discussed in class.


1. Study material

Material covered until and including October 5 (Wednesday's lecture) is included in the exam. Refer to the following materials:

  1. Course slides
  2. Articles from reading assignments, design studios, and project planning meetings
  3. Videos that were part of assigned viewing

Practice answering the questions that you attempted in Canvas, and also the paper quiz you took in class. Use the quizzes and the JUnit assignment as a rough guideline for what type of questions to expect. You will be tested on your knowledge of concepts and how you use them.


2. Topics

  1. Software and software engineering

    What is software, what is software engineering, nature of software, types of software, stakeholders, software quality attributes, qualities of interest to various stakeholders, tradeoffs between quality attributes, projects, risks, complexity issues.

  2. Software process models

    Key ideas and characteristics of each life cycle model, limitations, teams, characteristics of agile techniques, especially Scrum

  3. Code inspections

    What it is, why it is done, when it is done, different ways of doing it, roles in inspection teams, using checklists

  4. Software testing

    General concepts, definitions of fault, error, failure, black-box and white-box testing, levels (unit, integration, system, acceptance), test case, test input, test oracle, fault categories, test driven development

    In black-box testing: input domains, equivalence class partitioning, boundary value analysis

    In white-box testing: control flow graphs, node/edges, coverage of statements (nodes) and branches (edges), paths, measuring coverage for a test input, adding new test cases to cover remaining elements

    JUnit: write JUnit test methods

  5. Requirements

    Domain analysis, starting points for software projects, problem definition and scope, Types of requirements (functional, and non-functional with three categories), verifiable/testable, consistent, and unambiguous requirements

  6. User stories

    User story template with three parts, acceptance criteria, size estimation, definition of done.


3. Types of questions

This is a non-exhaustive list of the types of questions that you may get on the exam. It is possible that not all types are eventually included.

  1. Multiple-choice questions.
  2. Short answer questions on various topics.
  3. Classify functional vs non-functional requirements.
  4. Identify non-testable, inconsistent, or ambiguous requirements and fix them.
  5. Write user stories with acceptance criteria and definition of done.
  6. Deriving black-box tests using equivalence classes and boundary value analysis from a program specification.
  7. Write a JUnit test method to test a given method of a given class.
  8. Control-flow graphs, marking nodes/edges as covered, and writing test inputs (similar to assignment and quiz).