四、软件产品的功能设计要点
1、产品核心功能的选取
软件产品的设计,一定有一个明确的目标:或是为了解决某个或某类具体的应用问题,或是为解决问题提供一个或一组工具。产品的目标决定了产品的核心功能,产品的其他功能都是对这一功能的补充或围绕这一功能提供的相关服务。
适当选取核心功能,有几点原则:
(1)规模适当,不贪大求全,坚持"有所不为"。具体来说,在一个产品中,非核心功能尽量的简化和弱化。以"多媒体远程教学系统"为例,核心功能应该是基于网络的多媒体远程教学,包括同步教学和非同步教学。与教学相关的学籍管理、教务管理、答疑考试、收费管理等辅助功能则采取最小化原则进行设计。这样既可以突出产品的技术特点,又可以避免以己之短搏人之长,显得产品在培训教育方面不够专业。等到核心功能稳定在产品中以后,再专门针对不同的应用要求研制不同的产品系列,如"网校版"、"中学版"、"企业版"等等。
(2)了应用要求以外,还可以根据关键技术进行版本规划。由于不同的技术对设备会有不同要求、并产生不同的应用效果,因此可以在相同的业务框架下构造基于不同技术的不同产品。例如,微软与多媒体相关的技术有流媒体技术、DirectShow、DirectPlay、TAPI等,RealNetworks也有完整的流媒体技术开发平台。这些技术分别具有一定的功能和性能特点,同时也各有其局限。利用它们的组合可以形成面向不同细分市场的产品。例如,针对以"灌输"为主、对交互性和实时性没有要求的单向式培训,设计以流媒体为主要技术的产品版本;针对实时性和交互性要求很高的教学和培训,设计以DirectShow和DirectPlay为核心技术的产品版本。
(3)尽量遵从标准协议和行业标准。除了计算机系统有多种技术标准和协议外,各行各业还有自己的行业标准。例如,对于"多媒体远程教学系统"而言,牵涉的标准和协议有媒体格式MPEG标准、流媒体传输和控制协议等;在应用领域有国家教委颁布的关于远程教育的建议标准。这些都应该充分考虑。有时不参照标准或自定义一些协议处理解决方案带来一时的快捷,但往往生命力和可靠性经不起时间的考验,在系统与其他相关系统联合使用时就会带来问题。
2、多重可重用性的分析与设计
可重用性是现在软件设计较为重视的一个特性。可重用性不仅应该在系统设计中考虑,还应该在系统分析时就加以考虑,使系统达到多重可重用性。这就要求我们不仅要采用面向对象的思想来进行系统分析,用对象概念构造系统行为,还要求我们在更高层次上对系统的操作模式或应用模式进行抽象,发现更高级的可重用性。
仍旧以"多媒体远程教学系统"为例。如果仅在系统设计时考虑可重用性,则产品可能达到部件级的可重用,即系统的某些核心特性可以在反复用于相关产品的设计之中;而如果我们加入对应用操作模式的抽象,对于"直播"、"流媒体与课件同步"、"现场控制"等构成应用的操作环节进行面向对象的分析,就可以获得更好的可重用性。―如果设计得当,一个产品可以同时满足直播教学、培训、股评、案例研讨等含有相同应用模式的多种不同应用环境,甚至连一行代码也不用重写。
多重的可重用性实际上就实现了非功能性需求中的应用适应性。无论我们设计面向哪些用户(最终用户/系统集成商/软件开发商)的产品,进行一些多重可重用性的分析都是有益无害的。
3、辅助功能的设计
这里提到的"设计得当",就包括辅助功能的设计这一重要因素。前面所述的非功能性需求有一些就反映在辅助功能的设计中。在我们把最终业务用户作为产品的唯一用户时,我们把全部注意力放在产品的主要功能设计上;当我们把产品的用户范围扩大到系统管理人员、数据维护人员以及系统集成商/软件开发商时,我们就必须对产品的辅助功能给予足够的关注。
对于应用软件产品,重要的辅助功能至少有以下这些:
(1)在线帮助功能:这仍然是面向业务用户(当然也要面向其他用户)的一项功能,用于使系统更为友好。在线帮助功能通常设计成能独立运行的文档形式,如html格式。
(2)数据管理:面向数据维护人员。虽然数据库管理系统都有现成的数据管理功能,但专门设计的数据管理可以更简便、易于使用,而且可以完成数据库管理系统本身所不能完成的工作。
(3)日志管理:面向系统管理人员。良好设计的日志功能可以作为系统管理人员或产品设计人员监视系统状态、追踪系统问题,以及作为用户使用系统的审计依据。
(4)用户管理:面向系统管理人员。用户管理与下面的两项功能一起使用,可以使系统适应不同的用户功能分配需求。系统管理人员可以最大限度地灵活指定不同用户所能执行的不同功能项,消除通常造成软件产品在用户手中"水土不服"的最主要的因素。
(5)功能定义及功能表的自动生成:面向系统管理人员,定义系统的所有可操作功能项,并在用户进入系统时自动生成由管理员为之分配的功能表作为其"主菜单"。这一功能对于含有数据库和Web界面的系统特别适用,它使得系统具有"自动演化"的能力――即系统在运行时即可替换其部分功能,并且所有的功能权限在统一的控制之下。这正是系统可维护性的"最高境界"。
(6)系统配置:面向高级用户或专职的IT人员,根据实际需求定义系统的技术参数和应用模式。经过系统配置后,系统不再是有着各种技术和应用可行性的"中间系统",而成为真正面向最终用户的产品。
五、软件产品工程-方法和规范
软件产品设计同样也是一项软件工程,适用软件工程管理的规律,只是在功能设计上有更大的自主性――进行产品设计时可能不必完全遵从某个用户的需求。但这一自主性是为了以更高的质量满足更多用户的需求。从这一点来说,软件产品工程并无更大的自由度。所有的软件工程规范都适用于软件产品的开发。由于软件产品往往对质量有更高的要求,且在设计中有更多的不确定性,因此特别要做好需求管理、配置管理与质量管理。
关于软件工程规范,本文不作专门论述,请参照有关标准和文档。