本文参考自 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
activity / swimlane diagram
10、需求模型:基于类的方法
英文是 class-based method
class diagram
CRC模型
CRC:Class-responsibility-collaborator
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