首页 > 范文大全 > 正文

摇号软件典型案例分析

开篇:润墨网以专业的文秘视角,为您筛选了一篇摇号软件典型案例分析范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:摇号的公平性往往是社会的热点问题,结果的随机性是重要保障。本文试图通过对随机性函数的概率分布、重号的未剔除和SQL缓存的异常等常见问题进行归类和总结,指出在编写该类软件时应注意的问题,以此来提高我省整个软件摇号的质量。

关键词:摇号软件;SQL;随机性

中图分类号:TP311.52

随着我省城市化进程的加快,全省的各类社会保障性住房和商品住房大量增加,住房已成为体现社会公平的热点问题之一。同时我省“两化”的深度融合,信息化正成为我省新的经济增长动力。为了保障住房的社会公平、公正和公开,软件的随机性摇号成为了一种很好的选择。同时我所为了更好的增强事业单位的公益性,为了更好的适应市场经济发展的需要,为了更好的做深做精做宽检测标准,加快检验事业的转型升级,加快科技的创新驱动。我所于2011年开展了软件摇号结果的随机性检测业务。

1 随机数的产生原理

随机数是由随机种子根据一定的计算方法计算出来的数值。所以只要计算方法一定,随机种子一定,那么产生的随机数就不会变。

代码在相同的平台环境下,编译生成exe后,每次运行它,显示的随机数一样的概率很高。这是因为在相同的编译平台环境下,由随机种子生成随机数的计算方法是一样的,再加上随机种子一样,所以产生的随机数一样概率很高。只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟(即定时/计数器的内存值,内存地址为0040:006CH,实质是一个时钟信号周期记数器)。

如果想在一个程序中生成随机数序列,需要至少在生成随机数之前设置一次随机种子。

在以该种子数为基准以某个递推公式推算出来的一系列数,我们称之为随机数(伪随机数),当对这系列数进行重复统计的时候,发现近似符合正态分布如图1。

2 摇号软件存在的风险

2.1 重号剔除。某单位组织开展了住房摇号,起初通过一个台面对未被选中房屋进行参与摇号人员数据的录入,后来由于参与人数越来越多,组织方临时决定开启多个台面进行录入,但是在录入的过程中也有很多参与人员进行选房的修改,导致在不同台面录入和修改的数据在数据库记录表中对同一套房屋有重号现象,因此在进行摇号的过程中,大屏幕上显示部分选房摇号人员编号出现重复的情况。该事件说明在摇号软件设计时,要尽量考虑悲观情况,剔除存在重号的可能性,特别在摇号时、显示时千万不要出现重号,容易引起现场混乱。

2.2 SQL语句的执行原理。数据库的SQL在执行语句时,首先需要语法和语义检查,通过用户权限的验证和SQL语句优化后,可将查询结果数据放到缓存中。

当下次用户执行相同的执行语句时,先是在缓存中判断是否存在相同的语句结果集,以此来提高SQL的查询效率。

某软件公司在开发该摇号程序时,使用网站的形式进行了多用户多机器的摇号,由于数据库执行原理中缓存和浏览器本身Cookie的原因,导致我们在进行现场检测时多次出现同一房号被多人摇中,但部分摇中人员不能被选中的情况(已经作快的人摇中)。

2.3 摇号结果被替代的风险。某房产公司因商品房供不应求,需进行现场摇号选房,在进行摇号软件代码检测时,我们发现摇号的结果是从一个文件中取出的,这个文件的随机摇号顺序号是根据多次打乱后产生的(总参数.保存到文件(总参数.号码, @"c:\" + Guid.NewGuid().ToString() + ".txt");),这样就存在一个风险在程序运行时文件产生后,但没有被摇号人员完全占据时,可进行文件名的覆盖替代后进行结果输出,从而改变摇号结果。

2.4 操作系统位数带来的风险。现阶段普通微机的CPU内存寻找方式基本都是采用虚拟内存方式寻址的。虚拟内存简单说就是把内存分成很多块,块在内存中的位置是自动分配的,块与块之间有保护措施,防止程序调用不该调用的数据,但是使用的程序本身不知道使用的虚拟内存,在寻址时,操作系统会根据虚拟地址转换为物理地址进行数据的读取,因此操作系统位数决定了寻址能力的大小,因此访问数据库的方式也是不同的。在摇号软件的检测时,应在可移植性方面进行大量的分析,避免环境的不一致,导致的软件无法运行。

2.5 定时器间的控制。在某次摇号检测时,发现在摇号中选人间隔时间(指摇中人员间隔时间)和滚动间隔时间(指界面中滚动的时间)可以人工设置。当选人定时器触发时,另外一个不能使用,并且当前滚动的人员为摇中人员,但是在参数设置中可将选人间隔时间小于人员滚动时间,这样就出现了没有滚动就顺序摇下去的后果。因此选人间隔时间必须大于人员滚动时间,且至少应2倍以上,才能保证摇号的公平性。

3 摇号软件检测流程和方法

我所根据软件测试相关规范并结合实际情况,使用黑盒测试(功能测试)和白盒测试(结构测试)相结合的方式。

在黑盒测试用例设计中使用等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法等。其中在对多用户进行摇号测试时,附加用户压力并发测试。

在白盒测试中主要使用代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、路径覆盖等。主要通过断点输出、异常堆栈查看、类调用关系图分析、语句覆盖和判断覆盖等方式进行软件流程、逻辑结构等方面检测,同时使用Fortify工具对编码的规范进行建议性提示。具体检测流程如图2。

在摇号过程中,我们对一些异常事件情况也进行了约束,规则如下:

①当服务器断电时。应在检测时关注对已经产生的竞得人编号是否继续有效,进行描述;对当前正在摇号所产生的竞得人如果有效,进行如何记录;②当客户端断电时。客户端断电前正在进行但仍未产生竞得人编号的,需进行重新摇号;③当网络中断时。对网络中断前正在摇号所产生的竞得人编号应仍然有效,但需手工记录。

4 摇号软件的常见算法

摇号的算法是保证摇号公平性的关键,因此这些年的检测发现数组交换排序算法、时间间隔排序算法等比较常用。

5 未来的展望

多样化。摇号软件目前正在普及化,从住房摇号向商场摇奖、汽车摇号等多领域、多层次的深化;但市场上的摇号软件良莠不齐,市场迫切需要我们第三方鉴定机构进行公平、公正的鉴定;精细化。从传统的功能测试逐步向代码测试、测试脚本编程方向发展,需要我们掌握更多的测试工具和测试方法,需要更多兢兢业业的服务性人才;广泛化。通过摇号软件的检测,我们通过举一反三,向知识产权侵权鉴定方向发展。

参考文献:

[1]张俊荣.软件项目与典型程序在程序设计类课程中的应用研究[J].计算机光盘软件与应用,2013(14).

作者单位:浙江省电子信息产品检验所 软件评测实验室,杭州 310007