HW5: Chapter 4 and reflections

4.5: Using the technique suggested here, where natural language descriptions are presented in a standard format, write plausible user requirements for the following functions:

An unattended petrol (gas) pump system that includes a credit card reader. The customer swipes the card through the reader, then specifies the amount of fuel required. The fuel is delivered and customer’s account debited.

  1. The petrol pump system shall charge the customer’s account the correct amount of money based on the amount of fuel specified.
  2. The petrol pump system shall provide secure credit card processing.
  3. The petrol pump system shall provide the customer with a record of their transaction (through a receipt).
  4. The petrol pump system shall implement mechanisms to ensure safe fuel delivery.
  5. The petrol pump system shall deliver the smaller of the amount of fuel specified and the amount of fuel to fill the tank.

The cash-dispensing function in a bank ATM.

  1. The cash-dispensing function shall keep track of the amount of cash available.
  2. The cash-dispensing function shall ensure the ATM stays stocked with cash by notifying the administrator when cash is low.
  3. The cash-dispensing function shall keep bills neat and organized for quick delivery.
  4. The cash-dispensing function shall integrate with existing bank software to verify the user’s accounts.
  5. The cash-dispensing function shall detect and report suspected fraudulent activity.

In an Internet banking system, a facility that allows customers to transfer funds from one account held with the bank to another account with the same bank.

  1. The Internet banking system shall prevent transfers that would result in negative account balances.
  2. The Internet banking system shall limit the number of transfers allowed per customer per month.
  3. The Internet banking system shall allow customers to schedule transfers.
  4. The Internet banking system shall allow customers to set up recurring transfers.
  5. The Internet banking system shall allow customers to document their transfers through notes.

4.6 Suggest how an engineer responsible for drawing up a system requirements specification might keep track of the relationships between functional and non-functional requirements.

According to Chapter 4, Requirements Engineering, functional requirements describe what the system should do while non-functional requirements specify or constrain characteristics of the system. After thinking about this a bit, it seems like each non-functional requirement should be mapped to at least one functional requirement that it specifies. Many non-functional requirements will support multiple functional requirements. Hence, I would suggest that an engineer uses software like AirTable or Notion that can create complex tables for keeping track of relationships between items. For example, if a row in the table is taken as a non-functional requirement, a multi-select column could allow the user to input all of the functional requirements it supports. This way, using the sorting and filtering functions of the software (AirTable or Notion), the engineer could easily display all non-functional requirements that support a certain requirement or all functional requirements supported by a non-functional requirement. This would also provide several other “views” such as a Kanban board that the engineer could use to visualize the requirements as a whole.

4.7 Using your knowledge of how an ATM is used, develop a set of use cases that could serve as a basis for understanding the requirements for an ATM system.

  1. Withdrawal: a customer feeds his/her card to the ATM, then indicates the amount of money to withdraw from the account on the user-interface. The ATM checks that it has that amount of money. If it does, it dispenses the money and processes the withdrawal. Otherwise, it calls an administrator. Lastly, it returns the card.
  2. Deposit: a customer feeds his/her card to the ATM, then selects the option to deposit on the UI. He/she inputs the money into the machine. The machine tallies it up, rejecting any fraudulent or unreadable bills. Then, it processes the deposit in the electronic system. Lastly, it returns the card.
  3. Multiple transactions: a customer makes a deposit or withdrawal, then opts to complete another transaction. The machine keeps the card and restarts the transaction selection process. After a certain number of depsoits/withdrawals determined by the bank, the ATM rejects any further transactions and investigates potential fraud.
  4. Cancellation: a customer is in the middle of completing a transaction, then decides to cancel it. The ATM returns the card and resets to its new customer mode. If the user fails to retrieve the card, the machine swallows it back up so the administrator can call the customer to retrieve it.
  5. Suspicious activity: a customer would like to withdraw an unusual amount of money (or all of the money in his/her account). The ATM detects this as suspicious and sends a note that the customer should visit the nearest bank to complete this transaction.

Reading Reflections:

This class’s readings dove into the world of requirements engineering. Chapter 4 of the textbook details this topic, outlining a few approaches to engineering requirements for software. According to the Chapter, “the requirements for a system are the descriptions of the services that a system should provide and the constraints on its operation.” Writing requirements is usually one of the first steps in the software engineering process, sometimes occurring before the system has even been approved for development.

Of course, different teams take different (and often, multiple) approaches to requirements engineering such as ethnography, interviewing, or collecting stories and scenarios. I found the idea of Test Driven Development (TDD) from the article Test-Driven Development particularly interesting. The author, Scott, Wambler, explains that the adoption of the technique is not very high, which is probably why I hadn’t heard of it. Nonetheless, this technique is a strong way to think through your requirements prior to writing production code. TDD involves, as the name suggests, writing tests prior to running the functional code that those tests test (wow, that’s a mouthful!). In terms of requirements, TDD seems like an excellent way to identify constraints on your system that may transfer to the requirements. You can also validate your requirements through early testing, checking their consistency (that they don’t conflict) and completeness (that they conform to the constraints of the system/user), then making adjustments accordingly. Incorporating testing into every stage of the software engineering process like TDD promotes prevents potential holes in requirements from falling through the cracks due to our human ability to hold only an average of 7 +/- 2 objects in our short-term memory at a time (Magical Number 7).

Lack of thorough requirements engineering through techniques like TDD naturally creates opportunities for issues when parts of the software do not fit within the constraints of the system. The article Tire Pressure Monitoring System provides a few related examples. In Tire Pressure Monitoring System, the TPMS system raises privacy concerns due to a lack of cryptographic mechanisms to prevent vehicle tracking. The system was lacking several other security features that should have been included in the requirements such as shielding from eavesdropping, authentication of messages, and simple input validation. The potential for malicious activity due to these missing requirements is so severe that a Senate Bill was passed to protect consumers from security and privacy threats to their motor vehicles. The research completed in the paper was able to identify these holes through experimentation (Spy Car Act of 2015). It seems TDD could have prevented these issues as it would have involved some testing to examine any existing security requirements and engineer new ones. Essentially, this would be similar to that experimentation, but occur earlier in the process so that any insight into missing security features could be incorporated right off the bat. This would greatly reduce the risk of security compromises.

2021

Meeting Charleston

2 minute read

Today, I attended the Alumni Symposium. During freshman year, one of my classes had encouraged attendance to the (then in-person) symposium, but I was unable...

Chapter 9

2 minute read

The journey does not end after a software project has gone live. This week’s reading was “Continuing the Journey” - Chapter 9 of Client-Centered Software Dev...

Chapter 6

3 minute read

“Databases reside at the heart of most software applications” (SD Chapter 6, pg 168). This week’s readings cover Chapter 6 of our textbook, Client-Centered S...

Chapter 5

2 minute read

This week’s reading (Chapter 5 of Client-Centered Software Development) covers domain classes and unit/system testing. According to the text, “domain classes...

Release early and often

2 minute read

Proper documentation for both internal and external users of a software application is crucial to its sustained success after deployment. This week, we read ...

Stupid or Solid?

2 minute read

This week, we read “From STUPID to Solid Code!” by William Durand. This article is packed with high-level do’s and dont’s of programming. The “dont’s” are co...

What’s Happening?

2 minute read

This week, our class chose and reflected on articles from Software, Computer, or CoACM magazines. While perusing software magazines (finding good ones was an...

This bugs me

4 minute read

6.4. Exercise - Find the Oldest Bug Find the oldest bug that’s still open in your chosen project. Write a blog entry describing the problem, with a theory ab...

Reflections on Open Source in Today’s World

2 minute read

This week, our assignment was to explore http://opensource.com/, reading at least two medium-length articles from the site and blogging about what we learned...

Reflections on FOSS

3 minute read

This class, CSCI 462, is centered around contributing to an open-source software project through bug fixes, documentation fixes, and other improvements. Befo...

Introduction

1 minute read

Hi everyone! My name is Janneke (pronounced ‘Yah-Nuh-Kuh’) Morin.

Back to top ↑

2020

HW21: Chapter 24

1 minute read

24.6 Explain why program inspections are an effective technique for discovering errors in a program. What types of error are unlikely to be discovered throug...

HW20: Team Progress II

1 minute read

I feel like our team made great progress on the most recent deliverable (deliverable 4)! We met via Zoom more often than we did between any other two variabl...

HW19: Chapter 23

less than 1 minute read

23.6 Figure 23.14 shows the task durations for software project activities. Assume that a serious, unanticipated setback occurs, and instead of taking 10 day...

HW18: Chapter 21 and Chapter 22

2 minute read

21.4 Explain why an object-oriented approach to software development may not be suitable for real-time systems.

HW17: Team Progress I

2 minute read

This is my first reflection on our team’s testing project. I think this will be a helpful exercise as we move into the final stages of building our testing f...

HW16: Chapter 20

2 minute read

20.10 You work for a software company that has developed a system that provides information about consumers and that is used within a SoS by a number of othe...

HW15: Chapter 19

1 minute read

19.3 Why is it impossible to infer the emergent properties of a complex system from the properties of the system components? In the words of Ian Sommerville,...

HW14: Chapter 18

less than 1 minute read

18.4 Define an interface specification for the Currency Converter and Check Credit Ratings services shown in Figure 18.7.

HW13: Chapter 17

2 minute read

17.10 Your company wishes to move from using desktop applications to accessing the same functionality remotely as services. Identify three risks that might a...

HW12: Chapter 16

less than 1 minute read

16.9 Design the interfaces of components that might be used in a system for an emergency control room. You should design interfaces for a call-logging compon...

HW11: Chapter 9

2 minute read

9.8 Briefly describe the three main types of software maintenance. Why is it sometimes difficult to distinguish between them? Fault repairs to fix bugs and v...

HW10: Chapter 15

2 minute read

15.10 The reuse of software raises a number of copyright and intellectual property issues. If a customer pays the software contractor to develop a system, wh...

HW9: Chapter 8 and reflections on testing

5 minute read

8.7: Write a scenario that could be used to help design tests for the wilderness weather station system. Context: According to Chapter 7, Design and Implemen...

HW8: Mythical Man Month

3 minute read

Mythical Man-Month - Does adding more labor to a project linearly reduce the time to completion? Or does it do the opposite, particularly to an already late ...

HW7: Chapter 5 and 6

1 minute read

5.3: You have been asked to develop a system that will help with planning large-scale events and parties such as weddings, graduation celebrations, and birth...

HW6: Chapter 2

1 minute read

2.1 Suggest the most appropriate generic software process model that might be used as a basis for managing the development of the following systems. Explain ...

HW5: Chapter 4 and reflections

6 minute read

4.5: Using the technique suggested here, where natural language descriptions are presented in a standard format, write plausible user requirements for the fo...

HW4: Reflections on software failures

3 minute read

Our readings this week began with a focus on several software engineering failures which resulted in devastating incidents such as plane crashes (Space Craft...

HW3: Chapters 11 & 12

3 minute read

11.4: What is the common characteristic of all architectural styles that are geared to supporting software fault tolerance? Architectural styles geared to su...

HW1: Chapter 1

3 minute read

1.3: What are the four important attributes that all professional software should possess? Suggest four other attributes that may sometimes be significant.

HW0: Introduction

less than 1 minute read

Hi everyone! My name is Janneke (pronounced ‘Yah-Nuh-Kuh’) Morin.

Back to top ↑