5. 阿里巴巴程序员开发手册黄山版( 四 )


编写单元测试代码遵守 BCDE 原则,以保证被测试模块的交付质量 。
B:,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等 。
C:,正确的输入,并得到预期的结果 。
D:,与设计文档相结合,来编写单元测试 。
E:Error,强制错误信息输入(如:非法数据、异常流程、业务允许外等),并得到预期的结果 。
用户输入的 SQL 参数严格使用参数绑定或者字段值限定,防止 SQL 注入,禁止字符串拼接 SQL 访问数据库 。隶属于用户个人的页面或者功能必须进行权限控制校验 。用户敏感数据禁止直接展示,必须对展示数据进行脱敏 。用户请求传入的任何参数必须做有效性验证 。禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据 。对于文件上传功能,需要对于文件大小、类型进行严格检查和控制 。
表达是与否概念的字段,必须使用的方式命名,数据类型是(1 表示是,0 表示否) 。表名、字段名必须使用小写字母或数字,禁止出现数字开头禁止两个下划线中间只出现数字 。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑 。表名不使用复数名词 。禁用保留字,如 desc、range、match、 等 。
主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名 。小数类型为 ,禁止使用 float 和。如果存储的字符串长度几乎相等,使用 char 定长字符串类型 。是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引率 。
表必备三字段:id,,。id 必为主键,类型为、单表时自增、步长为 1 。,的类型均为 类型,前者现在时表示主动式创建,后者过去分词表示被动式更新 。表的命名最好是遵循“业务名称_表的作用” 。库名与应用名称尽量一致 。如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释 。字段允许适当冗余,以提高查询性能,但必须考虑数据一致 。单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表 。合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度 。
业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引 。超过三个表禁止 join 。需要 join 的字段,数据类型保持绝对一致;多表关联查询时,保证被关联的字段需要有索引 。在字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度 。页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决 。
创建索引时避免有如下极端误解:
1)索引宁滥勿缺 。认为一个查询就需要建一个索引 。
2)吝啬索引的创建 。认为索引会消耗空间、严重拖慢记录的更新以及行的新增速度 。
3)抵制唯一索引 。认为唯一索引一律需要在应用层通过“先查后插”方式解决 。
不要使用 count(列名) 或 count(常量) 来替代 count(),count() 是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关 。count( col) 计算该列除 NULL 之外的不重复行数,注意 count( col1 , col2) 如果其中一列全为 NULL,那么即使另一列有不同的值,也返回为 0
当某一列的值全是 NULL 时,count(col) 的返回结果为 0;但 sum(col) 的返回结果为 NULL,因此使用 sum() 时需注意 NPE 问题 。
使用 () 来判断是否为 NULL 值,NULL 与任何值的直接比较都为 NULL 。
1) 的返回结果是 NULL,而不是 false 。