软件产品是指软件开发商根据市场需要开发的、具有一定适用性和潜在客户的、可销售的软件成品。它区别于应特定客户需求或根据订单开发的软件商品,通常应具有更高的通用性和适应性。但它的通用性和适应性不是轻而易举就能达到的。要实现软件的产品化,就必须在软件产品的设计上下一番功夫。
本文结合一个"多媒体远程教学系统"实例,探讨软件产品设计中的一些经验与看法。
一、软件产品设计的重要意义
所谓软件产品设计,在本文中指对软件产品的功能与架构进行设计。用传统的软件工程术语来说,它覆盖软件工程的可行性研究、需求分析、系统设计几个阶段。用RUP(Rational Unified Process-统一软件过程)术语来说,它是需求定义与软件构架设计的结果。
软件产品设计包括了需求分析、功能定义、技术方案以及需求管理的策略。
我们可以看见很多这样的例子:企业做完一个产品后,便不得不长期甚至永久地投入几个人(通常还是曾参与研发的技术骨干)对产品进行维护、跟踪和服务;企业在做同类项目时,还不得不投入几乎相等的资源;系统集成企业或以管理类项目为主的研发企业长期为工程所困,良好的市场需求并不能带来利润回报的规模增加,等等。造成以上现象,一是由于企业的软件过程成熟度不高,另一个原因,就是缺乏清晰、深入的软件产品设计。优秀的产品设计可能是软件企业发展的重要契机。好的产品设计可能使企业走向产品系列化、服务规范化、内部管理规范化的良性发展之路;而差的产品设计不仅将造成现实的资源浪费,甚至有可能使产品从此成为软件企业的一个枷锁。
其实,产品设计的来源最终都是市场。设计的好与不好,反映了设计者对技术、业务、以及用户需求诸方面的现状以及变化规律把握的结果。下面从功能定位入手,探讨怎样进行产品设计。我们所举的例子的主体假设是一个典型的系统集成企业,在多媒体系统集成项目上有较多的工程经验,在软件研发上也小有积累,市场研究认为多媒体技术在培训、教学领域将大有可为。
二、软件产品的分类及定位
与一般的针对用户明确需求的软件项目的需求分析稍有不同,软件产品的功能定义更多的是一种"定义",而不象面向特定用户的系统,其需求定义是一种记录、归纳和分析的过程。它看起来的自由度比较大。正是这种自由度可以带来产品的升华,使工程产品化。即使对于特定用户的软件需求,我们也有必要在满足特定用户的特定需求的同时,对相关技术和业务进行适当的分析和预期,使得项目的成果具有更好的适用性和重用价值。
软件产品可以分为两种:面向最终用户的和面向软件开发或集成商的。第一种主要指面向不限于计算机技术人员、完成一定应用功能的系统;后者指供专业的软件开发人员使用、用于构造第一种产品的"中间"产品,它可能是一个完整的系统平台,也可能是一个开发包或一个小的程序工具。不同种类的产品具有不同的特性要求:面向集成商/开发商的产品要求可靠、可扩充、有详尽的技术说明、有一定的技术适应性;面向最终用户的产品则要求功能完整、可靠、可维护、有较好的应用适应性。
其实,设计人员还可以根据市场形式开发介于以上二者之间的"半产品",即通过简单定制可以"生产"出应用系统的"半成品",但又不同于严格意义上的开发平台或是零散的开发工具包。这种"半成品"很实用,不仅可以提高本企业的生产率,为产品系列化打好伏笔,还可以在适当的市场时机作为商品提供给系统集成商,为企业带来额外的利益。
到底要开发什么类型的产品,是软件产品设计的第一个重要决策。
我们假设的"多媒体远程教学系统"定位在"半成品"上,希望开发出能直接用于某种应用场合(如企业培训),但可以根据应用需要进行定制
项目经理胜任力免费测评PMQ上线啦!快来测测你排多少名吧~
http://www.leadge.com/pmqhd/index.html