第二章,了解到满足需求就是解决问题。
需求分类分为功能需求和性能需求。性能需求包括:**速度,容量,吞吐量,负载,实时性。**质量属性需求也是很重要的一环。常见的有可靠性(在规定时间间隔和条件下执行目标功能的能力),可用性(使用时可操作可访问的程度),安全性(权限相关),可维护性(排除故障的容易程度),可移植性(从一个环境移植到另一个环境的特性),易用性(用户使用该软件的效率),具体例子参照P40。就阿拉丁问答系统来说,之前对可靠性,可维护性,可移植性没有进行过多的分析。
问题解决的两个方面包括问题域与解系统。问题在现实世界中与软件系统的互动中得到解决。软件系统不会也不需要与整个现实世界互动,它只需要与现实世界的一部分互动即可。这部分就是问题的发生地,也是问题解决的基本范围——解决问题必须设计的事件和事物。问题域是需求的背景,要理解需求就必须先解决问题域。软件系统通过影响问题域帮助人们解决问题,所以称之为解系统。在解系统中软件起着主要的作用,它是软件解决方案在通用计算机上的实现。
需求的分类的目的是为了区别对待,否则分类就失去了意义。需求分类是为了将需求划分为需要区别对待的不同类型,每种类型会被文档到不同的部分,服务于不同的读者,不同的目的。分类包括广泛意义上的需求谱系,严格意义上的软件需求分类。从严格意义上的软件需求分类又包括功能需求,性能需求,质量属性,对外接口,约束。通常一个软件系统的绝大部分需求都是功能需求。功能需求是一个软件产品得以存在的原因,是软件系统能够解决用户问题和产生价值的基础,也是整个软件开发工作的基础。
理想情况下,需求应该即是解决用户问题所需要的,又是表述清晰的;即是用户的需要,又是开发者的需要。优秀的需求是具备的,它不需要做更多的扩展就可以充分说明用户需要的系统功能。完备性的判断标准是:需求是否描述了开发人员设计和实现这项功能所需的所有信息。只有完备的需求在开发中才可能被独立出来,单独对待。