软件工程基础
软件工程的基本概念
- 软件:软件是指与计算机系统的操作有关的计算机程序、规程、规则、以及可能有的文件、文档和数据。
- 特点
- 是逻辑实体,有抽象性。
- 生产没有明显的制作过程。
- 运行使用期间不存在磨损、老化问题。
- 开发、运行对计算机系统有依赖性、受计算机系统的限制,导致软件移植问题。
- 复杂性较高,成本昂贵。
- 开发涉及诸多社会因素。
- 软件的分类:软件可分为应用软件、系统软件和支撑软件3类。
- 软件危机:泛指在计算机软件的开发和维护过程中遇到的一系列严重的问题,集中表现在成本、质量、生产效率等几个方面。
- 软件工程:是指采用工程的概念、原理、技术和方法指导软件的开发与维护。软件工程的主要思想强调在软件开发过程中需要应用工程化原则。软件工程的核心思想是把软件当作一个工程产品来处理。
- 软件工程3要素:方法,工具和过程。
- 软件工程过程是把软件转化为输出的一组彼此相关的资源活动,包含4种基本活动:
(1)P(plan)—软件规格说明;
(2)D(do)—软件开发;
(3)C(check)—软件确认;
(4)A(action)—软件演进。 - 软件工程的理论和技术性研究的内容主要包括软件开发技术和软件工程管理。
- 软件生命周期:软件产品从提出、实现、使用维护到停止使用退役的整个过程。可分为软件定义,软件开发及软件维护3个阶段。
- 软件工程的原则:抽象,信息隐蔽,模块化,局部化,确定性,一致性,完备性,可验证性
结构化分析方法
需求分析阶段的工作:需求获取,需求分析,编写需求规格说明书,需求评审。
需求分析方法:
(1)结构化需求分析方法:
①面向数据结构的Jackson方法(JSD);
②面向数据流的结构化分析方法(SA);
③面向数据结构的结构化数据系统开发方法(DSSD);
(2)面向对象需求分析方法(OOA):
①静态分析方法
②动态分析方法。结构化方法包括结构化分析方法,结构化设计方法,结构化编程方法。结构化方法中,软件功能分解属于总体设计阶段。
结构化分析的常用工具:
(1)数据流图(DFD-Data Flow Diagram):
是结构化分析方法中用于系统逻辑模型的一种工具。它以图形的方式描绘在系统中流动和处理的过程。数据流图中四种基本的符号:
①【箭头】:表示【数据流】,数据流是数据在系统中传播的路径。②圆或椭圆:表示加工,加工又称为数据处理,是对数据流进行某些操作或变换。
③双横:表示数据存储(数据源)。数据存储又称为文件,指暂时保存的数据,它可以是数据库文件或任何形式的数据组织。
④方框:数据的源点或终点。它是软件系统外部环境中的实体,统称外部实体。(2)数据字典(DD):
它是结构分析方法的核心,是用来描述系统中所用到的全部数据和文件的文档,作用是对DFD中出现的被命名的图形元素进行确切解释。
数据字典由以下4类元素组成:
①数据流
②数据流分量
③数据存储
④处理(3)判定树(决策树):
是一种描述加工的图形工具,适合描述时候处理中具有多个判断,而且每个决策与若干条件有关。(4)判定表:
与判定树类似,也是一种描述加工的图形工具。如果一个加工逻辑有多个条件、多个操作,并且在不同的条件组合下执行不同的操作,那么可以使用判定表来描述。软件需求规格说明书(SRS,Software Requirement Specification)是需求分析阶段得出的最主要的文档。软件需求规格说明书的特点:正确性、无歧义性、完整性、可验证性、一致性、可理解性、可修改性和可追踪性。
软件需求规格说明书的作用:
①便于用户和开发人员进行理解和交流。
②反映出用户问题的结构,可以作为软件开发工作的基础和依据。
③作为确认测试和验收的依据。
结构化设计方法
软件设计是确定系统的物理模型。软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径。
从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。
从工程管理角度来看,软件设计分两步完成:
(1)概要设计将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;
(2)详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。软件设计的基本原理 :
模块化、抽象化、信息隐藏和局部化(实现信息隐蔽依靠对象的封装)、模块独立性。耦合性和内聚性
衡量软件的模块独立性的两个定性的度量标准。
耦合性:是对一个软件结构内不同模块之间互联程度的度量。耦合性的强弱取决于模块间接口的复杂程度。
内聚性:是一个模块内部各个元素间彼此结合的紧密程度的度量。
一个模块的内聚性越强则该模块的模块独立性越强。一个模块与其他模块的耦合性越强则该模块的模块独立性越弱。
在结构程序设计中,模块划分的原则是模块内具有高内聚度,模块间具有低耦合度。
耦合度由低到高:非直接耦合,数据耦合,标记耦合,控制耦合,外部耦合,公共耦合,内容耦合。
内聚性由强到弱:功能内聚,顺序内聚,通信内聚,过程内聚,时间内聚,逻辑内聚,偶然内聚。概要设计的工具:结构图(SC-Structure Chart)也称程序结构图。
在结构图中:
矩形表示模块;
【箭头表示模块间的调用关系】;
带注释的箭头表示模块调用过程中来回传递的信息;
实心圆箭头表示传递控制信息;
空心圆箭心表示传递数据。结构图的基本形式:基本形式、顺序形式、重复形式、选择形式。
结构图有四种模块类型:传入模块、传出模块、变换模块和协调模块。任何软件系统都可以用数据流图表示,典型的数据流类型有两种:变换型和事务型。
设计的准则
(1)提高模块独立性。
(2)模块规模适中。
(3)深度,宽度,扇出和扇入适当。
如果深度过大,则说明有的控制模块可能简单了,如果宽度过大,则说明系统的控制过于集中,扇出过大说明模块过分复杂,需要控制和协调过多的下级模块,应适当加中间层次,扇出过小可以把模块进一步分解成若干小模块,或合并到上级模块中,扇入越大则共享该模块的上级数目越多。好的软件设计结构通常顶层高扇出,中间扇出较少,底层高扇入。
(4)使模块的作用域在该模块的控制域内。
(5)减少模块的接口和界面的复杂性。
(6)设计成单入口,单出口的模块。
(7)设计功能可预测的模块。详细设计常用的设计工具(工程设计工具):图形工具,表格工具和语言工具。
图形工具:
程序流程图:【箭头表示控制流】,方框表示加工步骤,菱形表示逻辑条件。
N-S图(盒图):有五种基本图形。
PAD图(Problem Analysis Diagram):问题分析图,有五种基本图型。
表格工具:判定表。
语言工具:PDL—过程设计语言(结构化的英语和伪码)。
软件测试
- 软件测试的目标:发现程序中的错误。
- 软件测试方法
1、静态测试和动态测试
①静态测试
包括代码检查、静态结构分析、代码质量度量。不实际运行软件,主要通过人工进行。
②动态测试
通过运行软件来检验软件中的动态行为和运行结果的正确性。
2、白盒测试和黑盒测试
①白盒测试
也称为结构测试或逻辑测试,是把程序看成装在一只透明的白盒子里,测试者完全了解程序的结构和处理过程。它根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作。
白盒测试的方法:逻辑覆盖,基本路经测试。
②黑盒测试
也称功能测试或数据驱动测试,是把程序看成一只黑盒子,测试者完全不了解,或不考虑程序的结构和处理过程。它根据规格说明书的功能来设计测试用例,检查程序的功能是否符合规格说明的要求。
黑盒测试的方法:等价划分法,边界值分析法,错误推测法。 - 软件测试过程分4个步骤,即单元测试—>集成测试—>验收测试(确认测试)—>系统测试。
确认测试:检查软件产品是否符合需求定义。 - 程序调试是诊断(而非发现)和改正程序中的错误。
- 主要的调试方法有:
(1)强行排错法; (2)回溯法; (3)原因排除法,包括演绎法,归纳法和二分法。