关于如何生成《模拟用户日志(登录登出)》的思考
一. 碎碎念
实训当中,老师让生成50E条模拟日志,原本以为挺简单的事儿,但思考起来发觉思维十分的凌乱。
然后,我以测试的角度去思考,发觉思路变得清晰了很多。
暑期实习,想尝试几个月测试岗的,我觉得这会让我的弱项---详细分析和设计,得到很大的补充。
我自觉抽象能力,和对于大趋势的认知能力不错,但涉及细节则毫无章法。
二. 问题
如何去生成【有关用户登录登出的】模拟日志,用户总数为800W,生成数大致为5E条。
三. 问题分析
☆角色和问题本质:
用户,时间,条目数;
去除大部分约束后,就是这样的一个问题,你手上有红、绿、蓝......的小球,每个都有无限个。
请你放到有xx格的盒子中,每个格子中,可以放无限多的各种球。
☆约束:
1.用户的数目:800W;
2.用户登录后,必须登出;
3.时间需要有序,作为排序的key的角色;
4.每个用户可以拥有多个时间点;
5.每个时间点可以容纳多个用户;
6.用户的登出1,需要比登录2早;
7.条目数需要大致5E;
8.条目数 = 时间点 * 时间点中的条目数 or 用户数 * 用户操作时间点。
这样的解决,和软件测试的等价类划分+弱测试相当类似。
这给了我一种思考的启迪,先思考事物本身,继而再思考事物间的联系,不止测试用例的设计。
☆算法设计
1.首先要明白,最本质的关系就是落子模型,把棋子散落到棋盘格子中。这是我暂时想到的乘法的意义;
2.次之考虑一个时间格子中,可以容纳几个用户。用随机?用固定?直接1对1;
3.然后考虑用户自身的制约,登入必须登出;
4.最后考虑边界限制,用户登入登出的时间差。
考虑方向:本身的边界,相互关系(主要),特殊制约。
☆映射
那么?要怎么组织这些数据呢?一条一条生成,然后立刻写,明显会因I/O问题,极为抵消。
所以基本都会想到,block形式地写到磁盘。
时间在这里,就优势明显了,足够大,可以映射为数组的下标。
而用户数,需要用到链表+数组的组织形式。
当然,也有不用考虑如何去映射到物理储存上的情况。