软件需求工程学习笔记(一)
众所周知,我们所处的时代是信息技术引领的时代,我们每一个人都置身于这场席卷全球的信息化革命的浪潮之中。作为信息化革命的核心工具载体,软件系统的作用日益凸显,软件生产在整个社会生产中所占的比重逐年递增。对于软件服务业的从业者来说,一方面,整个产业的发展已经进入了稳步增长的阶段,软件企业的市场竞争力越来越依赖于软件产品本身的质量;另一方面,在软件技术飞速发展和普及计算机教育的共同作用下,整个软件行业的从业门槛逐年下降,软件工程师的成长阶段逐渐拉长。在不久的经来,会出现一种情景,那就是:评价一个优秀软件工程师的标准,会逐渐偏离技术指标,软件产品的市场竞争力将成为衡量软件工程师素质的唯一标准。这并不意味着技术不再重要,相反,技术因素会变得无比重要,与软件的社会生产力发展水平相适应,技术因素会逐渐的从功能要素转变为约束要素和基础要素,就好像是在NBA赛场上,不管板凳上坐了多少个好球员,决定球队竞争力的永远是上场的那五个人。软件产业基本盘的扩大,为软件行业的从业者提供了前所未有的机会和发展空间,但软件产品基本竞争力的构成要素,将逐渐从知识层转向理解层。
对软件项目来说,最重要的理解,就是对软件需求的理解。对于一个软件项目来讲,软件需求并不是软件产品的要件,但是软件需求对应着软件系统的目的性,软件产品的实际价值来源于软件需求的功能设定,评价一个软件产品是否实现了设计意图,应该参照软件需求的功能设定,对软件产品实际发挥的功能进行参照。
研究软件需求的学科是软件工程。一个普遍流行的说法是:软件危机导致软件工程的出现,需求危机导致需求工程的出现。按照工程系统论的观点,如果说软件危机是直接实践发展为工程实践的转变信号,那么需求危机则是工程实践向系统工程实践的转变信号,因为需求工程是关于软件系统目的性的工程实践,而系统正是围绕目的而产生的。换句话说,关于需求工程的研究会从软件工程实践中汲取大量关于需求的知识材料,这些知识材料又会围绕着研究者的视点被整合形成系统。也就是说,软件项目起始于对实际业务的系统化,终止于由计算机硬件构成的系统。需求工程起始于与系统目标有关的知识收集,终止于知识的系统化和精细化。很显然,需求工程是一种基于知识的工程,需求工程的产品是软件项目目标系统的系统描述。需求工程是软件工程发展到一定阶段的必然产物,是软件项目中充分研究项目目标的学科,是软件工程学科精细化发展的一个分支方向。
需求工程的研究应该充分吸收信息工程和系统工程学科发展的研究成果。信息资源开发和信息系统建设是软件项目最根本的立足点。需求工程的产品是软件工程的重要依据,是业务知识在软件项目中的集中体现。从总体上说,按照系统问题的分类,软件系统的设计和构建问题表现出硬系统问题的特性,那么需求工程处理的问题更多的则是软系统问题,研究需求工程问题应该注重发挥软系统方法论的指导性作用。
软件工程的核心关注点,是从软系统问题到硬系统问题的转化,致力于整合计算机系统的功能从而能够在信息空间构建真实世界的投影。信息空间是存在于人类现实感官之外的,信息空间通过信息和信源之间客观实在的联系而与现实世界发生联系。信息空间是人类固有的属性,是人类理解空间的子空间,信息空间存在的必要条件是其客观物质性,这种特性产生于信息和信源之间的客观实在的联系,这种联系的重要体现是信息能够通过执行机构对信源产生实际的作用。可以把构建信息世界的工作划分为两个维度,一个维度是从信源发现信息,然后通过计算机系统能够识别和处理的信息模型表达信息,这个维度的问题偏向于硬问题,是建立在技术发展的基础之上的。另一个维度是建立共识的维度,是将人们各自独立的信息空间联结起来,在一定的边界内通过系统整合形成公共的信息空间,这个维度的问题偏向于软问题。软系统问题向硬系统问题转化的途径,或者说信息世界能够建立的基础,就是人们在一定范围内共同认可的知识。软件系统能够对现实世界产生的作用,来源于构成软件基础的知识能够对现实发挥的作用,人们对于软件系统的信赖源自于人们对知识的信念。
从这个角度讲,需求工程的工作也可以划分为两个维度,寻找问题域与表达问题域。前者是指在理解的层面上寻找对问题域的共同认识,然后通过知识表达这种对问题域的共同理解;后者是使用信息模型表达知识。系统科学和系统工程,正是研究在特定问题域寻找共识并表达共识的问题,关于整合的问题。
综上所述,在当前形势下,两化融合和信息化建设事业的飞速发展对软件产业提出了新的要求。一方面,软件企业应该能够以更快的速度提供具有市场竞争力的软件产品;另一方面,市场上应该有越来越多的具有核心竞争力的软件企业参与到这个伟大而艰难的历史进程。影响软件产品核心竞争力的重要因素是软件需求,影响软件从业者职业素养的重要因素是对需求工程的理解。探索知识之间的联系,增进对软件需求工程的认识和理解,这就构成了软件需求工程的研究目标和研究背景。