| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 【阿里巴巴Java编程规范学习 四】Java质量安全规约 -> 正文阅读 |
|
[开发测试]【阿里巴巴Java编程规范学习 四】Java质量安全规约 |
Java质量安全规约来源于规范里的单元测试和安全规约两部分,这两部分一直没有得到应有的重视,尤其感觉单元测试越来越被忽视(因为直接通过Web请求测试貌似更加方便),但为了让代码健壮性更强,还是需要有的,安全规约更不必说,在数据安全被特别重视的时代,这部分尤为重要。红色加粗字体为自己可能会犯的错误以及不规范的地方,蓝色结论部分为几条规则的归纳或一条规则的阐述。 单元测试单元测试还可以阅读我之前写过的一篇单元测试最佳实践:【C#编程最佳实践 一】单元测试实践。 1 【强制】好的单元测试必须遵守 AIR 原则。
2 【强制】单元测试应该是全自动执行的,并且非交互式的。测试用例通常是被定期执行的,执行过程必须完全自动化才有意义。输出结果需要人工检查的测试不是一个好的单元测试。单元测试中不准使用 System.out 来进行人肉验证,必须使用 assert 来验证。自动化 3【强制】保持单元测试的独立性。为了保证单元测试稳定可靠且便于维护,单元测试用例之间决不能互相调用,也不能依赖执行的先后次序。独立性
4【强制】单元测试是可以重复执行的,不能受到外界环境的影响。可重复
5 【强制】对于单元测试,要保证测试粒度足够小,有助于精确定位问题。单测粒度至多是类级别,一般是方法级别。
6 【强制】核心业务、核心应用、核心模块的增量代码确保单元测试通过。
7【强制】单元测试代码必须写在如下工程目录:
8 【推荐】单元测试的基本目标:语句覆盖率达到 70%;核心模块的语句覆盖率和分支覆盖率都要达到 100%
9 【推荐】编写单元测试代码遵守 BCDE 原则,以保证被测试模块的交付质量。
10【推荐】对于数据库相关的查询,更新,删除等操作,不能假设数据库里的数据是存在的,或者直接操作数据库把数据插入进去,请使用程序插入或者导入数据的方式来准备数据。个人容易出现不规范行为
11【推荐】和数据库相关的单元测试,可以设定自动回滚机制,不给数据库造成脏数据。或者对单元测试产生的数据有明确的前后缀标识。个人容易出现不规范行为
12【推荐】对于不可测的代码在适当的时机做必要的重构,使代码变得可测,避免为了达到测试要求而书写不规范测试代码。 13【推荐】在设计评审阶段,开发人员需要和测试人员一起确定单元测试范围,单元测试最好覆盖所有测试用例(UC)。 14【推荐】单元测试作为一种质量保障手段,在项目提测前完成单元测试,不建议项目发布后补充单元测试用例。个人容易出现不规范行为 15【参考】为了更方便地进行单元测试,业务代码应避免以下情况:
说明:多层条件语句建议使用卫语句、策略模式、状态模式等方式重构。 16.【参考】不要对单元测试存在如下误解:
安全规约1【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。个人容易出现不规范行为
2【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。个人容易出现不规范行为
3【强制】用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,禁止字符串拼接 SQL 访问数据库。
4 【强制】用户请求传入的任何参数必须做有效性验证。说明:忽略参数校验可能导致:
Java 代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题,但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。 5【强制】禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。 6【强制】表单、AJAX 提交必须执行 CSRF 安全验证。
7 【强制】URL 外部重定向传入的目标地址必须执行白名单过滤 8【强制】在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放的机制,如数量限制、疲劳度控制、验证码校验,避免被滥刷而导致资损。
9 【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过滤等风控策略 总结一下单元测试很重要,经历过的不同的公司,不同的人都在强调这一点,说明很多人在这上边吃过亏。但是其实写好单元测试很难,很难保证:自动化、独立和可重复?保证了有难度,保证不了又不如不写。单测又不和业务主逻辑挂钩,如果发挥不了作用大多数人其实是不太愿意写的,因为实现AIR很难,实现的又不是很好,发挥不了大作用所以就觉得写了没意义,纯是形式。事实上单测很重要,要想容易写,就得有辅助方法,例如明确单测的边界,不要跨类,粒度要细,通过Mock去模拟难以实现的依赖等,让单测容易写,容易实现AIR,那么程序员有了正反馈,就会愿意写单测发挥其应有的价值,应该是这么个循环。再说到安全:权限是重中之重啊,是系统的大门;SQL注入是一个大隐患需要注意;用户数据敏感需要保护;怎么说呢,当一个功能上线时,不管要的多急吧,这些基础设施都应该打好了,否则无论是补bug还是修数据都应该是很痛苦的一件事,把这些排期排进去! |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 4:40:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |