1、软件生产中的需求问题
1.1 软件=程序(指令序列)+数据(程序能正常操纵信息的数据结构)+文档(与程序开发维护和使用有关的图文资料)
1.2需求=以一种清晰、简洁、一致且无二义性的方式对一个待开发系统中各个有意义陈述方面的一个集合。
1.3需求分析=What to do,do what?
1.4需求错误的高昂代价
2、软件需求
2.1需求的三个层次及关系
需求 | 理解 | 关系 |
业务需求 | 高层次目标(Object);系统应具备特性(Feature);参与各方共同前景(Vision);系统范围(Scope); | 需求定义的产物 |
用户需求 | 需求捕获的结果;从用户角度描述的系统功能需求和非功能需求,只涉及系统外部行为;通常零散且存在矛盾,需要分析、整理; | 需求捕获的结果 |
软件需求 | 用户对软件系统行为的期望,可直接映射为系统行为; | 需求分析和建模的综合 |
2.1.1软件需求
类型 | 理解 | |
功能需求 | 系统应提供的功能或服务,要点在于如何组织 | |
非功能需求 | 应用对软件系统质量和特性的额外要求,一定要注意保证信息的有效传递和注意其局限性,可分为性能需求、质量属性和对外接口等 | |
设计约束 | 非技术因素决定的技术选型,预期的软硬件环境和使用环境。 |
2.1.2良好的软件需求特质
完整性:从宏观到具体,不同层次上需求没有遗漏;
真实性:需求的正确性(分层验证)和无歧义性(建立系统术语表);
优先级:从业务角度分层次;
技术早期介入:让技术团队尽早看需求规格说明书,了解相关需求,指出问题;
3、需求工程
3.1主要活动
3.2需求工程师需要具备技能
专业技能(需求工程相关知识);
分析技能(抽象、整合、系统化思想);
交流技能(交谈和提问技巧、倾听技巧);
软件技术(尤其是软件建模与分析技术);
认知学和社会学方面知识(认知心理学、人类学、社会学、语言学);
哲学知识(认识论——掌握涉众的信仰与理念、现象学——分析在现实中观察到的各种现象);
写作技能、创新技能、协调能力、建模技能、观察技能;