华为云用户手册

  • GAUSS-04391 -- GAUSS-04400 GAUSS-04391: "Failed to initialize NativeTargetAsmPrinter for LLVM." SQLSTATE: XX000 错误原因:启动数据库时初始化LLVM本地对象ASM打印器失败。 解决办法:重新启动数据库。 GAUSS-04392: "Failed to initialize NativeTargetAsmParser for LLVM." SQLSTATE: XX000 错误原因:启动数据库时初始化LLVM本地对象ASM解析器失败。 解决办法:重新启动数据库。 GAUSS-04393: "Invalid type %d" SQLSTATE: XX000 错误原因:无效的数据类型。 解决办法:使用set enable_codegen = off关闭LLVM优化。 GAUSS-04400: "Include identical distribution column '%s'" SQLSTATE: 42P16 错误原因:建表时指定了两个相同的分布列。 解决办法:修改建表语句。 父主题: GAUSS-04301 -- GAUSS-04400
  • GAUSS-01281 -- GAUSS-01290 GAUSS-01281: "access method '%s' does not support unique indexes" SQLSTATE: 0A000 错误原因:该索引方式不支持唯一索引。 解决办法:请勿使用报错提示的索引类建立唯一索引。 GAUSS-01282: "access method '%s' does not support multicolumn indexes" SQLSTATE: 0A000 错误原因:该索引方式不支持组合索引。 解决办法:请勿使用报错提示的索引类建立唯一索引。 GAUSS-01283: "access method '%s' does not support exclusion constraints" SQLSTATE: 0A000 错误原因:该索引方式不支持排他约束。 解决办法:请勿使用报错提示的索引类附加排他约束。 GAUSS-01284: "PrimaryKey/UniqueIndex of distribute table must contain hash distribution column" SQLSTATE: 0A000 错误原因: GaussDB (DWS)主键约束通过unique btree索引实现。主键约束没有包含分布列时,无法成功创建索引。 解决办法:请检查主键约束中是否包含分布列。 GAUSS-01285: "unknown constraint type" SQLSTATE: XX000 错误原因:创建索引时定义的约束类型错误。 解决办法:创建索引的约束类型关键字只能为PRIMARY KEY、UNIQUE、EXCLUDE,请使用有效的约束关键字重新创建索引。 GAUSS-01286: "fail to get index info when create index partition" SQLSTATE: 42P17 错误原因:创建分区索引时,获取索引信息失败。 解决办法:请重新创建分区索引,如仍然提示失败,请联系技术支持工程师提供技术支持。 GAUSS-01287: "index partition with name '%s' already exists" SQLSTATE: 42704 错误原因:分区索引名已存在。 解决办法:修改分区索引名请勿重复。 GAUSS-01289: "collation '%s' does not exist" SQLSTATE: 42P17 错误原因:索引的排序模式不存在。 解决办法:检查索引的排序模式是否正确。 示例: 1 2 3 4 5 6 7 8 9 10 11 postgres=# create table t7(c1 int,c2 text) postgres-# partition by range (c2)( postgres(# partition p0 values less than ('a'), postgres(# partition p1 values less than ('b'), postgres(# partition p2 values less than (maxvalue)); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE postgres=# create unique index t7_idx on t7 (c2 COLLATE "xxxx") local( postgres(# partition p0,partition p1,partition p2); ERROR: collation "xxxx" does not exist GAUSS-01290: "cannot use subquery in index predicate" SQLSTATE: 0A000 错误原因:表达式索引中不能使用子查询。 解决办法:请勿在表达式索引中使用子查询。 父主题: GAUSS-01201 -- GAUSS-01300
  • GAUSS-02261 -- GAUSS-02270 GAUSS-02261: "Fail to generate stream element due to out of memory" SQLSTATE: 53200 错误原因:无法创建分布式内部对象。 解决办法:内存不够用,检查内存使用情况,清理缓存。 GAUSS-02262: "Distribute query fail due to duplicate plan id" SQLSTATE: XX000 错误原因:产生了重复的plan node id。 解决办法:可重启数据库解决。 GAUSS-02263: "Distribute query initializing network connection timeout. un-connected nodes: %s" SQLSTATE: XX000 错误原因:连接超时。 解决办法:请检查网络情况。; GAUSS-02264: "unrecognized result from subplan" SQLSTATE: XX004 错误原因:系统内部错误,下层算子返回的结果不是bitmap。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-02265: "BitmapOr doesn't support zero inputs" SQLSTATE: XX000 错误原因:系统内部错误,BitmapOr算子的输入为空。 解决办法:请联系技术支持工程师提供技术支持。 GAUSS-02266: "could not identify CTID variable" SQLSTATE: 42809 错误原因: 获取到的变量不是ctid变量。 解决办法:查看执行计划,检查表达式返回的类型是否是ctid类型,若否,请联系技术支持工程师提供技术支持。 GAUSS-02267: "could not identify CTID expression" SQLSTATE: 22000 错误原因:获取到的表达式不是ctid相关的表达式。 解决办法:查看执行计划,检查表达式返回的类型是否是ctid类型,若否,请联系技术支持工程师提供技术支持。 GAUSS-02268: "invalid operation on partition, allowed are UPDATE/DELETE/SELECT" SQLSTATE: XX000 错误原因:对分区表的扫描操作,暂时只支持删查改。 解决办法:请检查当前针对分区表的操作是否正确。 GAUSS-02269: "cannot initialize bitmap index scans using unusable index '%s'" SQLSTATE: XX000 错误原因:索引不可用导致初始化bitmap index scan失败。 解决办法:检查系统表查看索引是否可用。 GAUSS-02270: "cannot initialize bitmap index scans using unusable local index '%s'" SQLSTATE: XX000 错误原因:索引不可用导致初始化bitmap index scan失败。 解决办法:检查系统表查看索引是否可用。 父主题: GAUSS-02201 -- GAUSS-02300
  • GAUSS-01051 -- GAUSS-01060 GAUSS-01051: "failed to change schema dependency for type %s" SQLSTATE: XX000 错误原因:更改类型的模式依赖未成功。 解决办法:系统表异常,请联系技术支持工程师提供技术支持。 GAUSS-01052: "channel name cannot be empty" SQLSTATE: 22023 错误原因:管道名为空。 解决办法:检查sql语句,给定管道名。 GAUSS-01053: "channel name too long" SQLSTATE: 22023 错误原因:管道名超出长度限制。 解决办法:检查sql语句,确保管道名长度符合要求。 GAUSS-01054: "payload string too long" SQLSTATE: 22023 错误原因:payload字符串超出长度限制。 解决办法:检查sql语句,确保payload字符串长度符合要求。 GAUSS-01055: "cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY" SQLSTATE: 0A000 错误原因:不允许Prepare一个执行过LISTEN,UNLISTEN或NOTIFY操作的事务。 解决办法:检查sql语句,确保要prepare的事务没有执行过LISTEN,UNLISTEN或NOTIFY操作。 GAUSS-01056: "too many notifications in the NOTIFY queue" SQLSTATE: 54000 错误原因:通知队列里的通知太多。 解决办法:重试失败的语句。 GAUSS-01057: "unexpected rewrite result for CREATE TABLE AS SELECT" SQLSTATE: XX000 错误原因:CREATE TABLE AS SELECT重写结果错误。 解决办法:重写结果应该只有一个语句,请尝试简化CREATE TABLE AS后的SELECT语句。 GAUSS-01058: "no collation was derived for column '%s' with collatable type %s" SQLSTATE: 42P22 错误原因:属性列支持attcollation但是对应的attcollation无效,导致无法正常创建heap表格。 解决办法:检查创建表格时属性列关于collation定义的有效性。 示例: 1 2 3 postgres=# create table t5 as select a from t1 union all select a from t2; ERROR: no collation was derived for column "a" with collatable type text HINT: Use the COLLATE clause to set the collation explicitly. GAUSS-01059: "CREATE TABLE AS specifies too many column names" SQLSTATE: 42601 错误原因:CREATE TABLE AS指定的列太多。 解决办法:检查sql语句,确保指定的列数相匹配。 GAUSS-01060: "option '%s' not found" SQLSTATE: 42704 错误原因:选项未找到。 解决办法:检查sql语句,确保指定了相应选项。 父主题: GAUSS-01001 -- GAUSS-01100
  • GS_213200015 错误码: materialized view contains foreign table %s is suggested to set ENABLE QUERY REWRITE when enable_foreign_table_query_rewrite = true. 解决方案:可使用ALTER MATERIALIZED VIEW启用查询重写:ALTER MATERIALIZED VIEW matview_name ENABLE QUERY REWRITE.。 level: NOTICE
  • 错误码命名规范 错误码序号遵循语义:GS_[3位业务编号][2位错误类型编号][4位自增编号]。 例如:GS_201110003:表示SQL模块(2)的行列存类型(0)参数类错误(11),而子错误0003号代表了同类型错误码中的第三个错误码(如参数OID格式不正确)。 当前使用的业务、错误类型详见表1。 表1 错误码含义 组别 模块类型 子模块类型 错误码前三位序号 SQL 行列存 行存 101 列存 102 HStore 103 GIN索引 104 Btree索引 105 行存vacuum 106 列存vacuum 107 时序 108 SP-GiST索引 109 Hash索引 110 事务 锁 111 GTM 112 xlog 113 快照 114 barrier 115 pool 116 checkpoint 117 residualfiles 118 HA 数据页复制 121 日志复制 122 build 123 主备倒换 124 复制槽(slot) 125 日志流控制 126 catchup 127 同步提交 128 SQL on Anywhere SQL on parquet 131 SQL on orc 132 SQL on Hudi 133 SQL on carbondata 134 OBS/HDFS/ DLI 135 GDS/copy 公共机制(选项参数、任务分配、压缩) 141 导入 142 导出 143 互联互通 145 GDS上报 146 备份 逻辑备份 161 细粒度容灾 162 其他 CBM 151 逻辑复制 152 RPC消息输出 153 postmaster 154 IPC 155 commands 156 tablespace 157 集群 158 port目录下的公共机制 159 存储 解析器 词法分析 211 语法分析 212 DDL 213 DML 214 表达式 215 元数据 216 优化器 查询重写 221 路径生成 222 计划生成 223 计划缓存 224 Analyze 225 utile接口 226 执行器 行执行引擎 231 向量化执行引擎 232 执行诊断信息 233 LLVM 234 分布式执行框架 235 RemoteQuery 236 Explain 237 安全 认证 241 授权 242 加密 243 审计 244 脱敏 245 通信 libpq 251 pooler 252 libcomm 253 stream线程池 254 通信通用接口 255 WLM 负载管理 261 内存管控 262 CPU管控 263 空间管控 264 网络管控 265 异常规则 266 资源监控 267 逻辑集群 逻辑集群 271 重分布 重分布 281 其他 ODBC 201 Tsearch 202 协同分析 203 CN Retry 204 加速集群 205 高级包 206 JSON 207 format、java - UDF 208 功能特性 209 CBB CBB 信号 301 句柄、文件IO 302 内存 303 线程 304 错误处理 305 定时器 306 IPC 307 GUC 308 SysCache 309 日志线程 310 容灾 容灾 - 501 表2 错误码的错误类型 错误码类型编号 错误类型描述 01 内存错误(内存不足、内存不可用、内存溢出等) 02 磁盘错误 03 网络错误(建联失败、拒绝访问等) 04 文件错误(文件未找到、文件大小错误、文件格式错误、读文件失败、写文件失败、文件损坏等) 05 连接错误(连接不存在、连接失败、连接不可用,所连接平台出错等) 06 协议错误 10 语法错误(不支持的语法、找不到的对象等) 11 参数异常(sql语句中参数异常,包含函数参数异常、表达式参数异常、建表语句参数异常,参数越界等等) 12 数据错误(数据未找到、非法数据(除零)等) 13 数据类型错误(类型不匹配、数据类型问题(越界等)) 14 操作错误(不支持的操作) 15 权限错误(非法用户、用户密码错误、未授权) 17 未定义对象错误 18 非法对象错误(database、schema、table、function等各种对象类型) 20 内部错误(异常场景,debug相关) 21 不支持的特性 22 加锁错误(锁超时、死锁、锁冲突相关) 24 SPI接口(SPI接口执行失败)
  • 新建分组 单击左侧导航“视频源分组”,进入视频源分组界面。 在该页面单击“新建分组”,填写相关参数,创建新的视频源分组,参数填写请参考表1。 表1 新增视频源分组参数说明 参数 参数说明 分组名称 输入视频源分组名称。 接入方式 选择云上或边缘。云上接入包含OBS、URL、云上VCN、云上RESTful和IVM,边缘接入包含CAMERA、边缘VCN和边缘RESTful。 视频源来源 根据接入方式提供对应类型的视频源列表,从提供视频源列表中可直接选择视频源名称,或输入视频源名称搜索后选择。 分组描述 填写分组描述,选填。
  • 查看分组详情 在“视频源分组”页面可查看所有分组的状态,视频源数量,任务数量等基本信息。 若需要查看指定分组详情,则可通过分组名称进行模糊查询,或者通过算法类型、状态进行精确的下拉筛选,也可选择按照视频源数量、任务数量、创建时间、更新时间进行升序或降序的排序。 单击分组名称,进入该分组详情页。分组详情页展示了分组的基本信息、视频源分组和批量配置作业信息,如图1所示。 图1 查看指定的视频源分组详情 分组的基本信息,包括分组名称、视频源数量、批量配置作业数、视频源状态等; 视频源分组展示了该分组下已配置的视频源列表。 在“视频源分组”界面,单击最右侧“操作”列的“移除组”,可以对组内的视频源进行调整,移除不再需要的视频源。移除的视频源将从组内删除,但视频源本身不会被删除。若该视频源分组已关联批量配置作业,则不允许移除视频源。 批量作业展示了该分组下已配置的批量作业。
  • 查看任务详情 在“任务列表”页面可以查看所有任务的状态、使用的视频源和算法服务、厂商和创建时间这些基本信息。若需要展示指定任务,可通过任务名称或视频源名称进行模糊查询,或者通过任务状态、算法服务进行精确的下拉筛选,最后按照创建时间进行升序或降序的排序。 单击任务名称,可以查看任务的详细信息,包括任务使用的算法配置模板和算法结果的输出配置等。 当任务状态处于运行中或运行成功时,表示任务运行状态正常。当创建的任务运行成功后,按照创建任务时选择的输出类型和路径查看任务结果。详见获取任务结果。 任务有19种运行状态,如表1所示。 表1 任务运行状态 状态类型 说明 运行成功 任务运行成功。 已停止 任务已暂停运行。 已删除 任务已经删除。 运行中 任务正常运行过程中。 调度中 任务正常调度过程中。 等待中 任务没有申请到资源,排队等待过程。 运行失败 任务运行失败。 创建失败 任务创建失败。 异常 任务出现异常。 删除中 任务正常删除过程中。 停止中 任务正在停止运行。 恢复中 任务正在恢复运行。 启动中 等待资源启动过程。 更新中 任务当前处于更新状态。 启动失败 任务启动失败。 冻结中 用户欠费时,会冻结正在运行的任务,任务处于冻结过程中。 已冻结 任务已经在边缘节点删除成功,在保留期内用户充值补交欠费后会重新启动。 创建中 任务正在创建中。 资源不足 当前任务状态下,资源不足。 父主题: 管理任务
  • 事件规则 事件规则,即展示事件的规则。 在事件中心页面,事件列表上方单击“事件规则”。 图1 事件列表 进入“事件规则”页面,可开启人工审核或事件重复聚合。 图2 事件规则 人工审核。如果开启,所有的事件都不会通过订阅的方式推送给用户,只有通过审核之后才会推送,如果关闭,则默认将所有的事件推送给用户。 事件重复聚合。开启事件重复聚合之后,需要设置事件聚合的时间(取值范围:1-1440)。即在这段时间产生的所有事件,都会聚合展示(将第一个事件作为主事件展示在事件列表里面,其余的事件作为从事件,展示在事件详情页),如果关闭此开关则将接下来所有的事件作为主事件展示在事件列表。 单击“确认”。 父主题: 事件中心
  • Step1 在边缘节点服务器上安装Docker 视频智能分析的算法作业是以容器应用的方式下发到边缘节点运行的,因此需要在边缘节点服务器上安装Docker并检查Docker状态。 根据边缘节点服务器的操作系统,安装对应版本的Docker。Docker版本建议使用19.03.11及以上。Docker安装完成后,可以执行“docker -v”命令检查Docker是否安装正常,如果过回显如下则说明安装正常。 # docker -v Docker version 19.03.11, build 48a66213fee Docker安装完成后,请将Docker进程配置为开机启动,避免系统重启后Docker进程未启动引起的系统异常。
  • 环境准备 在开始使用之前,需要先确保完成下列的环境准备工作。 注册华为账号 并开通华为云 准备边缘节点服务器 边缘节点服务器要求有一定的计算能力,推荐的服务器详细配置请参见服务器约束与推荐。此处以x86+GP Tnt004类型服务器,CentOS 7.x版的操作系统为例。 准备RTSP流地址 在使用视频智能分析服务前,需要先接入视频数据,才能用算法作业对接视频进行分析,获取结果。本文接入的视频数据以CAMERA为例,来自用户本地实时视频流。,提前准备好RTSP协议的URL地址,并确保正常可调用。 网络准备 使用边缘算法对网络的要求主要有以下方面: 边缘节点服务器与华为云网络连通 视频智能分析算法作业会从华为云下发到边缘节点运行,请确保边缘节点服务器与华为云之间网络连通并稳定。 边缘节点服务器与用户自定义的流媒体服务器网络连通 为确保分析作业能够稳定获取视频流,需要保证边缘节点服务器与用户自定义的流媒体服务器之间的网络连通,并且确保网络稳定及带宽足够。 目前1路视频流的码流大约4Mbps,则10路视频流实时分析,需要保证40Mbps的网络带宽。无法保证带宽,会出现丢包,视频花屏的现象,影响服务分析的结果。 边缘节点服务器与Webhook服务器网络连通 输出结果传到Webhook服务器时,请确保边缘节点服务器与Webhook所在服务器之间网络连通并稳定。 父主题: 使用边缘入侵检测算法
  • 使用流程 表1 边缘算法使用流程 流程 说明 详细指导 环境准备 在使用视频智能分析服务前,需要注册华为账号并开通华为云,准备边缘节点服务器、准备RTSP流地址、准备网络等。 环境准备 注册边缘节点并纳管 视频智能分析服务的作业会通过智能边缘平台IEF下发到边缘节点服务器中运行。所以需要将边缘节点服务器注册并纳管到IEF。 注册边缘节点并纳管 注册终端设备 视频智能分析服务的视频源需要通过IEF将视频流接入进服务器,所以需要将终端设备注册到IEF。 在IEF上注册终端设备 运行Webhook Service 作业的输出类型设置为Webhook时,在创建作业前需确保Webhook Service已运行成功。 运行Webhook Service 创建边缘资源池 边缘资源池是一组处理服务作业的边缘节点。在创建服务作业前,要求先创建边缘资源池。 创建边缘资源池 购买算法包并部署到边缘池 边缘算法在使用前需进行部署,当算法的部署状态为“运行中”时,才能创建作业。 购买算法包并部署算法服务 新增视频源 创建需要进行处理分析的视频源。创建分析作业前,要先新增视频源。 新增视频源 创建分析作业 创建入侵检测算法作业,需要设置相应的算法参数、配置输入数据的来源和输出数据的类型。 创建分析作业 查看分析结果 作业运行成功后,可以在设置的输出路径中查看作业分析结果。 查看分析结果
  • 创建边缘资源池 登录视频智能分析服务,在运维中心页面左侧导航栏中选择“边缘资源池”。 在“边缘资源池”页面,单击“创建边缘资源池”,参考表1配置相关参数。 表1 创建边缘运行池参数说明 字段 是否必填 类型 示例 参数说明 资源池名称 是 String edge-pool-001 只能由英文字母(a~z)、数字(0~9)、中划线(-)组成,长度范围为[4,32]。 描述 否 String - 输入长度范围为0到255个字符。 边缘节点 是 string edge-node-001 通过下拉框进行选择,来源于IEF平台纳管的边缘节点。 配置完成后,单击“提交”。系统自动跳转至边缘资源池列表页面。可在“边缘资源池”页面查看创建的边缘资源池信息。
  • 使用流程 图1 云上算法使用流程 表1 云上算法使用流程 流程 说明 详细指导 购买算法 根据业务需求选择购买使用不同的算法包,算法包包含了若干算法,创建作业前,要先购买算法包。 购买算法包 接入IVM视频 表示直接从IVM拉取实时视频流推流地址获取视频数据。 接入IVM视频数据 开通DIS通道 云上入侵检测算法作业的输出类型设置为DIS时,在创建作业前需确保DIS通道已开通成功。 开通DIS通道 新增视频源 创建需要进行处理分析的视频源。创建作业前,要先创建视频源。 新增视频源 创建分析作业 创建入侵检测算法作业,需要设置相应的算法参数、配置输入数据的来源和输出数据的类型。 创建分析作业 查看分析结果 您可以根据设置的输出数据类型,采用对应的方式获取作业分析结果。 查看分析结果
  • 敏捷和DevOps 敏捷和DevOps转型始终是被业务目标和客户需求驱动的。市场竞争环境越来越激烈,新商业模式的创新和变现时间窗口越来越短,催生更多的企业采取精益创业的方式,捕捉市场需求后,尽量缩短TTM产品面世时间,快速推出MVP产品并快速响应客户需求迭代产品。 以华为为例,在2008年左右的时候,华为的项目还是采用传统的交付方式。例如,在年初开始一个项目,在项目立项之初就会把客户的需求全部收集好,包括一些用户的反馈,并把需求做了全年的排序。年中的时候发布产品给用户,两个月之后再出一个补丁,最终年底出一个正式的版本。当时版本交付的节奏还是比较慢的,但是对质量要求比较强。因为产品发布给客户以后,下一个补丁需要两个月,如果用户在这个期间发现产品问题,只能再等两个月,而在这期间如果用户不接受我们的产品,会导致项目前功尽弃,所以对产品的质量有严格的要求。 产品逐渐向敏捷方向发展,这时有一部分研发工具平台已经陆续转到上云,一些测试类的工具也需要转型。之前产品的交付是半年、两个月发一次,转型之后变成一个月,甚至两周发一次,但这时的转变并不彻底,与客户的交付过程仍然存在一些问题。后来越来越多的工具向平台化、服务化方向转型,这个时候一些商业模式发生了根本性的变化,也就是说当需求上云了以后,用户更加快速的介入进来。基于云平台,把一些功能快速的开发出来,然后频繁的和用户去商量,听取客户意见,牵引产品做快速迭代,这种交付方法使得交付周期变快了,之前是半年交付一次,现在是一周、两周,更有甚者,可能一两天就把功能发布出去了。从需求的角度来说发生了巨大变化,基本做到了小步快跑,快速试错。
  • 测试的焦点:业务价值的质量 测试首先是一个质量活动,做测试就是要保证质量;其次是一个工程性的活动,即在有限的时间、人力、资源投入内获得尽可能大的产出价值。质量有多个维度,需要有一个焦点:业务价值的质量,也就是产品“对客户呈现的价值”的质量。测试围绕业务价值去做,确定质量在功能、安全性、性能、易用性、兼容性等多个维度上的权重和优先级,而不是说一个测试上来之后,就把测试相关的关系点、关联点全部做测试。 来看几个例子:例如现在正在做一个线上支付的功能,对这个功能最关心的方面肯定是安全,所以相关的测试用例关键点就应该围绕安全大做文章,一定把安全保证好;再比如,现在要做一个线上商城,面向用户是老百姓,不仅要让年轻人会用,也要让老人都会用,那么就要关注易用性;除此之外,电商举办大规模抢购促销活动,那就还需要关注性能。因此,测试要求瞄准产品本身的业务价值,确定产品的目标,相应的制定质量关键点,制订相关的测试策略,然后实践落地。落地之后还要基于一些不良的效果不断的进行反馈、循环,校验整体的测试过程是否达到预期结果,这就是测试焦点。
  • 常规安全与弹性安全 在常规的设想中,通常是哪个地方不安全,就一定要把所有不安全的因素找出来、清除掉。这是常规的做法,但却偏向于理想,在实际工作中是不可能把整个系统中不安全的因子全部识别到的,这其中涉及能力、架构等各方面的原因。 因此,在此基础上演变出了弹性安全,即通过场景模拟的方式将不安全因素尽量展现出来,从而基于这种不安全场景,给出快速的修复方案弥补这个不安全因素,从用户角度来讲是感知不到的。从产品来讲,它的商业目的和质量目的都可以达到,这就是所谓的弹性安全,即便发生了错误,能够及时快速的修复漏洞或者自我修复,达到正常工作的目的。
  • 产品发展不同时期的测试策略 是否在团队组建之初,就要把整个自动化测试的能力构建起来呢?其实这有一个过程,下面从软件成熟周期的角度,看如何构建测试自动化的能力。 在软件初期探索阶段,产品是一个不确定的状态,从前端的风格和整体的布局到后端的API都时刻在变化当中,而且变化比较频繁,由于自动化用例的生命周期比较短,所以在这个时候创建一些自动化测试用例是不太划算的。而这个时间段的产品,往往特性是可控制的,只有几个测试,因此可以以手动为主,不考虑自动化,让产品能够快速识别错误点,让用户能用起来。 到了产品扩张阶段,用户认可产品,这时候会出现两个现象:第一是用户量增长,第二是需求数量增长。这时候必须要考虑自动化,因为在这个阶段每一次迭代的全量验证成本会越来越大,而交付的速度也会越来越快。我们不可能每一轮上线的时候都全部用手工做测试,这时候旧的模块就需要自动化用例去保证。 到产品提取阶段,产品已经到了需求的饱和期,产品的利益增长也到了饱和期,这时候要严格控制产品需求,自动化用例的职责变成守护,不允许变动引入额外的风险点、大的特性变动,导致对成熟的用户造成攻击。
  • 自动化测试和测试自动化 这里要澄清一个概念,就是测试自动化(Test Automation)。 测试自动化的目的是减少手工测试和手工操作。测试自动化不仅仅包括自动化测试执行(Automated Testing),还包括其它所有可以减人力投入的活动,例如自动化创建测试环境、自动化部署被测系统、自动化监控、自动化数据分析等。很多自动化测试只是测试的执行部分,例如把一些测试执行的人工测试手段做成自动化测试。但是测试自动化不仅仅是只是执行,还包括了从环境的获取到生成测试数据、执行自动化测试,最终生成结果。如果有问题,会自动推送给相关的人,对应的组织解决。自动生成测试报告,测试人员直接拿到测试结果。
  • 测试债务 从瀑布到敏捷再到DevOps,在开发和测试生产率和需求交付效率提升的过程中,不同的组织或多或少面临一些积压问题没有解决,影响测试能力和测试价值的持续提升。 从对测试的重视程度上看,有的公司存在重开发、轻测试的情况,测试人员职业发展受限;手工测试人员不熟悉编程,开发人员对测试重视不足;测试工作量高,但人员配比低。 从部门组织和流程和文化上看,测试人员对需求理解不足,测试和开发之间的部门墙导致信息不透明、沟通协作滞后和不足,质量向速度过分妥协,以及忽视敏捷文化和价值观的培养塑造。 从测试和产品技术和方法上看,产品耦合度高、可测试性差,测试过于依赖黑盒功能测试,测试策略、方法不恰当,测试环境部署时间长,频繁升级等。
  • 测试左移和测试右移 左移就是前移,尽量把活动向前移。例如BDD(Behavior Driven Development,行为驱动开发),基于场景直接设计出符合这个场景的用例,来匹配这个设计;契约测试,服务和服务本身之间有耦合,可以通过契约测试解耦,以防导致问题。 测试右移是指要把测试活动的覆盖范围尽量向后蔓延。通常的测试只进行到了版本发布之前,测好之后发布一个软件包,而测试右移要把软件包发布到生产环境,以及到线上运营环节,都要去做测试。 在这两个方面也有一些相应的实践,例如线上拨测,主动线上监控用户的一些行为,并从行为轨迹里面快速捕捉相应的问题,主动推送给相关的责任人,让他去关注并且解决。线上的过程可以通过一些测试手段,不断的反馈给真正的开发人员,让他知道当前产品的整体表现,开发人员就会快速的针对产品作出应对方案。
  • 团队规模对测试建设的影响 当团队规模在5个人以下,团队处于探索阶段,这时质量活动可以仅仅局限于测试的自组织阶段,只是做一些基础类测试管理活动,把缺陷管理起来,做一些回归测试。在这个阶段主要是建立一个测试管理的流程和机制,并没有接触到自动化测试。 随着项目的进一步扩大,逐渐增长到5-10人的团队规模,这时测试工作量突然增加,可能会有专门的测试人员进来,这个测试人员会去和开发人员进行串联,把需求转化成自动化测试的用例,搭建持续集成,逐步演进一些测试手段。——这个阶段已经开始做一些自动化的尝试。 团队进一步增大,一个人可能搞不定工作量的时候,会招聘更多的测试人员,成立专门的测试团队,这个团队就从自动化测试转向测试自动化,把更多的管理工作做进来。在这个管理过程中,会做一些产品的对接,包括开发专门的工具,实现自动化的整体能力,不仅仅是自动化执行了。 经过上面几个演进周期之后,测试团队具备了很多的测试自动化经验,这个时候可以进行面向云化的转型,现在很多团队都在进行DevOps转型,最关心的方面就是组建DevOps的全功能团队。那么之前转型的这些人在做什么?原有10-15人的测试专项团队做什么?在这个阶段团队要把测试专项能力向服务化能力转型:测试专员会在团队创建初期进行赋能,包括测试工程搭建、早期的测试用例怎么写、标准化模板的编制、针对非功能性测试的专项能力的赋能;所有团队进行测试流程的评审,包括测试策略、测试计划、测试用例的评审,再看整个团队里面流程上还有哪些改进的;从各个方面整个专项测试团队向服务化进行转型,帮助所有团队完成自动化转型。
  • 测试策略和方法描述 回顾测试策略和测试方案,如测试类型、测试场景、测试方法,策略性说明如何测试,介绍测试使用的方案,例如:集成步骤和顺序、测试步骤和顺序、测试方法、测试工具、测试用例设计和执行方法等。 描述测试环境,如测试所使用的硬件、软件、测试工具的名称、规格、数量、版本、账号等信息。 总结测试周期和测试人员投入,即测试的计划开始和结束时间,测试总体进度,关键的阶段性进度检查点情况,测试人员数目、分工、投入工时等。
  • 测试指标统计和分析评价 测试关键性指标统计:某些专项测试,例如速度、吞吐量、温度、时间、资源占用率等被测系统质量可量化指标的测试结果统计。 缺陷统计和缺陷分析:统计缺陷总数、按级别统计缺陷、缺陷解决率、缺陷重启率、遗留问题单数目、按模块缺陷分布、缺陷来源分布等。应用缺陷正交分析、四象限缺陷分析等。 测试执行情况统计:统计设计的各类测试用例数量和比例、执行测试用例数量、测试用例执行通过率、回归测试次数,测试执行人力投入和测试执行周期等。 测试充分性和测试能力统计:统计需求和功能特性覆盖情况,测试执行完成率、代码测试覆盖率、测试自动化率、测试用例缺陷命中率等。
  • 测试计划需要包含哪些内容 根据ISO、IEEE等有关于测试文档的相关标准,在项目实践中可以选择在测试计划中包含哪些内容,内容多少与项目、团队规模相关,小团队测试可以精简测试计划。 测试目的 概述为什么要做这个测试,需要实现什么样的测试目标。测试目的是测试计划的源头,测试需要聚焦产品的业务价值。如果是产品整体测试计划,需要结合产品的业务属性,将质量的功能、安全、性能、易用性、兼容性、扩展性等维度融入测试目的,例如金融类产品对安全性要求很高。 测试范围 详述被测系统(测试对象)的名称、版本、特性、需求、环境、测试项,明确需要测试什么、不测试什么。 测试策略 明确测试类型、测试场景、测试方法,策略性说明如何测试。 测试方案 详述测试使用的方案,例如集成步骤和顺序、测试步骤和顺序、测试方法、测试工具、测试用例设计和执行方法等。 测试环境 描述测试所需要的硬件、软件、测试工具的名称、规格、数量、版本、账号等信息,以及测试环境的准备、预定、还原、释放等管理策略。 测试人员 详述测试人员数目、分工、职责,如测试架构师、测试开发工程师、性能测试工程师、测试环境管理人员等。 测试进度计划 说明测试的计划开始和结束时间,测试总体进度安排,关键的阶段性进度检查点。测试进度计划结合开发计划,需要综合考虑测试方案、环境、人员等资源和任务的约束依赖关系。 测试准入条件 明确接纳启动测试的准入条件,如产品规格说明书中的功能已经实现、基本流程和准入测试用例通过等,以避免由于测试基础条件不具备影响测试计划实施。 测试发布标准和交付件 明确测试完成需要满足的条件、测试通过/不通过的标准、测试完成后需要产出的交付件,例如测试报告,说明测试报告需要包含的内容。 风险 分析当前项目运作中可能存在的风险,以及应对风险的规避、解决等措施。风险举例:人力到位风险、人员技能和领域知识风险、开发转测试时间风险。
  • 为什么要制定测试计划 确保测试活动围绕测试目的开展工作,服务于明确的测试目标。 确定测试对象的被测特性和需求清单,框定测试范围。 选取适合于团队技术能力和工具组合的测试策略和方法。 尽早识别测试活动开展中可能面临的风险因素,并及时解决。 合理预估测试工作量和人员、资源需求,编制测试项目计划。 帮助测试人员分解测试活动和任务,编排个人工作计划。 指导测试执行活动、及时纠正和补救执行偏差。 作为相关文档,与利益干系人汇报沟通。
  • 什么时间做测试计划 测试活动包含测试计划、测试设计、测试执行等。一般而言,测试计划排在首位,在测试周期的早期阶段开展。实际上根据不同的项目使用的开发模式、团队组织形式等,测试计划可能在多个时间节点中开展,例如: 某企业面向客户的移动APP产品,在第一个版本发布前,测试部门在接收到产品的测试申请后,接收测试需求做上线前系统测试计划。 某内部软件项目,产品立项完成需求确认后,架构师已经设计出产品架构方案和设计方案,产品未进入实质开发阶段,开发组织制定开发计划,测试组长制定测试计划。 某对外商用产品,例行提交做专项安全测试,安全测试部门根据历史安全测试计划和测试报告,评估新增产品特性变更,制定新版本的安全专项测试计划。 某软件测试团队有明确的功能测试、性能测试、安全测试等分工,测试团队主管制定主测试计划后,各类型测试专家制定类型的测试计划。 整体来讲,建议尽早开始测试计划相关工作,因为测试计划制定时间越早,越容易在早期阶段指导、规范产品的质量活动,提高产品的可测试性,测试人员从攻击者的视角指导产品架构和设计中的质量要素,符合测试左移的思想。 但越在产品的早期阶段,测试计划的粒度越粗,缺少细节可执行层面的测试用例、可供使用的测试环境等,需要随着项目的推进不断细化。测试计划不是一成不变的,随着测试项目的开展,测试计划逐步详细,包含越来越多的信息。测试计划的细化和完善过程中需要注意审视初始的测试目的、测试范围和测试设计和策略等。
  • 使用测试因子中心生成组合用例 测试设计通过建立测试因子中心承载测试因子,一方面借鉴历史测试数据和经验,对测试过程产生影响的公共要素,如测试条件及取值、测试操作等分别提取为数据因子、动作因子,实现数据与业务分层,促进测试设计过程可重复,降低测试设计难度,极大提高工作效率。另一方面,通过测试因子中心对版本的测试因子覆盖情况进行用例评估,以提高核心测试场景的覆盖率,减少漏测问题,提升待测系统稳定性。 测试设计支持数据组合批量用例生成方法,用户可根据实际测试需求对组合算法进行选择,支持多种数据组合方式。同时,用户可以快速从测试因子中心引用动作因子、数据因子,实现批量生成用例,避免测试点下用例反复手动编写,显著提升了用例生成效率,生成的用例结构统一,清晰直观。
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 count Integer 总记录数 最小值:0 最大值:1000000 page_info PageInfoDTO object 分页信息 edge_apps Array of QueryApplicationBriefResponseDTO objects 每页记录数 数组长度:0 - 1000000 表5 PageInfoDTO 参数 参数类型 描述 offset Integer 页码 最小值:0 最大值:1000000 limit Integer 每页记录数 最小值:1 最大值:1000 表6 QueryApplicationBriefResponseDTO 参数 参数类型 描述 edge_app_id String 应用id 最小长度:1 最大长度:64 description String 应用描述 最小长度:0 最大长度:256 create_time String 创建时间 最小长度:0 最大长度:256 update_time String 最后一次修改时间 最小长度:0 最大长度:256 last_published_version String 最新发布版本 最小长度:0 最大长度:64 app_type String 应用类型SYSTEM_REQUIRED|SYSTEM_OPTIONAL|USER 最小长度:0 最大长度:64 function_type String 应用类型DATA_PRO CES SING|PROTOCOL_PARSING 最小长度:0 最大长度:64 deploy_type String 部署类型docker|process 最小长度:0 最大长度:64 protocol String 驱动协议类型OPCUA|Modbus-TCP 最小长度:0 最大长度:64 edge_app_name String 应用名称 最小长度:0 最大长度:64
共100000条