物联网测试地图

物联网的出现,给测试带来了很多有意思的挑战,使得众多QA开始重新思考传统的测试过程。

例如,我最近测试了一个产品,在这个产品中的移动APP会跟连接的机器产生会话。这两个设备各种各样的状态给测试场景的设计带来了特别大的挑战。下面给大家介绍一个很有用的物联网产品测试框架——物联网测试地图,它可以帮助我们管理物联网设备多种排列的复杂状态。

物联网测试因素

当我们测试简单的web应用时,通常要考虑的状态有:

  • 服务器宕机
  • HTTP请求超时
  • 网速慢
  • 授权和认证错误

测试任何互联网应用的时候,需要警惕这四种状态。对于移动应用,操作的是移动环境,需要关注额外的几种情况:

  • 离线模式
  • 在线模式
  • 杀掉Activity
  • 后台行为
  • 语言
  • 地理位置

我们再看“连接的机器”所带来的状态多样性,通常还有:

  • 机器WiFi断开
  • 机器WiFi连接
  • 机器繁忙
  • 机器休眠

这意味着即使只有上述给定的状态集,整个系统在任何时间点上可能会有96(4x6x4)种状态。

由于系统中状态转换会引入附加的约束,这些状态都不能当做独立的实体。例如,状态从“离线”变成“在线”很可能触发一系列的事件。

上述因素还仅仅是冰山一角。随着对规范的深入了解,把不同的状态跟逻辑场景结合起来将会更加的复杂。

对于静态系统的可变数据集,已有的web测试技术可以很好的用来抽取测试场景,比如all pairs(开源的配对测试工具)、等价类划分、边界值分析法等。这些技术通过淘汰的逻辑来优化测试数据集。

例如,all pairs技术会淘汰重复的数据配对组合。但是,对系统的可变状态设计测试场景时,这些技术是不可靠的,废弃的系统状态会使得系统通讯不畅。当然,这些技术对于物联网系统中的单个单元还是很适用的。

因此,非常有必要搞一个物联网测试地图。

可视化地图

大家肯定都在地理课上看过地图。但我这里所说的地图是针对测试场景的,它列出所有潜在的系统因素,在测试某个特性时可以从中抽取必要的测试场景。

产品的每个系统的n种状态在同一个可转动的圆环中列出,逻辑上相邻的状态在环中相互挨着。非功能需求(NFR)在测试复杂集成的时候很容易被忽略掉,于是把它们在一个环中单独列出。

下图就是我所说的物联网测试地图:

下面以一个例子介绍地图的使用场景,该例子仅涉及移动设备和机器交互部分,需要关注的环是设备、机器和网络。

把移动设备和机器固定在WiFi连接的状态,转动网络环,可以得到下面这些场景:

  • 未授权用户尝试访问机器会在App上触发“访问被拒绝”的错误消息
  • 服务器宕机和服务器错误会触发相应的业务错误消息——“程序出错,请稍后重试”
  • 响应超时可能有两种情形:重发同一个请求并显示“正在加载”图示,或者显示上面那样相似的错误消息
  • 非法请求会触发消息“请更新你的App”

继续保持移动设备的WiFi为连接状态,转动机器环:

  • 当机器是离线模式的时候,App应该显示“请检查机器的网络连接”
  • 当机器繁忙的时候,弹出警告“机器繁忙,无法完成请求”
  • 当机器休眠或者在另一个网络上的时候,应该显示“没找到机器”等类似的消息
  • 然后,机器调到正确的网络,应该恢复移动设备和机器的连接

切换机器环为WiFi连接,转动移动设备环:

  • 当移动设备离线时,应该弹出对应的消息或者禁掉操作按钮
  • 当移动设备恢复在线模式时,App应该发送相应的请求去连接机器
  • 当移动设备的网络从WiFi切换到3G,应该有什么样的行为?
  • 当用户正在试图连接物联网设备的时候突然接到电话,将App置于后台运行,这时候还能收到完整的请求还是需要从头开始发送请求?
  • 安卓设备杀掉一个在后台运行了一段时间的App,用户的最后屏幕状态还会保存吗?
  • 有本地化需求的App要在每个场景层面进行验证

就这样,多次旋转地图可以扩展产生多个场景。尽管有些场景可能不适合当前的特性,有些甚至跟业务需求无关,这个测试地图还是非常详尽的。

在实践层面,对于有多个QA在测试同一个物联网产品的团队,地图可以作为大家共同参考的手册。这个地图把工具、设备、场景和协议的排列以易于理解的方式呈现出来,覆盖了测试场景设计这个独特的需求,是一种非常高效的合作方式。


更多精彩洞见,请关注微信公众号:思特沃克

Share

3D打印的各种问题及解决方案

3dprinting

3D打印机已经买回来几个月了,基本上每天都要打印一些东西,期间遇到了很多的问题积累了很多的经验。虽然现在桌面级的3D打印也算是比较简单好用了,但要追求好一点的打印质量,还是得折腾。

打印校准

打印机的校准包括X、Y、Z和A、B(就是喷头)两个轴的校准。最重要的是XYAB,因为他们直接关系到打印的尺寸大小及表面质量。

Cura和Slic3r等工具导出的是GCODE格式。GCODE格式使用明文描述路径。Sailfish Firmware只支持X3G文件,是一种二进制文件。由于打印机所使用的CPU速度较慢,处理文件并转换成脉冲比较慢,会影响打印质量。所以使用GPX工具将GCODE转换为X3G后,每个指令所走的位置都已经转换成脉冲,甚至可以对一些路径进行加减速的处理。打印机的CPU就可以直接的读取脉冲并控制电机运动。

XY steps/mm矫正

在转换的过程中,XY的steps per mm这个参数非常重要,讲的是走一个毫米需要多少的脉冲,如果该值过小,则会少走一些距离,造成距离偏小。这个和机器的结构有一定的关系,牵扯到同步齿的齿数、电机的参数等,RepRap Calculator提供了这个参数的计算器,非常方便。

calculator

MBot最初用的是17齿的齿轮,和Replicator是一样的。后来经过改进用了18齿的齿轮,和Replicator 2是一样的。通过计算器可以看到,88.89 steps/mm是理论值,但是MBot和Replicator 2中用的是88.573186这个值。和88.89比较起来,会少走一些距离,导致最后打印尺寸偏小。dcnewman开发的GPX提供了正确的参数,但截至目前尚有一些问题,不建议使用。

为了矫正88.57带来的误差,可以采用自定义的配置文件进行配置。mbot.ini是我的Mbot Cube的配置文件,在使用gpx的时候,指定gpx -c mbot.ini xxxx.gcode即可正确转换。

当然你的打印机可能依然不是正确的,需要使用一些工具进行矫正。传统的做法是使用20mm calibration box,测量外观尺寸。但这样做有一个缺点,由于喷头挤出的塑料可能有误差,会造成纠正的值将外壳的误差也算进去了。正确的测量方式是使用calibration sticks,根据不同的打印平台的长度,分别进行XY的测量,然后测量出两个缺口的距离。这样可以排除喷头的误差。

medium_9001test

我的打印机使用88.89,打印出来的距离正确。

AB轴喷头纠正

喷头的step per mm会对挤出的塑料的多少有影响,在机械结构不变的情况下,该值越大,则挤出的料越多。过多的料称之为过挤出,会造成外观尺寸偏大,内圆半径变小,顶层可见各种重叠的塑料;挤出过小,会造成外观尺寸变小,内圆半径变大,顶层可以见各种孔洞。正确的喷头参数,会对打印质量造成非常大的影响。

Calibrate your 3D printer提供了调整喷头的参数方法,当然这篇文章也提到了如何修正其它参数。还有一种普遍使用的方式是在材料上做好标记,然后走10cm,测量实际走的长度。当然对于不能用print run的打印机,我写了一个gcode文件,执行后会自动走10cm,然后测量实际的长度。我的打印机是正确的,所以对于喷头也不用做过多的处理。

孔偏小

打印中非常常见的问题是孔变小,通常孔会变小0.5mm左右,如果打印这个图形,很可能会发现无法插上。测量孔的直径,会发现孔小0.5mm,而柱子的直径是正常的。

test_plug_preview_featured

我在MBot Cube打印,结果是这样。然而在FlashForge Creator Pro上面,则两个可以插上。这个问题困扰了我很久,至今还没有解决。试过将同样的gcode文件分别转换成两种机型的x3g进行打印,还是一样,所以可以排除一些切片器的问题。在研究这个问题中,有一些文章可以参考。

虽然我没用过最终解决这个问题,但以下是有一些方法可以改善这种问题:

  • 改变挤出量
    在Cura和Slic3r中,都有改变挤出量的选项。甚至在Simplify3D中,PLA材料的默认挤出量就是90%。经过测试,90%的挤出量比较合适,打出来的测试块刚好可以卡上。但是外观尺寸会同样变小0.2mm,内圆仍然小0.2mm,但圆柱也同样会小0.2mm,这样两个尺寸就刚好能够插入。更小的挤出量则会带来一些问题,不推荐设置。
    改变挤出量虽然能够缓解一些圆孔的问题,但也会影响顶层的质量。为了弥补这样的缺陷,只能将顶层的厚度设置为1mm,或者5层。这样顶层基本上就密闭了。
  • 喷头形状
    打印negative_space_tolerance_test.stl,我的打印机只能拆下来2个,只能说打印质量比较差。通过很多次的对比,发现喷头的Flat tip area(见下图)的大小会影响到tolerance的,厂商已经在着手改进中了。

nozzle_02_-1280x720

  • XY Size Compensation
    Slic3r中提供了一个XY Compensation的选项,在Dimension Errors中有提到。和改变挤出量不一样,这个直接对切片后的图形进行补偿,不会产生顶层孔洞的问题。
    在目前的Cura中还没提供这样的功能,但在Cura的开发15.06版本中,已经准备提供类似功能。Simplify3D在最新的版本中已经提供。
  • 从设计上规避
    在设计的阶段就根据孔的大小预留一些空间,但这样对于别人已经设计好的模型就很难修正了。并且你的打印机的修正量不一定适合别人。

圆不是圆

你可能会发现打印园的起始的连接部位会有一些凸起,并且圆可能是椭圆。如果观察一下打印时候的速度及噪音,你会发现在打印圆的时候可能会嘎吱嘎吱的响。这是因为园会拆分成多条直线,导致每条直线会起起停停,在速度较高的时候可能会造成一些丢步或者抖动。解决方法是打印周长的时候,选择小一些的速度,例如40mm/s,这样打印质量就会很好了。观察Simplify3D的GCODE,发现它可能对不同的周长做了不同的处理,小的圆弧走的速度较慢,打印质量很好。

顶层的洞

如果挤出正常,顶层出现孔洞,则需要将Top/Bottom的层数设置得更好,一般1mm左右能够得到很好的效果。另外infill的百分比也比较影响,因为infill很低(10%以下)的时候,打印Top的时候就会变成Bridge,造成打印质量下降。

打印错层

Sailfish Firmware中有一个Accerlation的选项,该选项打开时固件会根据当前的GCODE生成相应地加速度,使得打印机在降速和提速的时候,能够平稳的以一定的加速度进行提速。关闭时,会始终以电机的最大能力作为最大加速度进行加减速,当电机无法接受预定的速度时,会造成丢步,久而久之积累下造成打印错层。

打印机噪音

我的打印机一直有嘎嘎嘎的噪音,晚上打印的时候声音巨大,关上门隔一个屋子都能听到。轴承都是加了油还是一样。经过排查,最终发现是中间的塑料块裂了。这个塑料块的非常重要,应该是和XY的垂直度有很大的关系。换了以后基本上就恢复了。

第一层不粘连

第一层不粘连的问题,其实很头痛。和以下因素有关:

  • 喷头和第一层的高度
    一般保持到一张纸的厚度即可。
  • 第一层的挤出量。
    一般选择200%的挤出量会好一些
  • 温度
    一般第一层温度保持在230度比较好
  • 材料
    材料的影响包括材料的好坏和颜色。有些材料表面粗糙,挤出后会不粘连,然后卷到喷头上,越卷越多,造成打印失败。解决方法包括打印一个raft,减小速度
Share

20天3D打印总结

Screen Shot 2015-04-22 at 12.24.17 PM

mbot cube 3D打印机拿到手也有20多天了,有空就玩玩,还是做了一些好玩实用的东西出来,总结一些经验来分享。总体来讲3D打印技术还不是太难掌握,对于打印素材来源及模型选择有一些讲究,要特别注意一些模型打印起来非常困难,甚至无法打印。

模型来源

我自己的3D模型主要来源于thingiverse网站,丰富的模型分类及社区的力量提供了非常多的资源。很可惜的是中国访问奇慢,主要原因是网站使用了亚马逊S3和cloudflare云,这两个基本被中国屏蔽,要不就是慢的死人。所以一个给力的代理是唯一的解决方案,否则你会失去很多的乐趣。代理可以参考我之前的shadowsocks在digitalocean上用的例子。

国内有一个叫“天工社”的论坛,上面有很多的模型可供选择,我看大部分还是来自于thingiverse网站的,有些人靠这些来赚积分。

在thingiverse网站上,我做自己做了一些东西,请直接打开网站看

一些成功的例子

失败的例子

模型的选择

尽量不选择太复杂太精细的模型,有些细小的部件,打印机会吐出来一点材料,根本无法顺利的打印出来。有些结构一次性打印的话需要很多的支撑材料,这些支撑会产生很大的麻烦,去除材料的时候会显得很郁闷。当然如果你的打印机是双头的,并且有水溶的材料,那就另当别论了。

所以比较好的模型都是一些稍微简单,甚至是组装的模型。组装的模型比较好打印每个部件,但是有些接插件会遇到无法插入的问题。内孔一般会缩小,外孔一般会变大,这和孔的大小有关。一般得后处理一下。由于我的材料一直是PLA的,所以试过用钻枪扩孔,但是效果不好,钻头会卡在洞里面。另外要注意有些模型如果提供了细杆之内的,强度一般都不会够,对于PLA很容易就折断了。

完全插不进去的外壳,其中一个装齿轮的细杆已经折断

打印模型的时候的方向也比较重要,要看你的模型在什么方向上需要什么的精度。Z方向的精度似乎比较差,XY的还比较靠谱。对于一些比较尖的部件,如果到最后只有这个尖的东东,则打印头会持续的在附近一栋,造成温度很高,下层的尖会软化,导致整个模型报废。所以可以在旁边比较远的地方放一个无关紧要的物件,这样打印头会移动开,等再回来的时候就已经冷却了。

翘边问题

刚拿到打印的时候,基本上都会翘边,还是PLA材料啊。后来打电话给售后问有没有比较好的办法,他们推荐用3M胶带。但是3M胶带实在是太难贴了,而且贴完了打印后会影响底层的平整度。如果贴的位置不是很恰当,还是会造成一些翘边,甚至中间凹陷的情况。

3M胶没有hold住,很难知道哪些地方需要贴
3M胶,造成底部凹凸不平

后来买了蓝色的3M美纹纸胶带,完美解决问题。非常好贴,而且效果很好。
美纹胶,完美解决
儿子很喜欢

打印软件

ReplicateG

这个开源软件很古老了,已经停止更新。试过一两个模型速度都非常的慢,而且界面不好用。还是最好别用这个了。

MPrint

MBot3D自己出的软件,易用性还算过得去,生成速度也挺快的,能够预览生成的路径,看到打印时间和材料克数。win平台和mac都有。作为初学及简单的配置还是很方便的。

不方便的地方在于没有像Slic3r或者Cura提供的打印一个底层边界的功能(不是底垫哈),这样刚开始打印的时候打印后没有材料挤出,要等上几秒钟才连续出料,造成一部分底层打印失败。办法是自己做个物体放在旁边,或者打印底垫。
Screen Shot 2015 04 22 At 12.24.17 PM

Slic3r和Cura

开源利器,两个软件不相上下,我还是比较喜欢Cura,界面比较好用一些。

刚开始用的时候,需要设置好边界,mbot cube我最大设置为200左右,太大的话会造成XY移动到最外面撞到。打印机是没有限位开关的,所以会导致电机堵转或者跳齿,很伤机械。还有一个Machine Settings选项:Machine Center 0,0,如果没有设置,则会按照左上角为0,0,会撞车。

0,0
具体设置可以参考:https://github.com/derekhe-3dprinting/print-settings

材料

当时买机器的时候给了一卷透明的PLA,但似乎材料有些问题,打印效果不好,比较粗糙。后来买了个橘红色的PLA,就好了。

PLA还是比较脆的,有一些玻璃的质感。橘红色的打印出来还是比较好看,但是透明的就完全瞎火。
比较漂亮
修锁扣,强度还是不错
透明的很难看

上色

最安全的方式上色还是用丙烯材料好了,需要涂得比较厚一些后期才不会开裂和掉色。可以借助吹风机速干。
涂的太薄,干了就掉

吐槽打印机

这个打印机价格还是不便宜,要是双头的价格都5200多了。打印的噪音还是比较大,关了门还能听得到明显的噪音。可能是出厂的时候质量有一些问题,Y轴似乎是直线轴承出了问题,方向移动的时候嘎嘎嘎的响。联系的厂商给免费维修,只不过要寄回去比较麻烦。

为了减少噪音,是否需要在外面加一层盖子,这个我还在考虑之中,看轴承修好了以后会不会好一些。

对比Flashforge的creator pro,这个机子的底板能够能够取下板子比较好,毕竟在机器里面拆模型不是非常的方便,贴胶也不好贴。

 

本文转自:http://www.april1985.com/2015/03/25/2015-03-25-3d-printing/

Share