0
点赞
收藏
分享

微信扫一扫

软件工程基础

人间四月天i 2022-03-12 阅读 86

软件工程基础

软件工程基本概念与生命周期

什么是软件工程

软件工程 (Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。

在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量.

软件工程生命周期

结构化设计方法

总体设计与详细设计

总体设计

  1. 总体设计的任务

​ 2.总体设计的概念

详细设计

根据“由外向里”的思想方法,概要设计完成之后,就要进行详细设计。详细设计确定每个模块的内部特征,即每个模块部内部的执行过程

  1. 详细设计的原则

面向对象思想

面向对象数据模型(OOM)核心概念

(1)对象和对象标识(OID)。对象是现实世界中实体的模型化,与记录、元组的概念相似,但远比它们复杂。每一个对象都有一个唯一的标识,称为对象标 识。对象标识不等于关系模式中的记录标识,OID是独立于值的,全系统唯一的。

(2)封装(encapsulate)。每一个对象是状态(state)和行为(behavior)的封装。对象的状态是该对象属性的集合,对象的行为是在该对象状态上操作的方 法(程序代码)的集合。被封装的状态和行为在对象外部是看不见的,只能通过显式定义的消息传递来访问。

(3)对象的属性(object attribute)。对象的属性描述对象的状态、组成和特性,对象的某个属性可以是单值或值的集合。对象的一个属性值本身在该属性看 来也是一个对象。

(4)类和类层次(class and class hierarchy)。

​ ① 类。所有具有相同属性和方法集的对象构成了一个对象类。任何一个对象都是某个对象类的一个实例(instance)。对象类中属性的定义域可以是任何 类,包括基本类,如整型、实型和字串等;一般类,包含自身属性和方法类本身。

​ ② 类层次。所有的类组成了一个有根有向无环图,称为类层次(结构)。一个类可以从直接/间接祖先(超类)中继承(inherit)所有的属性和方法,该类 称为子类。

(5)继承(inherit)。子类可以从其超类中继承所有属性和方法。类继承可分为单继承(即一个类只能有一个超类)和多重继承(即一个类可以有多个超类)。

软件测试

1.系统测试的意义、目的及原则

系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。

测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷

系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析、系统设计和实施的最后复查。

根据测试的概念和目的,在进行信息系统测试时应遵循以下基本原则。

测试方法(黑白盒!)

测试是可以事先计划并可以系统地进行的一系列活动。因此,应该为软件过程定义软件测试模板,即将特定的测试方法和测试用例设计放在一系列的测试步骤中去。

软件测试方法分为静态测试动态测试

(1)静态测试。静态测试是指被测试程序在机器上运行,而是采用人工检测计算机辅助静态分析的手段对程序进行检测。

​ **① 人工检测。**人工检测是不依靠计算机而是靠人工审查程序或评审软件,包括代码检查、静态结构分析和代码质量度量等。

​ **② 计算机辅助静态分析。**利用静态分析工具对被测试程序进行特性分析,从程序中提取一些信息,以便检查程序逻辑的各种缺陷和可疑的程序构造。

(2)动态测试。动态测试是指通过运行程序发现错误。对软件产品进行动态测试时可以采用黑盒测试法和白盒测试法

测试用例的设计如下。

测试用例由测试输入数据和与之对应的预期输出结构组成。在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。

1)用黑盒法设计测试用例

黑盒测试也称为功能测试,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性。进行黑盒测试主要是为了发现以下几类错误。

(1)是否有错误的功能或遗漏的功能?

(2)界面是否有误?输入是否正确接收?输出是否正确?

(3)是否有数据结构或外部数据库访问错误?

(4)性能是否能够接受?

(5)是否有初始化或终止性错误?

常用的黑盒测试技术有等价类划分、边值分析、错误猜测和因果图等。

(1)等价类划分。

等价类划分法将程序的输入域划分为若干等价类,然后从每个等价类中选取一个代表性数据作为测试用例。

每一类的代表性数据在测试中的作用等价于这一类中的其他值。

这样就可以用少量代表性的测试用例取得较好的测试效果。

等价类划分有两种不同的情况:有效等价类无效等价类

在设计测试用例时,要同时考虑这两种等价类。

定义等价类的原则如下。

定义好等价类之后,建立等价类表,并为每个等价类编号。在设计一个新的测试用例时,使其尽可能多地覆盖尚未覆盖的有效等价类,不断重复,最后使得所有有效等价类均被测试用例所覆盖。然后设计一个新的测试用例,使其只覆盖一个无效等价类。

(2)边界值划分。

输入的边界比中间更加容易发生错误,因此用边界值分析来补充等价类划分的测试用例设计技术。

边界值划分选择等价类边界的测试用例,注重于输入条件边界适用于输出域测试用例。

对边界值设计测试用例应遵循的原则如下。

(3)错误推测。

错误推测是基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例的方法。

其基本思想是列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。

(4)因果图。

因果图法是从自然语言描述的程序规格说明中找出因(输入条件)和果(输出或程序状态的改变),通过因果图转换为判定表

利用因果图导出测试用例需要经过以下几个步骤。

这样生成的测试用例(局部,组合关系下的)包括了所有输入数据的取“真”和取“假”的情况,构成的测试用例数据达到最少,且测试用例数据随输入数据数目的增加而增加。

2)用白盒法设计测试用例

白盒测试也称为结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。

白盒测试常用的技术是逻辑覆盖、循环覆盖和基本路径测试

(1)逻辑覆盖。

逻辑覆盖考察用测试数据运行被测程序时对程序逻辑的覆盖程度

主要的逻辑覆盖标准有语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖6种。

(2)循环覆盖。

执行足够的测试用例,使得循环中的每个条件都得到验证。

(3)基本路径测试。

基本路径测试法是在程序控制流图的基础上,通过分析控制流图的环路复杂性,导出基本可执行路径集合,从而设计测试用例。

设计出的测试用例要保证在测试中程序的每一条独立路径都执行过,即程序中的每条可执行语句至少执行一次

此外,所有条件语句的真值状态和假值状态都测试过。

路径测试的起点程序控制流图。程序控制流图中的节点代表包含一个或多个无分支的语句序列边代表控制流

白盒测试的原则如下。

调试

调试***发生在测试之后***,其任务是***根据测试时所发现的错误***,找出原因和具体的位置,进行改正。调试工作主要由程序开发人员来进行,谁开发的程序就由谁来进行调试。

目前常用的调试方法有如下几种。

(1)试探法。调试人员分析错误的症状,猜测问题的所在位置,利用在程序中设置输出语句,分析寄存器、存储器的内容等手段来获得错误的线索,一步步地试探和分析出错误所在。这种方法效率很低,适合于结构比较简单的程序。

(2)回溯法。调试人员从发现错误症状的位置开始,人工沿着程序的控制流程往回跟踪代码,直到找出错误根源为止。这种方法适合于小型程序,对于大规模程序,由于其需要回溯的路径太多而变得不可操作。

(3)对分查找法。这种方法主要用来缩小错误的范围,如果已经知道程序中的变量在若干位置的正确取值,可以在这些位置上给这些变量以正确值,观察程序运行输出结果,如果没有发现问题,则说明从赋予变量一个正确值开始到输出结果之间的程序没有错误,问题可能在除此之外的程序中。否则错误就在所考察的这部分程序中,对含有错误的程序段再使用这种方法,直到把故障范围缩小到比较容易诊断为止。

(4)归纳法。归纳法就是从测试所暴露的问题出发,收集所有正确或不正确的数据,分析它们之间的关系,提出假想的错误原因,用这些数据来证明或反驳,从而查出错误所在。

(5)演绎法。根据测试结果,列出所有可能的错误原因。分析已有的数据,排除不可能和彼此矛盾的原因。对其余的原因,选择可能性最大的,利用已有的数据完善该假设,使假设更具体。用假设来解释所有的原始测试结果,如果能解释这一切,则假设得以证实,也就找出错误;否则,要么是假设不完备或不成立,要么有多个错误同时存在,需要重新分析,提出新的假设,直到发现错误为止。

举报

相关推荐

0 条评论