测试理论
防火墙日志审查不属于网站渗透测试内容
确定测试基线属于配置项控制活动
测试成本控制的目标是使测试开发成本、测试实施成本和测试维护成本最小,可以通过加强软件测试的配置管理来降低测试维护成本
无效等价类要划分到最小单位。
覆盖准则由弱到强:语句覆盖、条件覆盖、判定覆盖、判定条件覆盖、条件组合覆盖、路径覆盖
软件测试阶段:单元测试、集成测试、系统测试、确认测试、验收测试
在任何情况下都要采用边界值分析法,因为这种方法设计出的测试用例发现问题的能力最强,必要时可以采用等价类划分法,也可以根据经验采用错误推测法,当输入条件可以组合时,也可以采用因果图法和判定表法。
测试执行过程的阶段包括:初测期、细测期、回归测试期
测试人员、测试时间或其他资源不足不可以作为测试结束的标准,因为这属于项目管理的问题。
模拟解密是测试一个软件或系统中的加密机制是否合理的一个重要手段。
敏捷宣言:个人和交互胜过过程和工具;可以运行的软件胜过面面俱到的文档;与客户合作胜过合同谈判;对变化的反应胜过遵循计划。
敏捷过程的典型方法:极限编程(XP)、水晶法(Crystal)、并列争球法(Scrum)、自适应软件开发(ASD)。
极限编程是激发开发人员创造性、使得管理负担最小的一组技术。
水晶法认为每一个不同的项目都需要一套不同的策略、约定和方法论。
并列争球法使用迭代的方法,其中把每30天一次的迭代成为一次冲刺,并按需求的优先级来实现产品。多个自组织和自治小组并行地递增实现产品,协调是通过简短的日常情况会议进行。
自适应软件开发是由一个使命作为主导,它设立了项目的目标,但并不描述如何达到这个目标。
极限编程的十二个最佳实践是计划游戏(planning game)、小型发布(small release)、系统隐喻(system matephor)、简单设计(simple design)、测试驱动(test-driven)、重构(refactoring)、结对编程(pair programming)、集体所有权(collective ownership)、持续集成(continuous intergration)、每周工作40小时(40-hour week)、现场客户(on-site customer)、编码标准( code stardands)。
CPU不属于网络测试对象,CPU 属于服务器资源,不属于网络资源。
软件编码规范的测评内容包括源程序文档化、数据说明方法、语句结构、输入和输出。算法逻辑不属于软件编码规范的测评内容。
提高口令的安全性可以采用的措施有:最小改变口令的时限、最短口令长度、首次登录必须更改口令。
计算机组成原理
在输入输出控制方法中,采用DMA可以使设备与主存之间的数据块传送无需CPU干预
指令由操作码和地址码组成,直接寻址将地址码存储在程序计数器PC中
在程序执行过程中,cache与主存的地址映像由硬件自动完成
CPU是在一个总线周期结束时响应DMA请求的,DMA操作占用的是系统总线。
计算机存储体系分为虚拟存储体系,由主存和辅存构成;cache存储体系,由cache和主存构成。
程序计数器PC属于控制器中的寄存器。
中断向量提供中断服务程序的入口地址。
为了提高计算机磁盘的存取效率,可以采用磁盘碎片化整理程序,定期对磁盘进行碎片整理。
地址寄存器通常用来暂存待访问数据内存单元的地址。
指令寄存器通常用来暂存正在执行的指令。
程序计数器通常用来暂存待执行指令的地址。
计算机系统中,CPU对主存的访问方式是随机存取。
存储系统中的存储器按照寻址方式可以分为随机存储器、顺序存储器、直接存储器。
总线复用方式可以减少总线中信号线的数量。
操作系统
操作系统通过文件目录和目录项来组织和管理外存中的信息,方便用户可以按名存取。
批处理操作系统是脱机处理系统,即在作业运行期间内无需人工干预,由操作系统根据作业说明书控制作业运行。
分时操作系统是将CPU的时间划分成时间片,轮流为各个用户服务。其设计目标是多用户的通用操作系统,交互能力强。
分布式操作系统是网络操作系统的更高级形式,它保持着网络系统所拥有的全部功能,同时也具有透明性、可靠性和高性能等特性。
实时操作系统的设计目标是专用系统,主要特征是实时性强和可靠性高。
计算机网络
如果要使得两个IPV6结点可以通过现有的IPV4网络进行通信,可以采用隧道技术。
如果要使得纯IPV6节点和IPV4节点进行通信,则可以才用翻译技术。
PPP中安全认证协议是CHAP,它使用三次握手的会话过程传送密文
PPP点对点协议的身份验证方法有两种,分别是PAP密码验证协议:基于客户端-服务器-基于密码的身份验证协议,仅发生在会话建立过程的开始。CHAP质询握手验证协议
ICMP协议和IP协议同属于Internet中的网络层协议,ICMP协议的数据单元封装在IP数据报中传输。
TCP协议是传输层协议,使用3次握手建立连接。
SNMP(简单网络管理协议)属于应用层协议,SNMP协议的报文封装在UDP中传送。
DHCP客户端可以从DHCP服务端获取到本机的IP地址,DNS服务器地址,DHCP服务器地址,默认网关地址。
标准的URL的格式如下:协议://主机名.域名.域名后缀或IP地址(:端口号)/目录/文件名
公钥加密技术,又称为非对称加密技术,由一对加密密钥和解密密钥构成,两个密钥基于数学函数,公钥和私钥可以相互解密。
包过滤防火墙又称为IP过滤器,位于网络层,数据包过滤用在内部主机和外部主机之间,过滤系统可以是主机,也可以是路由器。
网络攻击分为主动攻击和被动攻击;主动攻击包括重放攻击、IP地址欺骗、拒绝服务攻击;被动攻击包括流量分析。
防火墙可以实现数据包的过滤、保护用户访问网络的记录、服务器代理,不提供查杀病毒的功能
POP3协议采用client/server模式,客户端代理和POP3服务器通过建立TCP连接来传输数据。
MIME是多格式邮件协议,PGP是安全邮件协议,POP3是邮件接收协议,SMTP是邮件发送协议。
针对网络互联设备工作的协议层我们可以对其进行分类:
中继器作用于物理层,只起到扩展传输距离的作用,对高层协议是透明的。
集线器作用于物理层,集线器的工作原理基本上与中继器很相似,简单来说,集线器就是一个多端口的中继器,它把一个端口上收到的数据广播到所有其他端口上。
网桥作用于数据链路层,网桥检查帧的源地址和目标地址。如果目标地址和源地址不在一个网段上,就把帧转发到另一个网段上。以太网中广泛使用的交换机就是一种多端口的网桥,每个端口都可以连接一个局域网。由网桥或者交换机连接的各个子网组成了一个更大的局域网,从而就形成了一个广播域。
路由器作用于网络层,路由器根据网络层地址,通常是IP地址,在互联的子网之间传递分组。路由器连接的各个子网属于不同的局域网,路由器隔离了各个局域网的广播帧,从而抑制了网络中的网络风暴,提高了网络带宽的利用率。
网关作用于连接网络层之上执行不同协议的子网,组成异构型的互联网络。网关能对互不兼容的高层协议进行转换。
如果路由器收到了由多个路由转发的关于某个目标的多条路由,则比较各个路由的管理距离,并采用管理距离小的路由来源提供的路由信息。
DoS是denial of service的简称,即拒绝服务。造成DoS的攻击行为称之为DoS攻击,DoS攻击通常通过抑制所有或者流向某一个特定目的端的消息,从而使得系统的某一实体不能执行其正常功能,产生服务拒绝。常见的DoS攻击手段包括死亡之Ping、Land攻击、UDP洪水、SYN洪水、Smurf攻击、Fraggle攻击、畸形消息攻击等,DoS攻击通常故意攻击网络协议实现的缺陷或者直接通过野蛮手段耗尽被攻击对象的资源,从而实现是目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备,并不一定要利用软件系统内部的漏洞,仅从外部就可以实现|DoS攻击。
软件工程
软件开发过程模型:瀑布模型、增量模型、螺旋模型适用于大型软件系统的开发,原型模型适用于小规模、用户需求经常变动的的软件系统的开发。喷泉模型以用户需求为动力,以对象作为驱动,适合面对对象的开发方法。
软件需求的分类:业务需求、系统需求、功能需求、质量需求、设计约束。
- 业务要求:描述使用软件系统需要达到什么样的目标
- 系统需求:为了满足需求,系统或系统的子功能必须满足或具有的条件或能力
- 功能需求:软件必须实现的功能性需求,即软件必须完成的任务
- 质量需求:也成为非功能需求,在满足功能性需求的基础之上,要求软件系统还必须具有的特性
- 设计约束:规定软件开发过程中的设计决策,对解决方案的约束
结构化开发方法是由结构化分析\结构化设计\结构化程序设计构成,是一种面向数据流的开发方法.指导思想是自顶向下\逐层分解,基本原则是功能的分解与抽象。是软件工程中最早出现的开发方法,并不适合解决大规模的项目需求,比较适合数据处理领域的问题。
模块独立性由模块的内聚和模块间的耦合这两个维度进行度量,其中按照内聚类型由弱到强分为:巧合内聚\逻辑内聚\时间内聚\过程内聚\通信内聚\顺序内聚\功能内聚,按照耦合类型由弱到强分为非直接耦合/数据耦合/标记耦合/控制耦合/外部耦合/公共耦合/内容耦合
结构设计原则:模块应具有较强的模块独立性,即高聚合和低耦合。系统的模块之间应该呈现树状结构,模块之间存在上下级调用关系,但同级之间不允许横向关联,并且也不希望存在复杂的网状结构或者交叉调用关系。所有的模块必须严格地分类编码并建立归档文件。
结构化设计主要包括系统结构设计、数据设计、接口设计、过程设计。
系统结构设计:定义软件的主要结构元素及其之间的关系,依据系统规格说明和数据流图进行。
数据设计:基于实体联系图(E-R图)确定软件涉及的文件系统的结构及其数据库的表结构。
接口设计:描述用户界面、软件和其他硬件设备、其他软件系统及其使用人员的外部接口,以及各种内部构件之间的内部接口。依据数据流图进行。
过程设计:确定软件各个组成部分的算法和内部数据结构,并选定某种过程的表达形式来描述算法,依据加工规格说明进行。主要的加工规格说明的表达方式有:伪代码、流程图、决策树。
在软件开发过程中,详细设计阶段应该确定的内容包括数据结构、算法、数据库物理结构。
用例之间的关系:使用use、包含include、扩展extend。
类之间的关系:泛化、实现、关联、聚合、组合、依赖。
软件设计要遵循的基本原则不包括封装,封装是保障信息隐蔽的一种手段。
N-S盒、PAD图、程序流程图主要用于表示软件模块的执行过程。E-R图用于系统数据建模,用于表示实体与实体之间的联系。
算法设计与分析
当数组基本有序时,采用插入排序算法最好,时间复杂度为O(n);采用快速排序最坏,时间复杂度为O(n^2) 。
程序设计
编译和解释是实现高级程序设计语言的两种方式,其主要区别在于是否生成目标代码文件。
函数调用的基本参数传递方式分为传值和传地址。在传值方式下将实参的值传递给形参,因此实参可以是表达式、常量、变量、数组元素等,这种参数传递是单向的,形参不能将值再传回给实参。在传地址的传递参数的方式下,需要将实参的地址传递给形参,因此实参必须是变量或是数组,不能是常量或表达式,这种传参方式被调用函数中对形参的修改就是对实参的修改,因此传地址的方式可是实现实参和形参之间的双向数据传输。
若C程序的表达式中引用了未赋初值的变量,则可以通过编译并运行,但运行结果不一定是期望的结果。
软件的知识产权保护
计算机著作权保护的对象是计算机程序及其文档。
程序员在所属公司完成编码或者文档撰写工作属于职务行为,其成果的著作权应归公司所有。
著作权不要求履行任何形式的登记或注册手续,软件著作权在软件开发完成之日就产生了。而商标权和专利权不可以自动获取,需要向相关部门申请。
合理使用可以不经过著作权人许可。
学术论文需要引用材料,只可以引用已发表的作品,不可以引用未经发表的作品。
法律法规不适用于著作权保护。
数据库
数据库的三级模式结构:外模式:视图、模式:基本表、内模式:存储文件。
在分布式数据库中有分片透明、复制透明、位置透明、逻辑透明等基本概念。
其中分片透明指的是用户或应用程序不需要知道逻辑上访问的表具体是怎么分块存储的。
复制透明指的是采用复制技术的分布方法,用户不需要知道数据是复制到哪个节点,怎么复制的。
位置透明指的是用户无需知道数据存放的物理地址。
逻辑透明是局部数据模型透明,指的是用户或应用程序无需知道局部场地使用的是哪种数据类型。
关系数据库的基本运算关系有两类,一类是传统的集合运算,包括并、交、差;另一类是专门的关系运算,包括选择、投影、连接。
信息安全
计算机感染特洛伊木马后的典型表现是有未知程序试图建立网络连接。
安全防护策略包括安全日志、入侵检测、隔离防护、漏洞扫描。入侵检测可以主动采集信息,分析网络攻击行为和误操作的实时保护策略。
自动化测试技术
发展和演进
第一代——以工具为中心的自动化,主要在1999年之前,以录制和回放为主,缺少检查点的功能
第二代——以脚本为中心,主要在1999-2002年,以大量的测试脚本为主,增加了检查点的功能
第三代——以平台为中心,主要在2003-2010,有了测试框架的概念
第四代——以业务为中心,在2010年之后,主要关注业务需求的自动化测试,以业务需求为中心,编写测试用例并执行。
第五代——以测试设计为中心,将主要关注点从执行变更到设计,特点是利用现有的测试设计技术或搜索算法自动生成测试用例和脚本。
自动化测试的分类
按照测试目的划分为:功能自动化测试、性能自动化测试、信息安全自动化测试。
按照测试对象所在的系统环境可划分为:Web自动化测试、Android自动化测试、iOS自动化测试、Linux自动化测试、Windows自动化测试
自动化测试的优缺点
优点:
提高测试质量、提升测试效率,缩短测试时间、提升测试覆盖率、能执行手工测试不易完成的测试任务、更好的利用资源、增进测试人员和开发人员的合作伙伴关系、更快的反馈测试结果、提高系统的稳定性和可靠性
缺点:
产生开发成本、对测试人员的要求较高、脚本维护成本较高、可能引入额外的错误、容易出现偏离原始的测试目标
自动化测试的局限性领域
不适用于定制性的项目
不适用于周期很短的项目
不适应于业务很复杂的对象
不适于做人体感观和易用性测试
不适用于不稳定的软件
不涉及到物理交互,比如NFC、刷卡机的测试
自动化测试开展的必要条件
具备足够的易测试性
软件需求变动较小
项目周期较长
自动化测试脚本可重用
测试工具
QTP:提供强大易用的录制回放功能,支持B/S和C/S两种架构
robot framework,是可扩展的关键字驱动的自动化测试框架,可用于接口自动化测试和UI自动化测试,支持分布式测试执行
selenium:基于web的自动化测试工具,支持多平台、多语言执行自动化测试
Appium:支持Android和iOS上原生应用、web应用和混合应用的自动化测试
测试设计的自动化技术
基于模型的测试技术
优点:测试设计的自动化能改善工作效率并减少人为错误;今早建立测试模型能够提前发现需求中的缺陷;可以使得不了解测试设计技术的业务人员也能实施测试设计;提高测试覆盖率,改进产品质量;缩短测试周期,加速测试活动
缺点:模型生成的测试用例数量可能过多;模型建模需要投入时间;模型也可能描述错误,因此生成的测试设计不一定全部都是正确的;模型的抽象会带来理解上的困难,测试评审者可能无法理解测试模型。
工具实现:spec explorer(C#)、graph walker(Python):支持使用变成语言定义状态机