前言

​在经过几个月开发测试后,项目进行进行发布会前夕,暴露出了种种bug,一下打击我到怀疑人生,遂萌生了记下这些bug的想法,思考产生问题的深层原因 引以为戒 前事之事,后事之师。

先上结论:

  1. 控制器之间跳转的耦合性一定要降低,尽量不要控制器之间传递model, 把跳转新控制器携带的参数压缩到最少,这样有利于后期其他地方跳转(推送,业务逻辑跳转)的逻辑统一性
  2. 代码一定写的精简 不要复杂不知所云的神奇代码,搞清楚每行代码的作用和必要性.良好的代码可读性会非常高,
  3. 代码逻辑一定要想全面,想清楚可能出现的各种情况,不要想一句写一句.要有整体大局观. 可以画一个思维导图.
  4. 测试一定要覆盖全面,不能觉得大部分机型 系统通过就万事大吉了.测试要有针对性 全面性,将一些特殊环境状况 屏幕尺寸 系统版本考虑进去.
  5. 选用第三方SDK的时候一定要考虑清楚,不要把所有的项目难点 复杂点都交给第三方.一些小众的第三方可能也会存在各种bug,包括系统更新后没有适配, 各种情况下的崩溃,这时候你想维护项目就没地方哭去了.第三方SDK 选用的太多也会增大包的体积。

问题分析

  • bug -播放器在iOS10下自动播放 进入下一个页面后播放未停止 ※ ※ ※ ※

      背景: 播放器是使用的第三方类,未适配 iOS 10 在联系到原作者后,建议我改用其他框架,但是项目上线在即,便在使用的 VC 通过临时变量修复了自动播放的 bug ,但是却忽略了项目在资源详情也使用了该播放器,测试的时候资源详情一直放的图片,未能及时发现,发布会前夕构建各种资源数据的时候便暴露了出来。

    分析: 第三方播放器参差不齐,无论是项目选择还是自己测试,考虑都不太成熟,而自己重写播放器又费时费力,而对自己写的播放器也同时毫无自信, 在明知选型的播放器没有适配 iOS 10 的情况下,仍然使用。

    解决方案: 资源加入临时变量解决当前问题,同时加紧新播放器的选项与考察,或者自己着手写一个播放器。

    教训:第三方框架的选择非常重要。自己考虑程度欠缺

  • bug 资讯标题与转发标签重叠 ※ ※ ※ ※

    背景: 资讯详情使用的是原生标题加 web 内容再加原生标签 评论分享的实现,原生标题的高度是由标题内容计算的来的,在计算高度的时候忽略了 lable 的左右屏幕间隔,造成了计算的高度在临界换行两个字内的时候存在误差,少了一行的高度,造成原生标题与 web 的重叠。

    `分析:` 资讯详情的设计本身就不太合理,完全可以采用 `web` 内容加原生评论的方式实现,但是缺少 `h5` 人员,只能采用这种设计,但是最深层的原因还是自己的问题,没有考虑到间隔的概念,从来也没有意识到这种问题的存在,经验欠缺。 同时暴露出开发测试时的不严谨,态度不端正,总是觉得这篇文章在我这台手机上测试没问题,便觉得所有文章在所有设备,所有系统版本 所有网络状况下都是没问题的.。最后,自己开发时在思路在不太清晰便下手开发。
    

教训: 思虑不太周全,而测试观念又过于薄弱。

  • 数据显示在某些情况下有重复条目 ※ ※ ※

    背景: app 本地缓存是通过一个封装的 AFN 类来实现的,每次请求的返回的数据都会通过 url 拼接所有参数再加账号为主键插入到本地 SQLite ,请求的时候都会先从本地数据取,返回的数据再更新到数据库,但是也存在数据更新不及时的问题 。

    分析: 在列表数据请求时 网络请求页码的保存和判断一开始是欠缺的,造成了部分数据请求的重复请求显示, 再后来加上页码判断之后 测试不再出现,而在发布会前夕却又有反映重复问题。 原因尚不清楚,但是跟缓存有关。

    解决方案:

    1. 不再做本地缓存数据,本地缓存本身是自己添加的 安卓端尚未实现 产品同样也未提出需求。 可行
    2. 找到重复原因 解决 用户体验较好 遇到问题就退缩也不是好的风格,但是可以考虑重换缓存解决方案

总结: 第三方框架的选择一定要慎重,考虑到各种情况,版本适配 测试测试阶段暴露的 bug 。

  • 页面布局问题 bug 比如自适应高度 样式重叠显示问题
  • 集成微信支付之后,资讯分享不再增加积分。

    背景: 第三方 app 唤起自己的 app 都是走的同一个回调 openUrl等同一个回调,之前为了让代码更简洁明了 appDelegate 中所有的注册初始化都写到了它的分类之中,并且友盟分享的回调也放在了分类之中,当集成微信支付的时候,在 appdelegate 中又重写了 openURL 的方法,由于分类和自身的方法重复只会前向引用并不会报错,所以在支付集成成功之后并没有意识到之前分享出问题了。用到分类的时候要谨慎,思考清楚。

    解决方案:所有回调都只在 appDelegate 中实现,并且对分享和支付的回调做判断处理。

  • 资讯列表的展示问题。 在 5s 8.4 系统上会显示不全 滚动两次后正常 初步在 model 赋完值之后使用 layoutsubViews 解决 布局为什么会出错 ??? 写出来的布局不规范 ? 对自适应行高还是不太熟悉。

    情景: 列表请求,在开始请求的时候 显示 HUD 请求返回关闭 HUD, 但是忽略了当是最后一页的时候直接 return 没有关闭 HUD,造成滑到最后一页的时候HUD 隐藏不掉.当数据特别大是很多页数据,不容易测试到。 测试也没有测到极端临界条件
    解决方案:在判断完页码之后再显示HUD 或者判断完Return之前隐藏掉HUD

待总结问题:

  • 推送点击跳转 弹窗的消失问题
  • pickView 选择显示与实际的选择保存不符
  • imageView 图片下载失败后,不再进行第二次下载