软件开发常见问题总结

去年,公司请专门的测试中心对一个系统进行了测试。bug很多,但是发现很多bug实际上是重复的,而且也是比较低级的。这可能与公司在软件开发领域的存在时间短有关,专业化的程度比较低。下面我根据测试中心的问题报告对常见问题做一个总结。

分两部分。第一部分主要阐述程序上比较常见的问题,以及解决方法;第二部分阐述文档上比较常见的问题,以及解决方法。

注:报告涉及到的代码例子均为C#例子。

一、程序上的常见问题

1 查询条件输入没有进行SQL特殊字符验证

比如地名查询,在文本框中输入“%”,则可以查询到所有的地名。

解决方法:

对于Oracle数据库,进行模糊查询(精确查询不存在此问题)时需要过滤的关键字包括:百分号(%(半角)、%(全角));单引号');下划线(_(半角)、_(全角));

1)对于不会出现上述符号的查询情况。比如地名查询中,一般地名不会出现上述特殊字符,则应禁止输入这些特殊字符。C#中可以利用String类中的函数Contains检查是否包含这些字符。或者利用类Regex的函数IsMatch验证。例如地名查询可以写如下代码:

 

string patten = "['|%|_|%|_]"
if (Regex.IsMatch(this.mc_txt.Text, patten))
 
{
    MessageBox.Show(
"输入地点无效:不能包含'%_字符。""警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    
return;
 }

 

2) 对于会出现上述符号的情况,比如搜索用户名时,则把这些字符处理成一般字符,作为查询条件使用。在SQL中,利用ESCAPE转义,如下处理。

第一步:替换。将上诉字符替换为:/+特殊字符。利用下面的函数可以完成此功能。

 

 1public static string Filter(string sourceStr)
 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

YesNoYesNoCancel

不用‘吗’这种词汇。直接用‘?’

提问。比如退出程序。

Warning

 

警告

Warning

OK

**无效

输入无效,比如数字中有字母。

None

 

 

None

 

 

 

8 大数据量的查询显示

一般来讲,在查询时不要查询出数据库表中的所有记录,因为一般来讲列表控件能显示的数据数量是有限的。

解决方法:

对于有翻页功能的控件, 比如DataGridView,则不能在最开始就查询出所有数据,然后进行绑定;而是首先查询出第一页要显示的数据,然后在翻页时再去查询数据库。要进行这样的处理,建议在数据库中建一些视图,提高查询速度。

对于没有翻页功能的控件,比如ComboBox,则应该先显示出时间上最近或者最靠前的若干项,其他项则应该借助查询功能找出。

9 统计结果不一致

某种数据得全部数量和分项统计之和不一样。假设统计预案的数量,如果统计全部是201条;但是按照类型(四大类型)统计之和则可能只有200条。

解决方法:有可能是数据库问题,数据库中包含了类型之外的数据,必须清理数据库。

10 界面上出现英文

解决方法:界面应该尽量汉化。

 

二、文档上的常见问题

1、用户手册格式不统一

多本用户手册的格式各异,这就要求在写手册前统一规定,要规定到:字体、行距、文档组成部分、缩进、图片如何编号等等。

2、截图与实际安装过程不一致。

产生这个问题的主要原因可能是:写安装文档时的操作系统与实际现场部署的操作系统不一致;写安装文档时计算机环境不干净,因此写安装文档时需要清理计算机,最好是操作系统重装。

3、用户手册中的截图与程序运行结果不一致。

产生这个问题的主要原因可能是:程序更新了,用户手册没有更新。

4、用户手册中,截图界面风格不统一。

对于集成系统,涉及到的用户手册数量多,参与写的人员比较多,因此在写用户手册时,规定好大家用同一种操作系统以及用同一种操作系统主题,一般来讲都用Windows经典风格截图。

5、软件安装环境没有在手册中注明

在软件安装说明的开始部分,应该注明软件安装的操作系统环境等等。

此外,用户手册中会出现错别字以及文字中的描述与图片不一致等等,要避免这些问题,需要对用户手册做仔细认真的检查。交叉检查比较容易发现问题。

posted @ 2008-07-26 15:08  千万间  阅读(892)  评论(3编辑  收藏  举报