软工读书笔记(2)

  Chap 7-10:软件需求

Posted by Xiaoran on March 20, 2018

本文参考自 Software Engineering : A Practitioner’s Approach — 8th edition by Roger S. Pressman

7、基本准则

  • CS 界很多工具/语言都有“3年半衰期”:你当前掌握的东西,3年之后只有一半还有用
    • 但是,软件工程原理知识不在此列
  • 7.2 谨慎写 code
  • 7.3 有效沟通

8、理解需求

很多码农在产品上线之后才发现自己搞错了用户的需求

8.1 Requirements Engineering

  • 为了理解需求而进行的一系列任务和方法被称为 requirements engineering.
    • 在与客户沟通的过程中开始,一直到建模的过程,为写码打好基础
    • 需要适应特定的项目、产品、团队

包含7个方面的内容

  • 开始(inception)
    • 对于软件有一个大概的概念
    • 可能非常简单,一句话的事
    • 也可能很复杂,包括市场分析,目标用户分析,可行性分析
  • 启发(elicitation)
    • 让用户描述出心目中的软件的样子
    • 对用户的目标排一个优先级
    • 可能会遇到各种问题
      • 不知道软件功能的边界在哪里
      • 用户不知道自己想要什么
      • 需求变化无常
  • 阐述(elaboration)
    • 整理并细化需求,形成一个模型(Chap 9-11)
    • 具体方法是创建并维护 user scenario,讲述用户与软件交互的方式
    • 把 user scenario 解析成具体的 class,定义 attributes,定义各种 method,识别 class 之间的继承关系
    • 使用 UML 等图表进行整理
  • 谈判(negotiation)
    • 有可能会有用户要求“更多的”功能
    • 有可能 stakeholders 之间的需求有矛盾,无法全部满足
    • 使用“优先级”方法进行调解,分析各种利弊
  • 规范(specification)
    • 这个词的定义非常不统一
    • 大型工程需要详尽的文件,但是小软件只需要弄懂使用场景和简单的技术环境
    • 本课的 software requirements specification 作业就对应这里的概念
      • 不一定每个软件都要写SRS
      • 但是,如果软件交给第三方开发,或者系统极度复杂,或者极度核心重要,那就可能需要SRS
  • 验证(validation)
    • 检验每种需求都没有歧义、无缺漏、无矛盾、符合规定
    • 最主要的方法是 technical review (Chapter 20)
  • 管理(management)
    • 需求会变化
    • 帮助团队识别、控制、跟踪当前的需求
    • 主要涉及 software configuration management (SCM) 的概念(Chap 29)

SRS 文件的两个功能

  • 1、软件开发商与客户之间的合同
  • 2、给码农看,按需开发

SRS: software requirements specification

需求的种类

  • functional requirments
    • 比如:每次运行30分钟
  • nonfunctional/qualitative requirments
    • 应该是可测试、可验证的,用 metrics
    • 比如 reliability, security

9、需求模型:基于情境的方法

英文是 scenario-based method

use case 和 senario 的区别

  • 对于一个 function, use case 只有一个 actor
    • 多个 use cases 组合为一个 scenario
  • scenario 有一至多个 actor

use case diagram

use case diagram

activity / swimlane diagram

10、需求模型:基于类的方法

英文是 class-based method

class diagram

class diagram

CRC模型

CRC:Class-responsibility-collaborator

CRC model index card

CRC model index card

class 的种类

  • Entity class
    • 普通的model
    • 类似 ER model 里面的 Entity
  • Boundary class
    • View, 人机交互界面
  • Controller class
    • 创建、更新对象
    • 对象之间的通信

以上的分类很接近 web 开发的 MVC 模型

class之间的关系

  • Association
    • 类似 ER model 里面的 Relationship
  • Aggregation (特殊的 Association)
    • has-a relationship
  • Composition (特殊的 Aggregation)
  • Inheritance
    • Weak Inheritance (类似 Java 的 interface)
    • 继承分为弱和强 (目的是 reuse)

9、需求模型:基于行为的方法

英文是 behavior-based method

State diagram