《阿里巴巴Java开发规约》插件p3c使用说明

##

img

官方发布说明

经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!

插件全球首发仪式,大牛云集

img

阿里巴巴大牛天团倾力助阵:毕玄、玄难、索尼、叶渡,淘宝代码第一人多隆、代码规约作者孤尽携手规约项目组成员,以及业界规约生态代表等重磅大咖联合发布阿里巴巴代码规约插件!

img

平日低调的大神们,为了这次盛会都来了~

该插件由阿里巴巴P3C项目组研发。P3C是世界知名的反潜机,专门对付水下潜水艇,寓意是扫描出所有潜在的代码隐患。这个项目组是阿里巴巴开发爱好者自发组织形成的虚拟项目组,把《阿里巴巴Java开发规约》强制条目转化成自动化插件,并实现部分的自动编程。该插件在扫描代码后,将不符合规约的代码按Blocker/Critical/Major三个等级显示在下方,甚至在IDEA上,还基于Inspection机制提供了实时检测功能,编写代码的同时也能快速发现问题所在。对于历史代码,部分规则实现了批量一键修复的功能,如此爽心悦目的功能是不是很值得拥有?提升代码质量,提高团队研发效能,插件将会一路同行

插件下载地址

https://github.com/alibaba/p3c

或者在Github直接搜索p3c



《阿里巴巴Java开发手册(终极版)》4-1安全规约(新增)

  1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。
    说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信
    内容、修改他人的订单。

  2. 【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。
    说明:查看个人手机号码会显示成:158**9119,隐藏中间 4 位,防止隐私泄露。

  3. 【强制】用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,
    禁止字符串拼接 SQL 访问数据库。

  4. 【强制】用户请求传入的任何参数必须做有效性验证。
    说明:忽略参数校验可能导致:
     page size 过大导致内存溢出
     恶意 order by 导致数据库慢查询
     任意重定向
     SQL 注入
     反序列化注入
     正则输入源串拒绝服务 ReDoS
    说明:Java 代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题,
    但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。



《阿里巴巴Java开发手册(终极版)》3-1单元测试(新增)

单元测试

  1. 【强制】好的单元测试必须遵守 AIR 原则。
    说明:单元测试在线上运行时,感觉像空气 (AIR) 一样并不存在,但在测试质量的保障上,
    却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。
     A: Automatic (自动化)
     I: Independent (独立性)
     R: Repeatable (可重复)

  2. 【强制】单元测试应该是全自动执行的,并且非交互式的。测试框架通常是定期执行的,执行
    过程必须完全自动化才有意义。输出结果需要人工检查的测试不是一个好的单元测试。单元测
    试中不准使用 System.out 来进行人肉验证,必须使用 assert 来验证。

  3. 【强制】保持单元测试的独立性。为了保证单元测试稳定可靠且便于维护,单元测试用例之间
    决不能互相调用,也不能依赖执行的先后次序。
    反例: method2 需要依赖 method1 的执行,将执行结果做为 method2 的输入。

  4. 【强制】单元测试是可以重复执行的,不能受到外界环境的影响。
    说明:单元测试通常会被放到持续集成中,每次有代码 check in 时单元测试都会被执行。如
    果单测对外部环境(网络、服务、中间件等)有依赖,容易导致持续集成机制的不可用。
    正例:为了不受外界环境影响,要求设计代码时就把 SUT 的依赖改成注入,在测试时用 spring
    这样的 DI 框架注入一个本地(内存)实现或者 Mock 实现。



Android-Studio-之依赖方式详解(Compile, Provided...)

序言

我们在项目开发中,不可避免的需要使用到第三方的一些库,或者自己定义的一些lib,所以我们就需要在 build.gradle 文件添加对这些lib的依赖,代码如下:

1
2
3
4
5
6
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:support-v4:25.3.0'
...
provided files('jar/framework.jar')
}

可以看到上面使用到了两种依赖的方式:compile provided ,那么还有没有其它依赖方式?都有哪些?

dependencies

下面我们一起看看Studio给我们提供了那些依赖方式:

studio_dependencies

其实 Studio 已经提供了6种依赖方式:CompileProvidedAPKTest compileDebug compileRelease compile这里的名字和 dependencies 里面使用的命名是不用的 ,你可以添加几个试试看。那么问题来了,它们有什么不同?继续往下看



Android Studio 发布 library 到 jcenter 和 maven central

序言

在我们日常的开发中,会遇到各种各样的需求和技术解决方案。所以产生了各位大神提供的各种功能的开源库,并且通过:compile ‘xxxxxxxx’ 就可以使用了,非常方便。可以你有没有想过自己写一个开源库?又或者你已经贡献了很多好的代码,不知道怎么共享,怎么通过 compile 的方式给别人使用?你要知道,装B也是需要技术的。

jcenter & maven central

引用

如果你留心的话,应该了解到我们使用了两种标准的 libraries 仓库,分别是 jcentermaven central

  • jcenter

    jcenter 是一个托管在 bintray.com 的资源库,你可以在 这里 找到需要的资源为了能在项目中使用 jcenter,我们需要在 project 的 build.gradle 文件中添加对资源库的引用:

    1
    2
    3
    4
    5
    allprojects {
    repositories {
    jcenter()
    }
    }

  • maven central

    Maven Central 是一个托管在 sonatype.org 的资源库,你可以在 这里 找到需要的资源如果在项目中使用 Maven Central,我们需要在 project 的 build.gradle 文件中定义自己的资源库:

    1
    2
    3
    4
    5
    allprojects {
    repositories {
    mavenCentral()
    }
    }

请注意,虽然 jcenter 和 Maven Central 都是标准Android library 资源仓库,但他们的托管地址完全不同,它们的内容是由不同提供者提供的,而且之间并没有任何关联。所以也就可能,在 jcenter 中能够找到的 library ,在 Maven Central 中并不能找到,反之亦然。



本站访问量   |   您是第 位.