CSE 403 Lecture 3 Software Requirements Reading:

Slides:



Advertisements
Similar presentations
Software Requirements
Advertisements

Test process essentials Riitta Viitamäki,
Software Requirements Thomas Alspaugh ICS Nov 5.
Requirements Engineering n Elicit requirements from customer  Information and control needs, product function and behavior, overall product performance,
SWE Introduction to Software Engineering
Software Engineering. How many lines of code? Average CS1004 assignment: 200 lines Average CS4115 project: 5000 lines Corporate e-commerce project: 80,000.
Software Engineering.
Computer Engineering 203 R Smith Requirements Management 6/ Requirements IEEE Standard Glossary A condition or capability needed by a user to solve.
Software Requirements
Overview of Software Requirements
CS350/550 Software Engineering Lecture 1. Class Work The main part of the class is a practical software engineering project, in teams of 3-5 people There.
SE 555 – Software Requirements & Specifications Introduction
Managing Software Quality
Requirements Analysis
Chapter 4 – Requirements Engineering
SE-02 SOFTWARE ENGINEERING LECTURE 3 Today: Requirements Analysis Requirements tell us what the system should do - not how it should do it. Requirements.
Topics Covered: Software requirement specification(SRS) Software requirement specification(SRS) Authors of SRS Authors of SRS Need of SRS Need of SRS.
المحاضرة الثالثة. Software Requirements Topics covered Functional and non-functional requirements User requirements System requirements Interface specification.
CS 360 Lecture 3.  The software process is a structured set of activities required to develop a software system.  Fundamental Assumption:  Good software.
Incorporating Pragmatic Usability Testing Into a Software Test Plan Carla Merrill, Ph.D. Focused Design focuseddesign.com
Chapter 2 소프트웨어공학 Software Engineering 임현승 강원대학교
 Explain the role of a system analyst.  Identify the important parts of SRS document.  Identify the important problems that an organization would face.
Software Requirements Presented By Dr. Shazzad Hosain.
Software Requirements Engineering: What, Why, Who, When, and How
Strong9 Consulting Services, LLC 1 PMI - SVC I-80 Breakfast Roundtable Monthly Meeting Thursday, October 12, :00 am – 9:00 am.
CSE 219 Computer Science III Program Design Principles.
CSE Senior Design I Building a Plan Instructor: Mike O’Dell Several of the slides in this module are a modification and amplification of slides prepared.
1 CSE 403 Software Requirements Reading: Pragmatic Programmer Ch. 7: Before the Project These lecture slides are copyright (C) Marty Stepp, 2007, with.
Requirement Handling
1 Software Requirements l Specifying system functionality and constraints l Chapters 5 and 6 ++
Recall The Team Skills 1. Analyzing the Problem (with 5 steps) 2. Understanding User and Stakeholder Needs 3. Defining the System 4. Managing Scope 5.
The Software Development Process
Requirements Engineering Lesson 2. Terminologies:  Software Acquisition is where requirement engineering significantly meets business strategy.  Software.
Systems Development Life Cycle
Software Engineering REQUIREMENT ENGINEERING. Software Engineering Phases.
Lecture 4: Requirements Engineering COSI 120b, Principles of Software Engineering.
Software Development Process CS 360 Lecture 3. Software Process The software process is a structured set of activities required to develop a software.
Software Engineering, COMP201 Slide 1 Software Requirements BY M D ACHARYA Dept of Computer Science.
Software Engineering Lecture 10: System Engineering.
Requirements. Outline Definition Requirements Process Requirements Documentation Next Steps 1.
CHPATER Agenda Software Development  Challenges of Software Development Software Engineering Software Development Life Cycle  Water-fall.
 System Requirement Specification and System Planning.
Advanced Higher Computing Science
IL Marking Get out your CPU / Memory answers Swap with someone else
Software Project Configuration Management
Classifications of Software Requirements
Exam 0 review CS 360 Lecture 8.
Chapter 4 – Requirements Engineering
Presentation on Software Requirements Submitted by
Chapter 4 Requirements Engineering (1/3)
Chapter 4 – Requirements Engineering
Chapter 5 – Requirements Engineering
CSC480 Software Engineering
Software Engineering (CSE 314)
System Requirements Specification
Strategies For Software Test Documentation
Test Planning Mike O’Dell (some edits by Vassilis Athitsos)
Spring Semester 2015 Lecture 7 Needs vs. Wants
Why ISO 27001? Subtitle or presenter
Requirements Analysis
Thursday’s Lecture Chemistry Building Musspratt Lecture Theatre,
Software Requirements Specification Document
Software Engineering Furqan Rustam.
Why ISO 27001? MARIANNE ENGELBRECHT
Software requirements
Software Engineering Lecture #3
Rekayasa Perangkat Lunak
Subject Name: SOFTWARE ENGINEERING Subject Code:10IS51
CS 426 CS 791z Topics on Software Engineering
Unit IV – Chapter 2 V-Test Model.
Presentation transcript:

CSE 403 Lecture 3 Software Requirements Reading: Pragmatic Programmer Ch. 7: Before the Project slides created by Marty Stepp http://www.cs.washington.edu/403/

Big questions What are requirements? How do we gather or find out requirements? Once we know some of the requirements, how do we write them down and document them? What should and shouldn't be included? How much detail should we use?

Are requirements important? "The hardest single part of building a software system is deciding precisely what to build. No other part of the conceptual work is so difficult as establishing the detailed technical requirements, including all the interfaces to people, to machines, and to other software systems. No other part of the work so cripples the resulting system if done wrong. No other part is more difficult to rectify later. Therefore the most important function that software builders do for their clients is the iterative extraction and refinement of the product requirements." -- Fred Brooks, The Mythical Man-Month

Software requirements requirements: goals that the software needs to accomplish "what" and not "how" the system design, not the software design describes the problem, not the (detailed) solution roles of requirements customers: show what should be delivered; contractual base managers: a scheduling / progress indicator designers: provide a spec to design coders: list a range of acceptable implementations / output QA / testers: a basis for testing, validation, verification

Policy vs. mechanism policy: A set of ideas or rules; a plan of what to do. mechanism: A process, system, or technique to get a result. It's important to decouple policy (what) from mechanism (how). Mechanisms should not dictate or overly constrain your policies. Q: How much policy information should be in requirements? A: Some, but not much detail. Don't include business policy. Good: "Our product will have an access system to protect private features such as employee records." Bad: "Only the administrator may view employee records."

"Digging" for requirements How does one find out the requirements for a project? Do: Talk to the users, or work with them, to learn how they work. Ask questions throughout the process to "dig" for requirements. Think about why users do something in your app, not just what. Allow (and expect) requirements to change later. Don't: Describe complex business logic or rules of the system. Be too specific or detailed. Describe the exact user interface used to implement a feature. Try to think of everything ahead of time. (You will fail.) Add unnecessary features not wanted by the customers.

Feature creep/bloat feature creep: Gradual accumulation of features over time. Often has a negative overall effect on a large software project. Why does feature creep happen? Why is it bad? Can you think of any products that have had feature creep? Because features are "fun" developers like to code them marketers like to brag about them users want them ... but too many means more bugs, more delays, less testing, ... "stone soup" and "boiled frog" analogies "stone soup" analogy : hungry soldiers add ingredients to "stone" soup until it is essentially real soup, then eat it "boiled frog" analogy : a frog placed into water that gradually increases in temperature will not notice the change and die

DRY and abstractions Y2K was (in a sense) a requirements problem. coders didn't consolidate date logic in one place for easy change should have had a requirement such as: "The system will be designed for expandability such that it can be easily modified later to work in years 2000 and beyond." DRY principle: Don't Repeat Yourself. Abstractions live longer than details. A good abstraction allows you to change/fix details later. "Premature optimization is the root of all evil." -- Donald Knuth The developers of that old code didn't want to handle dates the "right" way because of wasted time and efficiency. But they didn't have to handle them the right way; they just had to have a layer of abstraction that (currently) did it the wrong way, but allowed them to later swap in a new version that did it the right way, that all the other code would now use.

Good or bad? Which of the following are good requirements? Why/why not? The system will enforce 6.5% sales tax on Washington purchases. The system shall display the elapsed time for the car to make one circuit around the track within 5 seconds, in hh:mm:ss format. The product will never crash. It will also be secure against hacks. The server backend will be written using PHP or Ruby on Rails. The system will support a large number of connections at once, and each user will not experience slowness or lag. The user can choose a document type from the drop-down list. Answer: They are all bad! - Shouldn't embed exact sales tax in the req. - Compound sentence; really 3 reqs in one. - Too vague and impossible to verify. Be quantitative. How many crashes per year? Etc. - Vague. Pick just one. - Vague. How many connections? How much lag (seconds)? - Over-specified. Don't describe the UI in English.

Classifying requirements The classic way to classify requirements: functional: map inputs to outputs "The user can search either all databases or a subset." "Every order gets an ID the user can save to account storage." nonfunctional: other constraints performance, dependability, reusability, safety "Our deliverable documents shall conform to the XYZ standard." "The system shall not disclose any personal user information."

Faulk's requirement model Another way to classify requirements (S. Faulk, U. of Oregon): behavioral: about implementation; can be measured features performance security development quality attributes: part of internal construction flexibility maintainability reusability (these are more subjective)

Cockburn's template Alistair Cockburn's suggested outline for functional requirements: purpose and scope terms / glossary use cases technology used other development process: participants, values (fast, good, cheap?), visibility, competition, dependencies business rules / constraints performance demands security (now a hot topic), documentation usability portability unresolved / deferred human issues: legal, political, organizational, training Cockburn says the central artifact of requirements is the use case.

Is formal notation good? There are standard templates for requirements documents, diagrams, etc. with specific rules. Is this a good thing? Should we use these standards or make up our own? Good; standards are helpful as a template or starting point But don't be a slave to formal rules or use a model/scheme that doesn't fit your project's needs.

More about Cockburn pronounced "Ko'-burn" (!) One of the fathers of the Agile movement. championed the idea of use cases also influential in user stories in agile methodology has his own dev model called Crystal Clear development Cockburn Scale of Criticality (how important is a feature?): Loss of Life (L) Loss of Essential Money (E) Loss of Discretionary Money (D) Loss of Comfort (C) wrote a "Oath of Non-Allegiance" about accepting new ideas