软件产品设计及需求分析的几点实际看法
软件产品设计包括了需求分析、功能定义、技术方案以及需求管理的策略。
软件产品是指软件开发商根据市场需要开发的、具有一定适用性和潜在客户的、可销售的软件成品。它区别于应特定客户需求或根据订单开发的软件商品,通常应具有更高的通用性和适应性。但它的通用性和适应性不是轻而易举就能达到的。要实现软件的产品化,就必须在软件产品的设计上下一番功夫。
与一般的针对用户明确需求的软件项目的需求分析稍有不同,软件产品的功能定义更多的是一种"定义",而不象面向特定用户的系统,其需求定义是一种记录、归纳和分析的过程。它看起来的自由度比较大。正是这种自由度可以带来产品的升华,使工程产品化。即使对于特定用户的软件需求,我们也有必要在满足特定用户的特定需求的同时,对相关技术和业务进行适当的分析和预期,使得项目的成果具有更好的适用性和重用价值。
软件产品可以分为两种:面向最终用户的和面向软件开发或集成商的。第一种主要指面向不限于计算机技术人员、完成一定应用功能的系统;后者指供专业的软件开发人员使用、用于构造第一种产品的"中间"产品,它可能是一个完整的系统平台,也可能是一个开发包或一个小的程序工具。不同种类的产品具有不同的特性要求:面向集成商/开发商的产品要求可靠、可扩充、有详尽的技术说明、有一定的技术适应性;面向最终用户的产品则要求功能完整、可靠、可维护、有较好的应用适应性。
其实,设计人员还可以根据市场形式开发介于以上二者之间的"半产品",即通过简单定制可以"生产"出应用系统的"半成品",但又不同于严格意义上的开发平台或是零散的开发工具包。这种"半成品"很实用,不仅可以提高本企业的生产率,为产品系列化打好伏笔,还可以在适当的市场时机作为商品提供给系统集成商,为企业带来额外的利益。
到底要开发什么类型的产品,是软件产品设计的第一个重要决策。 产品设计的来源最终都是市场。设计的好与不好,反映了设计者对技术、业务、以及用户需求诸方面的现状以及变化规律把握的结果。
软件产品设计同样也是一项软件工程,适用软件工程管理的规律,只是在功能设计上有更大的自主性??进行产品设计时可能不必完全遵从某个用户的需求。但这一自主性是为了以更高的质量满足更多用户的需求。从这一点来说,软件产品工程并无更大的自由度。所有的软件工程规范都适用于软件产品的开发。由于软件产品往往对质量有更高的要求,且在设计中有更多的不确定性,因此特别要做好需求管理、配置管理与质量管理。