软件产品评审流程要点
1. 立项
? ? ? ? ? ? ? ? ? ? ? ? ? ?
市场需要(软件为用户解决什么样的问题)
国家政策(国家是否有相关政策提出,是否有利于该软件日后的发展) 产品定位(软件在行业中的定位) 产品功能策划
市场上类似产品的功能、特点与优势 产品的卖点与优势
开发该软件对公司的(战略)意义
性能(效率、响应时间、资源占用、稳定性) 重要等级(是否直接关系人员生命安全) 工程实施复杂度和软件维护复杂度 开发的(技术)风险是什么 市场或公司允许的研发周期 预计成本(人力物力) (可验证性)
2. 设计方案
概要设计:
提交概要设计文档,内容包括如下方面:
? 总体设计(需求规定、运行环境、基本设计概念和处理流程、结构、功能需求与程序的
关系、人工处理过程、尚未解决的问题) ? 接口设计(用户接口、外部接口、内部接口) ? 运行设计(运行模块组合、运行控制、运行时间)
? 系统论据结构设计(逻辑结构设计要点、物理结构设计要点、数据结构与程序的关系) ? 系统出错处理设计(出错信息、补救措施、系统维护设计)
详细设计:
提交详细设计文档,内容包括如下方面: ? 术语定义及说明 ? 详细设计方法和工具
? 系统详细需求分析(详细需要分析、接口需求分析)
? 总体方案确认(系统总体结构确认、系统详细界面划分(应用系统与支撑系统的详细界
面划分、系统内部详细界面划分))
? 系统详细设计(系统结构设计及子系统划分、系统功能模块详细设计、系统界面详细设
计(外部、内部以及用户界面设计))
? 数据库系统设计(设计要求、信息模型设计、数据库设计(设计依据、数据库选型、数
? ? ? ? ? ? ? ?
据库种类及特点、数据库逻辑结构、物理结构设计、数据库安全、数据字典)) 网络通信系统设计(设计要求、网络结构确认、网络布局设计、网络接口设计) 信息编码设计(代码结构设计、代码编制)
维护设计(系统的可靠性和安全性、系统及用户维护设计、系统扩充、错误处理(出错类别、出错处理))、系统调整及再次开发问题 系统配置(配置原则、硬件配置、软件配置)
关键技术(关键技术的提出、关键技术的一般说明、关键技术的实现方案) 组织机构及人员配置 投资预算概算及资金规划
实施计划(限制、实施内容和进度安排、实施条件和措施、系统测试计划(测试策略、测试方案、预期的测试结果、测试进度计划))、验收标准
3. 技术选型
? ? ? ? ? ? ?
版权
是否有应用先例,是否为常用技术 类似的技术是否在公司内部使用过
使用此技术的额外风险是什么(有没有失败的案例,原因是什么,如何避免)
此技术是否是过时的技术(技术没有发展前景,或者提供者将来不再提供技术升级等) 是否为成熟的技术(应用范围广,大公司或者标准组织提供) 能有选择的,尽量不要用定制的技术(其它类似产品或者项目不能复用的技术尽量少用)
4. 界面评审
指导原则:
? 关注用户及其任务,而不是技术 ? 首先考虑功能,然后才是表示
? 从用户的视角看问题,使用用户的词汇进行描述,不必向用户暴露实现细节 ? 使常用的用户任务简单化,不要让用户解决额外的问题 ? 促进学习,保持一致性,引导用户的使用习惯 ? 保持显示惯性,传递信息,而不仅仅是数据 ? 设计应满足响应需求 颜色:
? 统一色调:采用标准Windows的基本色调,做到与操作系统统一,读取系统标准色表。 ? 整个界面色彩尽量少的使用类别不同的颜色。除非特殊场合,杜绝使用对比强烈,让人
产生憎恶感的颜色
? 同时色调也具有一定的含义,在整个系统中应保持色调含义的一致性,避免同一中颜色
在不同的画面中表示不同的意义。 资源:
? 图标资源也需要遵循统一的规则,因为不同的图标代表不同的意义。例如:我们用图标
来表示保存,因此我们在整个系统中只要涉及到保存的话,都应该使用同一个图标,不
论是用在工具栏上还是在菜单上,还是在按钮上。 ? 图标、图像应该很清晰的表达出意思,遵循常用标准,或者用户机器容易联想到的物件,
绝对不允许画出莫名其妙的图案。 ? 鼠标光标样式统一,使用系统标准。注意:本系统中不采用窗体做进度条,对于按钮后,
鼠标变成沙漏形状,执行完成后,鼠标变回。 字体:
? 系统中中文一律采用标准字体“宋体”,英文一律采用标准Microsoft Sans Serif ,除登
录界面和图标中的特殊字体用图片实现,原则上不考虑特殊字体(隶书、草书等,特殊情况可以用图片取代),保证每个用户使用起来显示都很正常。
? 字体大小统一规定,MSS字体8磅,字体为10磅,字体颜色一般采用系统默认颜色。 ? 所有控件尽量使用大小统一的字体属性,除了特殊提示信息、加强显示等例外情况。 文字表达:
? 使用统一的语言描述,提到同一个概念时,用相同的术语描述。例如一个关闭功能按钮,
统一描述为关闭,避免使用返回、退出描述。
? 通常情况下,每个窗口应该有一个唯一的标题,和触发它的菜单或按钮命令相对应。 ? 在提示信息中多用“您、请”等礼貌用语,不要用对用户来说晦涩的计算机用语,杜绝
错别字。
? 断句、逗号、句号、顿号和分号的用法,提示信息比较多的话,应该分段。 ? 错误消息对话框有仅仅指出问题,还要提供解决问题的建议。 控件选择:
? 不要随意使用控件,控件功能要专一,风格统一。如果没有好的控件,则使用标准控件。 ? 同一类型的控件操作方式相同,避免出现一个控件双击可以执行某些动作,而同样的控
件,双击却没有任何反映。
? 一个控件只做单一功能,尽量不复用。 控件布局,窗口不拥挤,按功能组合控件 ? 屏幕不能拥挤,也不能太松散。
? 整个项目,尽量采用统一的控件间距,通过调整窗体大小达到一致,即使在窗体大小不
变的情况下,宁可留空部分区域,了不要破坏控件间的行间距。
? 文字和文本框一般采用左对齐方式,如单选文本框前的标签提示,使用左对齐加冒号;
数据列表表头文字和内容,也采用左对齐。文字和文本框中的文字水平中对齐。横排按钮,最右边的一个与上面的控件右对齐。 ? 为了使界面不出现跑版或者难看的局面,解决方法是固定窗口的大小,不允许改变尺寸。
5. 数据库评审
设计数据库之前(需要分析阶段) ? 数据库选型的考虑
? 必须对所有的实体关系绘制出关系图及相关说明,创建数据字典和ER图。 表设计
? 标准化和规范化:数据的标准化有助于消除数据库中的数据冗余。第三范式(3NF)通
常被认为在性能、扩展性和数据完整性方面达到了最好平衡。事实上,为了效率的缘故,对表不进行标准化有时也是必要的,但要有充公的理由。
? 数据驱动:采用数据驱动而非硬编码的方式,许多策略变更和维护都会方便得多,大大
增强系统的灵活性和扩展性。 字段设计
? 每个表中都应该添加的3 个有用的字段(dRecordCreationDate,在VB下默认是Now(),
而在SQL Serve下默认为GETDATE();sRecordCreator,在SQL Server 下默认为NOT NULL DEFAULT USER;nRecordVersion,记录的版本标记),有助于准确说明记录中出现null 数据或者丢失数据的原因
? 对地址和电话采用多个字段:描述街道地址就短短一行记录是不够的。Address_Line1、
Address_Line2 和Address_Line3 可以提供更大的灵活性。还有,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型和标记类别。 ? 使用角色实体定义属于某类别的列:在需要对属于特定类别或者具有特定角色的事物做
定义时,可以用角色实体来创建特定的时间关联关系,从而可以实现自我文档化。 ? 选择数字类型和文本类型尽量充足:在SQL 中使用smallint和tinyint类型要特别小心。
比如,假如想看看月销售总额,总额字段类型是smallint,那么,如果总额超过了$32,767 就不能进行计算操作了。而ID 类型的文本字段,比如客户ID 或定单号等等都应该设置得比一般想象更大。假设客户ID 为10 位数长。那你应该把数据库表字段的长度设为12 或者13 个字符长。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。
? 加删除标记字段:在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在
关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。 选择键和索引
? 键设计4 原则:为关联字段创建外键、所有的键都必须唯一、避免使用复合键、外键
总是关联唯一的键字段。 ? 使用系统生成的主键:设计数据库的时候采用系统生成的键作为主键,那么实际控制了
数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。采用系统生成键作为主键还有一个优点:当拥有一致的键结构时,找到逻辑缺陷很容易。
? 不要用用户的键(不让主键具有可更新性):在确定采用什么字段作为表的键的时候,可
一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。 ? 可选键有时可做主键:把可选键进一步用做主键,可以拥有建立强大索引的能力。 ? 逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对
任何外键列采用非成组索引。考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。
? 大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用
的键,比如运行查询显示主表和所有关联表的某条记录就用得上。 ? 不要索引memo/note 字段,不要索引大型字段(有很多字符),这样作会让索引占用
太多的存储空间。
? 不要索引常用的小型表:不要为小型数据表设置任何键,假如它们经常有插入和删除操
作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。 其它
? 防止数据冗余、防止更新异常、插入异常和删除异常! ? 每个表存在主属性,而且所有的属性都是依赖于主属性!
? 如果表的数据记录少,如不会超过上万条记录,可以考虑不建索引,数据记录多时,必
? ? ? ? ?
须建索引。特别是上百万或者几千万条记录。
如果表的记录总值会超过500万条以上,考虑建分区。数据库文件大于4G时,考虑采用多个文件组,存储在不同的磁盘上,以便于用户对某些数据进行精确备份。 10G以上海量数据存储时,考虑对过去的数据采用数据压缩技术。 考虑表与表之间的关联最好不要超过三层。
对于大数据量的表只允许关联两个相关的小表,小表记录条数不允许超过1万条记录。 数据库设计时对于统计数据,要有统计表,避免发生查询时为了获取一个数值对几十万条记录进行统计计算的情况,如年统计、月统计等。
好的数据库设计,必须有一定的数据库知识的人来操作,才会发挥好的性能。操作数据库知识考察的要求:
? 编写SQL语句、视图、存储过程需要考虑不同的语句写CPU、内存的影响,优化使用查
询、联接、分组等。
? 对常用的数据链接如left join、Right join、join、union和 union all 的用法熟悉、理解其
数学的原理。
? 在编写与数据库相关的操作时,控制并发数、尽可能地不要去查询冗余的数据。
? 大量的操作尽量在程序内完成,易于控制内存或者CPU占用。使用触发器或者游标,
要考虑性能。
6. 通讯程序评审
误码低,可靠性高 巡检效率高
占用资源少(CPU、内存及其它资源) 长时间运行稳定好
安全性好,出错可自恢复 接口友好,上层调用方便 易于功能或协议扩展 (可通用)
7. 用户体验评审
TAB键顺序
? 习惯用法、阅读顺序,从左到右、从上到下 快捷键、加速键和弹出菜单 ? 使用非破坏性缺省按钮,回车、ESC键的正确使用。对于弹出模态窗体,有默认加速键,
如回车表示激活当前窗口设置为default的按钮动作,esc表示关闭窗口。同时在调用default按钮动作和关闭动作时候,不应该做有破坏性的操作,避免用户错误操作产生危害程度,例如不能把删除数据等功能的按钮作为缺省按钮。当用户要提交很多数据时,应该屏蔽ESC,或者做退出提示,告诫用户是否保存提交。 ? 尽量避免使用右键菜单,如使用的话尽量在可视化界面上拥有对应的按钮或者菜单选项。