分两部分。第一部分主要阐述程序上比较常见的问题,以及解决方法;第二部分阐述文档上比较常见的问题,以及解决方法。
注:报告涉及到的代码例子均为C#例子。
一、程序上的常见问题
1 查询条件输入没有进行SQL特殊字符验证
比如地名查询,在文本框中输入“%”,则可以查询到所有的地名。
解决方法:
对于Oracle数据库,进行模糊查询(精确查询不存在此问题)时需要过滤的关键字包括:百分号(%(半角)、%(全角));单引号(');下划线(_(半角)、_(全角));
1)对于不会出现上述符号的查询情况。比如地名查询中,一般地名不会出现上述特殊字符,则应禁止输入这些特殊字符。C#中可以利用String类中的函数Contains检查是否包含这些字符。或者利用类Regex的函数IsMatch验证。例如地名查询可以写如下代码:
if (Regex.IsMatch( this .mc_txt.Text, patten))
{
MessageBox.Show("输入地点无效:不能包含'%_字符。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
2) 对于会出现上述符号的情况,比如搜索用户名时,则把这些字符处理成一般字符,作为查询条件使用。在SQL中,利用ESCAPE转义,如下处理。
第一步:替换。将上诉字符替换为:/+特殊字符。利用下面的函数可以完成此功能。
2 {
3 string retStr = sourceStr;
4 if (retStr == string.Empty)
5 {
6 return null;
7 }
8 else
9 {
10 retStr = retStr.Replace("/", "//");
11 retStr = retStr.Replace("_", "/_");
12 retStr = retStr.Replace("_", "/_");//转义全角的下划线
13 retStr = retStr.Replace("%", "/%");
14 retStr = retStr.Replace("%", "/%");//转义全角的百分号
15 retStr = retStr.Replace("'", "''");
16 return retStr;
17 }
18}
19
第二步:在SQL语句中的 “LIKE”关键字后加 上“ESCAPE ‘/’”。
2 输入长度没有进行验证
比如在数据库中插入一条用户信息,那么在插入之前需要验证输入用户名的长度。
解决方法:长度的具体值应该由数据库的字段长度决定。
3 对于特殊数据类型,比如数字、电话号码的输入没有进行验证
解决方法:利用正则表达式作验证。下面是常用到的几个正则表达式。
电话号码(包括座机,手机):
"(^[0]"d{2,3}-"d{7,8}$)|(^[0]"d{10,11}$)|(^[23456789]"d{6,7}$)|(^13"d{9}$)|(^15"d{9}$)";
电子邮件:
"^(["w-".]+)@(("[[0-9]{1,3}".[0-9]{1,3}".[0-9]{1,3}".)|((["w-]+".)+))([a-zA-Z]{2,4}|[0-9]{1,3})("]?)$"
正小数:
"(^[1-9]"d{0,}.{0,1}"d{0,}$)|(^[0]."d{0,}$)"
正整数:
"(^[1-9]"d{0,}$)"
URL:
"(http(s)?://(["w-]+".)+["w-]+(/["w- ./?%&=]*)?)"
4 输入没有去掉前导后导空格
解决方法:对于输入的变量,如果为字符串类型,用Trim()函数去掉前导后导空格。
5对于弹出对话框的风格没有做到统一
(主要集中在C/S系统)。
解决方法:统一规定。作如下规定
模式对话框:不要在任务栏在中显示;不要图标;标题栏要与实际对话框的作用相符合; 不要最小化,最大化按钮;不允许改变窗体大小。居中显示
非模式对话框:不要在任务栏中显示图标;标题栏要与实际对话框的作用相符合;图标与对话框的作用相符合,不能用.Net默认图标。不要最大化。不允许改变窗体大小。显示时设置父窗体,即弹出时调用函数public void Show (IWin32Window owner)。居中显示。
6 输入数据如果是必填没有加上必填标记
解决方法:加上必填标记 “*”;
7 MessageBox的处理没有统一
解决方法:
原则上,不要利用.Net自带的消息框,但是到了后期,再自己做消息框,时间上不允许,因此在利用.Net自带的消息框之上作了一些统一规定如下:
消息类别 |
Title |
Icon |
按钮 |
内容 |
出现情况 |
Error: |
*错误 |
Error |
OK |
*错误 |
致命错误,比如数据库丢失连接;尽量少用 |
Information: |
信息 |
Information |
OK |
自定义,语言尽量专业化,不要口语化。 |
提示用户操作 |
Question:
|
提问 |
Question |
YesNo,YesNoCancel |
不用‘吗’这种词汇。直接用‘?’ |
提问。比如退出程序。 |
Warning:
|
警告 |
Warning |
OK |
**无效 |
输入无效,比如数字中有字母。 |
None:
|
|
None |
|
|
|
8 大数据量的查询显示
一般来讲,在查询时不要查询出数据库表中的所有记录,因为一般来讲列表控件能显示的数据数量是有限的。
解决方法:
对于有翻页功能的控件, 比如DataGridView,则不能在最开始就查询出所有数据,然后进行绑定;而是首先查询出第一页要显示的数据,然后在翻页时再去查询数据库。要进行这样的处理,建议在数据库中建一些视图,提高查询速度。
对于没有翻页功能的控件,比如ComboBox,则应该先显示出时间上最近或者最靠前的若干项,其他项则应该借助查询功能找出。
9 统计结果不一致
某种数据得全部数量和分项统计之和不一样。假设统计预案的数量,如果统计全部是201条;但是按照类型(四大类型)统计之和则可能只有200条。
解决方法:有可能是数据库问题,数据库中包含了类型之外的数据,必须清理数据库。
10 界面上出现英文
解决方法:界面应该尽量汉化。
二、文档上的常见问题
1、用户手册格式不统一
多本用户手册的格式各异,这就要求在写手册前统一规定,要规定到:字体、行距、文档组成部分、缩进、图片如何编号等等。
2、截图与实际安装过程不一致。
产生这个问题的主要原因可能是:写安装文档时的操作系统与实际现场部署的操作系统不一致;写安装文档时计算机环境不干净,因此写安装文档时需要清理计算机,最好是操作系统重装。
3、用户手册中的截图与程序运行结果不一致。
产生这个问题的主要原因可能是:程序更新了,用户手册没有更新。
4、用户手册中,截图界面风格不统一。
对于集成系统,涉及到的用户手册数量多,参与写的人员比较多,因此在写用户手册时,规定好大家用同一种操作系统以及用同一种操作系统主题,一般来讲都用Windows经典风格截图。
5、软件安装环境没有在手册中注明
在软件安装说明的开始部分,应该注明软件安装的操作系统环境等等。
此外,用户手册中会出现错别字以及文字中的描述与图片不一致等等,要避免这些问题,需要对用户手册做仔细认真的检查。交叉检查比较容易发现问题。