您的位置:首页 > 编程语言 > C语言/C++

华为软件训练营MOOC-C语言 Week2 学习笔记

2017-02-21 20:48 537 查看

一、低级错误案例

1.1 引言

提高质量意识、成本意识,前车之鉴,后世之师,不犯同样的错误,提高编码水平,增强产品代码的可靠性,减少网上事故的发生。

1.2 修改函数形参

函数参数传递的原理:函数参数自身上用的存储单元在堆栈中分配,入口参数的值会在函数入口处拷贝到堆栈区中,一旦函数返回,其占用的堆栈空间立即被释放,因此对函数参数所在存储单元的直接修改不会作用到函数之外,但是对参数存储单元钟存放的地址指向的存储空间的修改,则会在函数之外起作用。

1.3 返回局部变量的地址

局部变量的内容存放在堆栈钟的,其所占用的空间在函数返回后就会自动释放,这导致函数返回的局部变量指针指向了内容不可预知的内存。

错误代码

struct QueryTable *QueryTableAdaptor(key){
struct QueryTable stAdaptor[m]={...};
if (query success){
return &(stAdaptor
);
}
}


修改后

void QueryTableAdaptor(key,struct QueryTable *pData){
struct QueryTable stAdaptor[m]={...};
if (query success){
*pData=&(stAdaptor
);
}
}


1.4 强制类型转换和字节序

1、不能轻易进行强制类型转换。



2、大端序存储方式为:高地址存低位字节,低地址存高位字节;小端序存储方式为:低地址存低位字节,高地址存高位字节。



3、强制类型转换的总结:

(1)当目的结果的空间大于源结构的空间时,要重点关注内存访问超过源结构范围的情形,可能越界;

(2)当目的结果的空间小于源结构的空间时,要重点关注对目的结果赋值不能完全覆盖源结构范围的情形,需要考虑字节序;

(3)在把某些变量或数组或结构强制转换成同一结构体时,需要考虑结构体的字节对齐问题;

(4)与结构体的强制类型转换相比,基本数据结构的强制类型转换更容易出现上面描述的情况,使用的时候,一定要慎之又慎。

(5)不要将字符串常量强制转化位字符指针,以免导致改写只读数据的段错误。



1.5 变量溢出&堆栈溢出

对于循环变量在使用时需要注意下面两点:

(1)使用循环变量要确保循环变量的取值范围,要大于循环范围的限制常量或变量;

(2)使用循环变量,不能使用UC类型,最好使用US或UL,避免循环边界值大于255形成死循环。

1.6 字符串的使用

1、时刻注意字符串的“\0”结束符号,以及字符串长度和大小的问题;

2、注意尽量使用strcpy_s,sprintf_s等有长度校验的安全函数。

3、通过索引读取字符串时,一定要判断索引的正确性。

二、华为敏捷开发解读

2.1 IPD与敏捷基础知识介绍

1、IPD是软件工程中集成产品开发流程的简称



2、IPD-R&D流程框架简介



3、IPD是产品开发模式,它有六个环节:概念、计划、开发、验证、发布、生命周期环节,在这一系列环节钟有7个TR技术评审点,4个业务决策评审点,1个发布点和1个GA点。

2.2 敏捷宣言

1、敏捷作为一种开发模式,它的特点是轻量级的,并且能够是适应快速多变的环境,它更适应现代软件的发展。

2、敏捷宣言内容:

(1)个体和交互胜过过程和工具

(2)可以工作的软件胜过面面俱到的文档

(3)客户合作胜过合同谈判

(4)响应变化胜过遵循计划

2.3 统一认识敏捷及敏捷理念

敏捷=理念+优秀实践+具体应用



三、软件测试基础知识

3.1 软件测试基础

1、测试定义:测试是一个包含计划、准备和测量活动的过程。其目的是确认被测系统的特性,并指出需求和实现之间的差异。

2、测试的目的

(1)发现缺陷

(2)增强对质量的信心

(3)为决策者提供信息

(4)预防缺陷

3、黑盒软件测试的分类



4、单元

C语言钟的函数或函数集合、C++等面向对象语言钟的类或类的集合等都可以认为是单元,功能单一且独立。

5、集成测试是对单元、组件之间的接口进行测试。

6、系统测试关注的是在开发项目或程序钟定义的一个完整的系统/产品的行为。

7、验收测试通常是由使用系统的用户或客户来进行,同时系统的其他利益相关者野可能参与其中。

8、静态测试技术通过手工检查(评审)或自动化分析(静态分析工具)的方式对代码或其他项目文档进行检查。

9、动态测试方法是指通过运行被测试程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。

10、静态测试的方法:

(1)代码检查工具检查(pclint、圈复杂度检查等)

(2)走读(walk through)

(3)检视(inspection)

11、动态测试方法:

(1)等价类划分

(2)边界值分析

(3)决策表分析

(4)判定条件覆盖

(5)条件组合覆盖

12、黑盒测试:把被测对象看作一个黑盒,测试软件产品的功能,而不需关注软件产品的内部结构和处理过程。

13、白盒测试:根据被测程序的内部结构设计测试用例的一种测试方法。

14、测试越早开始越好。

15、停止测试的条件:

(1)当达到了必要的信心级别,风险可以接受的时候停止测试

(2)当发现缺陷的代价高于缺陷发生引起的代价时停止测试

(3)当达到测试完成标准(退出/成功标准)时停止测试

16、测试是研发团队所有人的职责。

17、HLT和LLT共同编织一张系统质量保护网。

18、基本的测试标准过程



19、基于风险的测试(RBT):穷尽测试就是进行完全(各种输入和前提条件的组合)的测试,对资源的需求巨大。

20、产品的风险级别由失效概率(风险发生的可能性)和失效影响(风险发生后产生的影响)两个方面来决定。



21、测试的基本原则

(1)测试可以显示缺陷(defect)的存在

(2)穷尽测试是不可能的

(3)测试尽早介入

(4)缺陷具有集群性,80%的缺陷集中在20%的模块上。

(5)杀虫剂悖论,相同的用例一遍一遍重复执行,最后将不再能发现新的缺陷。

(6)测试活动依赖于测试内容

(7)“Absence-of-errors”谬论,如果系统不满足用户需求,找出并修订Bug没有任何帮助。

3.2 测试设计技术

1、软件缺陷

(1)软件未达到产品规格钟定义的功能要求

(2)软件出现了产品规格钟不允许出现的错误

(3)软件未达到产品规格钟未定义但应该实现的功能要求

(4)软件难以理解不易使用-测试人员认为-最终用户拒绝认同。

2、测试用例:可以独立进行测试执行的最小单元

(1)测试用例设计的目的

(2)测试操作步骤所需要的输入数据

(3)需要从被测试系统收集的输出数据

(4)测试通过的标准

3、测试用例是测试工作的指导,是软件测试执行的必须遵守的准则,更是软件测试质量稳定的根本保障。

4、软件测试分类



5、良好测试用例的特征

(1)更强、更快、更广

(2)简单-不过分复杂,但也不能过分简单

(3)清晰-通过标准清晰

(4)规范

6、边界值分析方法是等价类划分方法的补充,经常和等价类法配合使用。经验告诉我们,大量的错误是发生在输入或输出范围的边界上,边界值分析就是在划分的等价类区域的边界及其附件进行测试数据的选取。

7、边界值的选取原则就是正好等于、刚刚大于或刚刚小于边界值的数据作为测试数据。

8、对于一个等价类来说,它是一个域,域钟的数据被分为了三类:上点、离点与内点。其钟上点与离点就是域边界上的数据,内点是域内非边界上的数据。



9、等价类划分是一种典型的、常用的黑盒测试方法,这种方法把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量有代表性的测试数据取得较好的测试效果。

10、错误推测法是基于经验和直觉推测程序钟所有可能存在的各种错误,从而有针对性的进行测试的方法。

11、因果图方法运用图的方法对多个输入之间的组合以及输入、输出之间的因果关系进行了分析,最终生成判定表。适合于检查程序输入条件的各种组合的情况。

12、判定表是采用表格的形式,列出所有条件和所有结果的组合,做到无遗漏的覆盖。判定表适合于条件项各自独立、互不影响的情况。判定表的使用技巧在于,把条件项划分清晰,对条件进行合理的组合,使得到的规则数最小。

13、可用性测试(Usability Testing),近来也将其称为客户体验测试(CAT),其目的是通过用户对产品原型或交付件的使用来找出产品的可用性问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: