1. Software Engineering Fundamentals

1. Describe the importance of software engineering to software development

2. Identify a suitable development methodology for each of the following case-studies. Identify one characteristic of the chosen methodology and explain how this characteristic benefits the project

2. User-Stories

Background

1. What are user stories?

User-stories are one of the primary development artifacts for Scrum and XP project teams created during the requirements engineering phase. A user story is a short, concise description of a feature narrated from the perspective of the person who desires the capability, containing just enough information so that the developers can produce a reasonable estimate of the effort to implement it.

One technique to create a user-story is to follow the role-feature-reason template or RGB (Role, Goal, Benefit) Template as proposed by Mike Kohan of Mountain Goat Software.

The template looks like: “As a [type of user], I want some [feature] so that [some reason]. This technique keeps the focus on who, what, and why.

Examples of User Stories using the RGB template
• As a librarian, I want to have facility of searching a book by different criteria so that I will save time to serve a customer
• As a student, I want to be reminded of my class schedule every morning
• As a lawyer, I want to see all my active cases on the main screen

In an Agile project, user stories are discussed in meetings with the Product Owner (the person who represents the customer for the product you’re developing, and who writes the user stories) and the development team. The user story is presented, and the conversation starts.
For example: As a conference attendee, I want to be able to register online, so I can register quickly and cut down on paperwork.

Questions for the Product Owner might include:
• What information needs to be collected to allow a user to register?
• Where does this information need to be collected/delivered?
• Can the user pay online as part of the registration process?
• Does the user need to be sent an acknowledgment?

2. What are acceptance criteria?

Acceptance criteria are statements of requirements described from the perspective of the customer to determine what is required for the business and product owner to accept the user story as being “done”. Any member of the team can assist the product owner in defining and reviewing the acceptance criteria, which can continue to evolve and change until the team starts working on the user-story. Typically, an acceptance criteria can be specified in the format:
When inputX and processY, then outcomeZ.
e.g., inputX = invalid email address, processY _= email validation,_* outcomeZ* = “invalid email address” message

3. Read the following problem statement and write a set of epic and detailed user stories with acceptance criteria

High-Level Epic Story

  1. Epic Story: As a waiter, I should be able to view the current menu options and place a new table order for a diner
  2. Epic Story: As a manager, I should be able to perform a number of administrative functions such as being able to add and delete items from the menu stored in the system to ensure that the menu-options in the system are current as the menu in the restaurant is periodically changed. I should also be able to authorise discounts for the table orders.
  3. Epic Story: As a chef, I should be able to view the current queue of orders, be able to accept the orders and update the order status to be ready once the order is prepared

Detailed user-stories with acceptance criteria

The epic stories above show a large story that is hard to estimate and difficult to implement in a single iteration. Stories containing “and” or “or” are likely candidates for breaking into smaller, atomic user-stories. For example, all of the above stories can be broken down into more fine-grained or atomic user-stories with clearly defined acceptance criteria as below:

US1: As a waiter, I should be able to view the current menu-options, so that I can advise the diner of the current menu-choices in the restaurant
Acceptance Criteria:

US2: As a waiter, I should be able to add a new table order into the system, so that I am able to serve a diner.

Acceptance Criteria:

Additional self-paced learning exercises for students

Getting to know Python Data Structures

Python offers a number of compound data types, to allow you to group together values. These include lists, tuples, dictionaries. In this tutorial, we will look at lists and dictionaries

Lists

The most versatile data structure, written as a list of comma separated values within square brackets. Lists might contain items of the same or different data types, e.g.,

 - primes = [2,3,5,7,11,13]
 - mixed_basket = [1,[apples,3,3.45],2,[oranges,4.05]]

Given a list of numbers find the median of the numbers. You may assume that the input list contains at least one number.
Think about why you many want to use sorted(numbers) instead of numbers.sort()

Dictionary

Another useful data type built into Python is the dictionary. Unlike a list, string or tuple whose elements can be indexed by a range of numbers, dictionaries are indexed by keys, which can be any immutable type; strings and numbers can always be keys.

phone = {‘sam’: 97896000, ‘john’:9584 2384, ‘tom’:97268907}
'''
Common list methods:
list(d.keys()) on a dictionary returns all the keys in the dictionary.  
use the 'in' keyword to check if a particular key exists
dict() can be used to build a dictionary from a sequence of key-value pairs
use items() to loop through the dictionary
'''

You are given a dictionary of fruits names and their prices ($). Add a new entry: ‘golden apple’, with a price of $42 per unit. Implement a function that does the following:

  1. For each fruit in store, ask the user how many units of the fruit the user would like to purchase (in any order)
  2. After the user has entered the units for every fruit, calculates the total price the user has to pay and prints this value out