软件工程复习知识点

软件工程

第一章 软件工程概述

1、四种图

测试用例图:设计一个场景,软件在场景内运行,获得设计的执行结果。
类图:用图形显示模型的静态结构以及之间的关系。
时序图:通过图形描述对象之间发送消息的时间顺序,来显示他们之间的动态协作。
流程图:用图形描述算法和思路等。

2、计算机系统

是指适当的组织在一起的一系列系统元素的集合,这些系统元素互相配合、相互协作,通过对信息的处理而完成预先定义的目标。

计算机系统组成:
软件、硬件、人员、数据库、文档、过程。
计算机分为四个发展阶段:
	1.电子管计算机
	2.晶体管计算机
	3.中小规模集成电路计算机
	4.超大规模集成电路计算机

3、软件危机:

用户和开发人员信息不对等,计算机更新换代等问题引起软件开发目标和结果不匹配等问题。

产生原因:

(1)与软件本身的特点有关
(2)与软件开发与维护的方法不正确有关
1.忽视软件需求分析的重要性
2.认为软件开发就是写程序并设法使之运行(程序、文档和数据等)
3.轻视软件维护
解决办法:促进沟通交流和协作,将目标与结果尽可能匹配,用工程的角度看待软件开发的过程。

4、软件工程:

是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,是解决软件危机的方法方式,将正确的开发经验和技术以及维护方法结合起来。(PS:一套有效的开发软件和维护软件的方法)
IEEE:软件工程是(1)将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中;(2)(1)中所述方法的研究。

软件工程的基本原理 :

(分阶段,监督和控制质量,写文档,现代软件技术应用,高效,软件开发是动态发展的。)
用分阶段的生命周期计划严格管理
坚持进行阶段评审
实行严格的产品控制
采用现代程序设计技术
结果应能清楚地审查
开发小组的人员应该少而精
承认不断改进软件工程实践的必要性

软件工程包括两方面的内容:

1.技术(软件工程方法学):通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。
2.管理:通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。

软件工程方法学3要素:

(1)方法:是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;
(2)工具:是为运用方法而提供的自动的或半自动的软件工程支撑环境
(3)过程:需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

  1. 传统方法学(生命周期方法学或结构化范型)——强调自顶向下
  2. 面向对象方法学——强调主动地多次反复迭代(4个要点:对象,类,继承(关系重用),消息(数据的传递))
    面向对象与传统方法学对比:面向对象是迭代执行而传统的则是从顶向下依次执行不可反复。
    传统方法和面向对象是软件工程的程序设计方法中最本质的思想方法。
    传统方法以过程为中心,强调过程,功能和模块化,适用于数据少而操作多的问题;面向对象以对象为中心,强调对象,适用于以数据为主而操作较少的系统。

5、软件生命周期三个时期八个阶段:

软件定义(问题定义,可行性研究,需求分析);软件开发(概要设计,详细设计,编码和单元测试,综合测试);软件维护(运行维护)

6、软件过程:

开发的步骤,运用方法的顺序(思想)和各种文档资料的书写(思想的总结实现)等。(软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。
为获得高质量的软件产品,软件过程必须科学、有效。)

7、瀑布模型:

(顺序,规范,文档)
优点:采用规范的方法;严格规定每个阶段提交的文档;要求每个阶段交出产品必须经过验证。
a、按照软件工程的生命周期,自上而下依序完成,并且严格的检验每个阶段。
b、特点:自上而下的顺序性和依赖性;代码的推迟实现;严格的文档规范来保证质量。
c、优缺点和适用性:优点是保证开发文档的规范性,有质量保证和正确性的保证。
缺点是缺少实践检验。适用需求相对确定,周期短,技术成熟的软件工程。

8、快速原型模式:

a、无回溯,把大的功能模块细分子集模块,快速建立原型,完成软件开发。
b、本质特点是:快速。快速原型模型不带反馈环,软件产品的开发基本上是线性顺序进行的。

根据原型的不同作用,有三类原型模型:
探索型原型——用于开发的需求分析阶段
实验型原型——主要用于设计阶段
演化型原型——用于及早向用户提交一个原型系统
快速原型模型的运用方式:
抛弃策略——探索型和实验型采用此策略
附加策略——演化型快速原型采用此策略

9、增量模型:

a、把相互作用的模块按照时间顺序依次完成。
b、优点和难点:人员灵活成本低,核心功能可提前产品化,用户使用过程可学习培养。难点是架构复杂,整体和增量模块独立化之间的矛盾,集成难度高。
c、适用范围:开始成本低人员少,增量功能多,需求经常改变的软件开发过程

10、螺旋模型:

a、综合各种模型降低风险。(基本思想:使用原型及其他方法来尽量降低风险。把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。)
b、优点和缺点:风险低,提前预测。软件原型可重用,减少测试,并且维护和开发整合在一起。缺点是需要较高的风险预测经验,迭代复杂时开发周期加长。
c、适用范围:大型高风险项目或内部大型项目。

11、其他模型:

喷泉模型和形式化方法模型,RUP统一过程等。

第二章 可行性研究

1、可行性研究报告

找到问题计算成本(计算效益率)

2、可行性研究目的:

不是解决问题,而是确定问题是否值得去解决。(实质:进行一次大大压缩简化了的系统分析和设计的过程, 也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。)(系统分析员需要具备抽象(得到模型)分析的能力。)

3、可行性包括:

技术,经济,操作,运行和法律等方面的可行性。

4、可行性研究过程(循环):

(1)复查系统规模和目标(问题定义)
(2)研究当前系统
(3)导出新系统的高度逻辑模块(目标系统逻辑研究)
(4)进一步定义问题
在循环完1234后 (5)导出和评价供选择的解法(得出结论,包括剔除不可行的和计算成本效益后保留结论及进度表)
(6)推荐行动方针
(7)草拟开发计划
(8)书写文档提交审查

5、可行性分析报告之系统流程图

图形化系统逻辑模型。

6、数据流图

是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。(对信息的加工处理的图形化描述,包括输入,传输和输出。)
(补充:数据流图中的事务应该具有独占性,防止产生冲突——数据库事务管理的来源)
数据源点/终点:通常是人或部门,可重复表示;
处理:一个处理框可以代表一系列程序、单个程序或程序的一个模块;
数据存储:可以表示一个文件、文件的一部分、数据库的元素或记录的一部分等,数据存储是处于静止状态的数据;
数据流:描绘所有可能的数据流向,而不应该描绘出现某个数据流的条件 ,数据流是处于运动中的数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、数据字典:

数据信息的集合,也就是对数据流图中包含的所有元素的定义的集合。(数据流图和数据字典共同构成系统的逻辑模型)
组成:数据流、数据流分量(即数据元素)、数据存储、处理
记录数据元素的下列信息:一般信息、定义、使用特点、控制信息、分组信息
定义数据方法:对数据指定向下分解
数据组成方式(三种基本类型):
顺序 以确定次序连接两个或多个分量;
选择 从两个或多个可能的元素中选取一个;
重复 即把指定的分量重复零次或多次。
附加类型:可选 即一个分量是可有可无的(重复零次或一次)。
符号: =意思是等价于(或定义为); +意思是和(即,连接两个分量);
[ ]意思是或(即,从方括弧内列出的若干个分量中选择一个),通常用“|”号隔开供选择的分量;
{ }意思是重复(即,重复花括弧内的分量);常常使用上限和下限进一步注释表示重复的花括弧。
( )意思是可选(即,圆括弧里的分量可有可无)。

8、 成本/效益分析的目的

正是要从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确地作出是否投资于这项开发工程的决定。
成本估计法:代码行技术,任务分解技术,自动估计成本技术(成本工具计算软件的使用)

9、成本/效益分析:

三个组成部分——成本估计,运行费用,经济效益;用来计算开发成本效益是否值得进行开发。

10、成本/效益分析方法:

1、货币的时间价值2、投资回收期3、纯收入4、投资回收率

第三章 软件需求分析

(一、重要性)

1、软件需求分析决定软件开发是否成功。(最重要的)

a、是开发人员理解业务的前提条件。
b、项目进度估算的前提条件。
c、是用户和开发人员之间的桥梁,必须双方都确定才进行后续开发。
d、需求分析是基线,是开发的前提条件。(房子的地基)
e、也是软件测试阶段的前提条件。

(前提条件和桥梁)
(软件需求是决定软件开发是否成功的一个关键因素
需求分析可以帮助开发人员真正理解业务问题
需求分析是估算成本和进度的基础
需求分析可以避免建造错误的系统,从而减少不必要的浪费
软件规格说明有助于开发人员与客户在“系统应做什么”问题上达成正式契约
需求分析形成了软件开发的基线,有助于管理软件的演化和变更
软件需求是软件质量的基础,为系统验收测试提供了标准。 )
(项目经理,程序员,测试员都需要看需求分析文档,整个开发过程起点是需求分析文档)(开发人员和用户之间的桥梁,沟通的结果通过需求分析文档确定)(软件需求分析是软件生存期决定性的一步,是软件开发的基础。)

(二、定义和概念)

2、软件需求分析

就是确定用户问题的解决条件或能力,以及达到文档(合同等)规定的内容的条件或能力(定义)
软件需求分析:将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。

3、需求分析的任务

是准确的回答“系统必须做什么?”——用户的核心需求怎么满足。

(三、具体的过程)

4、需求分析基本流程:

a、问题分析
b、功能性需求(业务需求、用户需求、功能需求)
c、非功能性需求(过程需求、产品需求、外部需求)
~以上一般用户看的懂~
d、系统需求分析(结构化语言和UML等形式),面向开发人员,专业人员阅读。

(四、过程中的要求)

5、系统的综合要求:

1。功能需求,2.性能需求,3.可靠性、可用性、安全性、保密性等需 求,4.出错处理需求(容错性),5.接口需求(扩展性),6.约束,7.逆向需求(软件不可 做的),8.将来可能提出的要求(功能预测)

6、分析系统的数据要求:

图形化(层次方框图HIPO和Warnier图)和数据结构规范化

7、逻辑模型:

图形化(系统图,数据流图,E-R,UML等),常用的抽象方法:面向结构化分析方法(SA),面向数据结构(JSP)方法,面向对象分析方法(OOA);注意一般是总分形式(功能,子功能,继续细分)

8、需求获取的关键

在于通过与用户的沟通和交流,收集和理解用户的各项要求。
用户沟通方式:访谈,需求讨论会,问卷调查,现场考察,快速建立软件原型(原型化方法),设计用例等

(五、过程的详细步骤)

9、需求规格说明书(开发人员文档的起点)

内容包括:功能性描述,外部接口(UI,开放接口等),非功能性描述——性能,特性,设计约束,运行环境要求
编写原则如下:(做什么,自然语言,明确的,非主观的)
1、只写做什么,不写怎么做
2、必须说明运行环境(客观条件)
3、明确的,用户和开发人员都可理解的语言描述。
4、详细到功能可编写测试用例进行测试。
5、应该是简短的非模糊的,不能有和,或,等等等词汇。
6、不应该由开发者主观确定功能。(用户需求确定)

10、实体-联系图(E-R图):三要素

数据对象(矩形框),数据对象的属性(椭圆框),关系(菱形框,1:1,1:n,m:n)用直线连接(必考题)

11、数据规范化:

(减少数据冗余,避免出现插入异常或删除异常,简化修改数据的过程)
1、第一范式,在同一表无重复字段
2、第二范式,在同一表无重复字段且有唯一关键字(索引)
3、第三范式,在同一表无重复字段且有唯一关键字,而且非关键字字段之间无联系。

12、层次方框图(H图):

用树状多层次矩形框描述数据的层次结构(功能结构)

13、HIPO图:H图+IPO图

H图描述整个系统的设计结构和模块之间的关系,H图画n层,每层根据经验一般为3—10个模块,层次(n层)按具体情况定;IPO图描述某一特定模块内部的处理过程和输入输出关系。(HIPO图一般有1张H图,多张 IPO图组成 )
IPO图四种属性:输入输出,逻辑功能(业务处理),运行程序和内部数据

14、需求分析验证软件需求正确的四方面:

一致性,完整性,现实性,有效性。
需求规格说明要求:正确性,无二义性,完整性,可验证性,一致性,可修改性和可跟踪性。

第四章 形式化说明技术

1、形式化方法:

数学化方法进行系统规格说明书的描述。
(非形式(自然语言),半形式(数据流图、实体-联系图),形式化(有穷状态机、 Petri网、 Z语言)三种方法应该混合并且综合使用,选择合适的,而不是选择唯一的)

2、有穷状态机:

利用数学化方法描述有限的状态转换集合。(三大元素:(当前)状态、事件、谓词(复杂条件描述)==》下个状态)(主要用于在系统规格说明书中描述系统的状态转换)
有穷状态机包括下述5个部分:状态集J、输入集K、由当前状态和当前输入确定下一个状态(次态)的转换函数T、初始态S和终态集F
PS:思维方式——抽象状态,事件(动作方法),谓词(补充的状态)“状态和事件动作都由特定实体产生”,因此有穷状态机的第一个抽象步骤一定是先找到实体——也就是OOP思想的应用之一了。
PS2:三大抽象元素:对象(实体),状态(属性),事件(方法)

3、Petri网:

用来描述并发活动(多个操作一起执行)的,解决并发系统遇到的定时问题。包括:最基本(P位置,T转换,I输入,O输出)、带权标(M)和带禁止线的Petri网三种。

4、Z语言:

利用数学符号描述4步骤:给定集合,状态定义,初始状态,操作。
PS: ∧且,∨或

第五章 总体设计

总体设计包括概要设计和详细设计

三种阶段划分方式:

工程管理(软件工程),技术角度,OOP角度(从工程管理的角度,可以将软件设计分为概要设计阶段和详细设计阶段。从技术的角度,传统的结构化方法将软件设计划分为体系结构设计、数据设计、接口设计和过程设计4部分。面向对象方法则将软件设计划分为体系结构设计、类设计/数据设计、接口设计和构件级设计4部分)

1、总体设计的目的

就是从宏观角度设计出软件的不同解决方案,提供给用户和开发人员等进行最佳方案的选择。

2、总体设计分两个阶段:

(概要设计)系统功能设计阶段和(详细设计)软件结构设计阶段。

3、总体设计详细过程9步:

多方案设计–筛选合理方案–确定最佳方案–功能设计–软件结构设计–数据库设计–测试设计–文档书写–审查和检查

4、功能设计时设计模块

模块是对各个子功能的描述,通常要独立完成一定的任务,解决用户一部分需求,多个模块整合解决用户全部需求。

5、模块化作用:

软件结构清晰,可测试和调试,易于管理,易于维护更改。
PS:模块化是功能总的划分,一个模块又往往包含多个子功能,在程序中往往每个子功能测试设计一个TestCase,多个子功能又会封装成一个测试集合TestSuite

6、模块化方式

抽象,就是抽出事物的本质但不考虑细节。(只想干什么,不想怎么干)

7、一般抽象过程就是层次分析的过程。

			软件抽象过程就是精化软件的过程,层次过程
				1--可行性分析中整体软件描述
				2--需求分析中软件功能分析(细化子功能)
				3--概要总体设计过渡到详细设计来把抽象的具体化
				4--源代码实现。

8、原则:

a、逐步求精可以让开发者在适当时候解决当前所必须解决的问题。
b、信息隐藏和局部化,类似于OOP中的封装。
c、模块独立要求耦合度要低,内聚度要高。(合衡量不同模块彼此间互相依赖(连接)的紧密程度,内聚衡量一个模块内部各个元素彼此结合的紧密程度)

9、耦合程度:

非直接耦合/完全独立–>数据耦合(系统中至少必须存在)–>控制耦合(往往多余)–>特征耦合–>公共环境耦合–>内容耦合
(设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合)

10、内聚程度:

偶然内聚–逻辑内聚–时间内聚(低内聚)–过程内聚–通信内聚(中内聚)–顺序内聚–功能内聚(高内聚)(ps:设计时力争做到高内聚)

模块化:

1、低耦合和高内聚
2、做到以上要求的经验总结:两种操作分解和合并,应大小适中,复杂度适中,并且有合理的作用域和控制域,以及其他原则

(启发规则:1. 改进软件结构提高模块独立性;2. 模块规模应该适中;3. 深度、宽度、扇出和扇入都应适当;4. 模块的作用域应该在控制域之内;5. 力争降低模块接口的复杂程度;6. 设计单入口单出口的模块;7. 模块功能应该可以预测。)
(行为模式,是动作)
1、模块化应该有分解和合并两种操作:(拆积木,组积木——先拆后组)
a、分解对应OOP中精粒度,对象尽可能的小,甚至最好指包括一个方法函数。(对象越小越容易重用)
PS:缺点就是结构过度复杂,不易维护。
b、内聚对应OOP中功能接口定义功能,封装以及继承多态。
c、MVC为了让耦合度低,接口定义(框架应用DispatcherServlet)为了让内聚性强。
( 是按照不同的角度来强调耦合度和内聚度要适中)
2、模块化应该大小适中(很难有统一的标准)—模块大小
3、模块四大要素:深度(层次),宽度(同一层的模块数,最大的数),扇入(父模块),扇出(子模块)—-—模块复杂度(模块级别)
4、模块有作用域和控制域两个概念———-模块独立性(范围或域)
作用域:关联的模块,被谁(模块)用——一个对象被依赖的对象的范围
控制域:关联的模块,用谁(模块)——一个对象依赖的对象的范围
5、其他原则:接口(例如程序中的方法,包含参数和结果等信息)复杂度(方法级别)要低,单入单出,可预测(确定的)

6、HIPO图:

包括H图层次结构图,IPO图输入处理输出图

7、结构图:

类似于H图的层次结构图,但包括了IPO图中的输入输出。(方框代表一个模块;方框之间的直线表示模块的调用关系;尾部是空心圆箭头表示传递的是数据;尾部实心圆箭头表示传递的是控制信息。菱形选择判断,弧形循环)

8、面向数据流的设计

就是依据流程图设计软件结构,简称SD方法。(需求分析----->概要设计---->详细设计的过程)(面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法)
PS:用户提交的功能需求,实际上就是用户的工作流程或业务流程,此流程一般就先使用流程图描述。

9、数据流即信息流分为变换流和事务流。

a、变换流:外部和内部数据流状态的转换
b、事务流:统一的事务控制器T管理不同事务的调用。

10、变换流步骤:

a、复查需求和流程图正确性,
b、确定变换或事务类型,确定输入输出边界,
c、确定输入中心Ca,变换控制中心Ct,输出中心Ce(完成“第一级分解”)
d、确定Ca子模块,Ct子模块,Ce子模块(完成“第二级分解”注意方向从Ct向外推)
e、依据低耦合高内聚原则进行精华。

11、事务流步骤

类似于变化流,相同的是都有接收(变化中的输入)和发送(变化中的输出),同时接收和输入的方式类似,但发送和输出的结构不同,发送时有调度模块控制后续活动模块的分发。

第六章 详细设计

1、详细设计

就是具体实现的描述,关键技术是结构程序设计。

2、结构程序设计:

只有一个入口一个出口,并且仅有顺序,选择和循环控制语句。

3、常见的语句:

顺序,分支(范围或个例),循环(先判断后循环,先循环语句后判断),

4、人机界面设计

就是软件的交互界面或UI设计

5、三大黄金原则:

1、界面控制用户操作,2、易懂易用,3、多界面主题风格统一(置用户于控制之下。减少用户记忆负担。保持界面一致。)

6、四大问题:

a、系统响应时间:
	1、时间的长短以及友好的进度提示等。(也不易过短)
	2、易变性是指操作的时间不宜变化过大。(用户习惯与预期问题)
b、用户帮助设施:系统内部帮助提示与外部用户手册等。
c、出错信息处理:友好易用,可解决问题
d、命令交互:菜单或键盘命令。

7、用户界面设计的过程

是迭代的,初步设计–>建立原型–>审查(用户评估界面)–>修改设计–>建立原型–>审查…(循环)

8、程序流程图(程序框图):

(程序流程图不易表示数据结构)
a、N-S盒图
在这里插入图片描述
b、PAD图

9、判定表:

能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。可以弥补流程图中不能描述的多重嵌套问题(多条件)

在这里插入图片描述

10、判定树

比判定表更加清晰易读

11、过程设计语言PDL(伪码):

用正文形式表示数据和处理过程的设计工具。
伪代码的基本控制结构:
简单陈述句结构:避免复合语句。
判定结构:IF_THEN_ELSE或CASE_OF结构。
选择结构:WHILE_DO或REPEAT_UNTIL结构。

12、面向数据结构的设计方法:

Jackson图(既能表示数据结构也能表示程序结构)
五个步骤:
(1)分析并确定输入数据和输出数据的逻辑结构,用Jackson图描绘数据结构。
(2)找出输入数据结构和输出数据结构中有对应关系的数据单元
(3)从描绘数据结构的Jackson图导出描绘程序结构的Jackson图
(4)列出所有操作和条件(包括分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置。
(5)用伪码表示程序。

13、程序复杂度度量方式:

a、McCabe方法,流图
b、Halstead方法:根据程序中运算符和操作数的总数来度量程序的复杂程度。

第七章 实现

1、实现:

编码和测试

2、编码:

用程序语言实现软件功能。

3、测试:

编码完成后进行单元测试和综合测试。

4、计算机语言:

机器语言,汇编语言,高级语言

5、高级语言选择标准:

易测试,易调试,独立编译

6、编码基本要求:

标识符有意义符合规范,需要加注释,缩进换行等要规范(视觉组织), 最终要求可读性高。
输入要求:输入要求必须检验合格后才可以应用,格式确定,且有提示信息等。
输出要求:格式化输出,例如报表,并且应该有注释信息,易阅读。
效率要求:在保证程序可读性的条件下,保证程序的运行效率和存储效率。

7、编码风格:

a、注释应语义明确,不应该拿变量名作为注释词汇,应该用变量的实际含义描述。
b、编码关键词应该有空格分格
c、编码应换行缩进
d、变量数据应该有序,例如字母序,如有主次之分,则先主后次。
e、一条一句占一行,分行明确。
f、逻辑清晰简洁,易读。
g、逻辑简单,易读
h、避免使用空的else
i、少用否定(!),多用肯定。

8、软件测试目的

就是发现程序中的问题及错误。
测试基本准则:根据需求分析提前设计测试计划,从小范围到大范围依次测试,不可能穷举测试,并且应该由第三方综合测试。

9、常用测试方法:

黑盒测试(功能测试)和白盒测试(结构测试)(都不能实现穷尽测试)
a、黑盒不关心逻辑结构,只负责功能接口测试(输入和输出结果是否匹配)
(综合测试)(判断开发结果的正确性) (一种确认技术)
b、白盒是在了解逻辑结构的情况下,检查逻辑结构的流程是否正确达到预定要求。
(单元检测)(判断开发过程的正确性)(一种验证技术)

10、测试步骤:

单元测试(模块测试),子系统测试,系统测试(综合测试),验收测试(确认测试),平行测试(老版新版同步运行测试,比较)。
单元–>子系统–>集成–>线下–> 线上
测试阶段输入数据有软件配置(需求设计分析文档等)和测试配置(测试计划和方案)两部分

11、单元测试

利用白盒测试并行测试每个模块的正确性。
a、测试接口(输入输出),数据结构(实体数据),流程(业务和容错)和边界条件(极限值)。
b、审查小组进行代码审查,小组一般由项目经理,设计,开发,测试构成
c、开发单元测试驱动(例如:junit框架开发的TestCase及组合TestSuite)和存根程序(相关模块调用程序)

12、集成测试

就是组装并测试软件系统,找出接口(输入输出)问题,有非渐增式测试方法和渐增式测试方法两种。(集成测试是测试和组装软件的系统化技术,主要目标是发现与接口有关的问题。)
渐增测试分两种集成策略:自顶向下——需要存根程序,自底向上–需要驱动程序。
最佳测试方案是混合策略,自顶向下(存根程序,功能接口测试)和自底向上(驱动程序,核心模块单元测试)混合使用,

13、回归测试:

当调整完成后,重新进行测试的过程。(重新执行已经做过的测试的某个子集,以保证测试过程中的变化没有带来非预期的副作用)

14、确认测试/验收测试:

确认软件结果是否与需求规格说明书中的用户需求一致,进而让软件符合有效性(功能和性能符合预期)要求。(目标是验证软件的有效性)

15、软件测试分类10个:

接口测试,路径测试,功能测试,健壮性测试(容错与恢复),性能测试(绝对,相对),用户界面测试(友好易用),信息安全测试,压力测试,可靠性测试,安装/反安装测试

16、白盒测试:

目的,数据(输出),结果(输出)
a、逻辑覆盖:语句覆盖(不合适),判定覆盖(分支覆盖),条件覆盖, 判定/条件覆盖,条件组合覆盖,点覆盖,边覆盖,路径覆盖
(判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。)
在这里插入图片描述

b、控制结构测试:
a、基本路径测试:计算环形复杂度,按照环形复杂度设计测试路径。
b、循环测试:简单循环,嵌套循环,串接循环。

17、黑盒测试:

功能正确与否,功能缺失等等(着重测试软件功能)
a、等价划分:有效和无效进行归类
b、边界值分析:选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值。
C、错误推测:很大程度上靠自觉和经验进行

18、调试:

在测试发现错误之后排除错误的过程
a、蛮干法(最低效)
b、回溯法:从发现症状的地方开始,人工沿程序的控制流往回追踪分析源程序代码,直到找出错误原因为止
c、原因排除法:对分查找法、归纳法、演绎法

19、软件可靠性:

程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。
软件的可用性:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。
软件可靠性计算公式:
a、可靠性=正常运行时间/(正常运行时间和+故障运行时间和)
b、可靠性=平均无故障时间/(平均无故障时间+平均维修时间)

20、 相关量的符号

ET——测试之前程序中错误总数;
IT——程序长度(机器指令总数);
τ——测试(包括调试)时间;
Ed(τ)——在0至τ期间发现的错误数;
Ec(τ)——在0至τ期间改正的错误数。

21、估计错误总数的方法:

植入错误法:N=n/ns×Ns 分别测试法:B0 =B2/bc×B1
在这里插入图片描述
在这里插入图片描述

第八章 维护

1、软件开发八大阶段:

问题定义,可行性分析,需求分析, 概要设计,详细设计,编码和单元测试,综合测试,运行维护。

2、软件维护:

在软件已经交付使用之后,为保证软件在相当长的时期能够正常运作所进行的软件活动。(维护过程本质上是修改和压缩了的软件定义和开发过程)
四类维护:改正性维护,适应性维护,扩充与完善性维护,预防性维护(提高软件的可维护性、可靠性等)。

3、软件维护的工作量

与软件开发的过程和技术选择有直接关系。
影响维护工作量的因素:系统大小,程序设计语言,系统年龄,数据库技术的应用,先进的软件开发技术等 工作量的数学计算模型:M=P+Ke(c-d)次方
在这里插入图片描述

4、维护过程:

建立维护机构–申明提出维护申请报告的过程及评价的过程(维护报告文档)–为每一个维护申请规定标准的处理步骤(维护处理流程)–维护记录和复审。

5、维护机构构成:

a、维护管理员——维护工程师,b、系统管理员——软件开发工程师,c、变化授权人——项目经理

(每个维护要求都通过维护管理员转交给相应的系统管理员去评价后由变化授权人决定应该进行的活动。)

8、程序的修改步骤:

分析和理解程序,修改程序,重新验证程序
修改程序的副作用3种:修改代码的副作用、修改数据的副作用、文档的副作用

9、软件的可维护性保证

就是软件开发过程中编码的规范要求。
(软件可维护性是指纠正软件系统出现的错误和缺陷,以及为满足新的要求进行修改、扩充或压缩的容易程度)
决定软件可维护性的基本要素:可理解性,可测试性,可修改性,可移植性,可重用性

10、文档是影响软件可维护性的决定因素。

用户文档和系统文档要符合软件工程学要求。
a、用户文档:功能描述,安装文档,使用手册,参考手册,操作员指南(要描述系统功能和使用方法)
b、系统文档:需求分析等(描述系统设计、实现和测试等)(指从问题定义、需求说明到验收测试计划这样一系列和系统实现有关的文档)
选课系统:
a、查询选定科目速度慢。(查询同一张表,并且同一时间人数多)——少数人从数据库查询,多数人从已经查询的结果中获取数据(缓存数据)
b、选定科目后注册科目反应慢。(写一张表,并且同一时间人数多)——异步处理,增加用户后续操作选择。

第9章 面向对象方法学引论

1、面向对象

就是根据需求分析出对象,构造类描述对象,通过继承等重用类,进而实现类或对象之间的通信(对象间的互相调用)

2、四个要点:

对象,类,继承,通信

3、面向对象方法论三个组成部分:

OOA面向对象的分析,OOD面向对象的设计,OOP面向对象的实现(编码)

4、优点:

符合人类思维方式,稳定,可重用,易于开发大型系统(重用),可维护。

5、对象

是具有属性和方法的客观实体(或抽象概念Service,Dao)(将一组数据和使用该数据的一组基本操作或过程封装在一起的实体。)(对象的特点:以数据为中心。 对象是主动的。实现了数据封装。本质上具有并行性。模块独立性好。)

6、类

是描述和封装对象的属性和方法。

7、实例

是由类创建的,就是对象在计算机中映射。(对象是脑中的,实例是计算机模拟的)
(先分析出对象–封装成类–用类创建实例,完成任务,实例就是对象在计算机中的虚拟化)

8、消息

是对象调用方法,发送和接收信息。

9、方法

是函数,就是对象的功能描述(方法描述了对象执行操作的算法,响应消息的方法)

10、属性

就是对象的数据信息。

11、封装

就是封装对象的数据(属性)及操作(方法)。

12、继承

就是子类直接获取父类属性及方法重用。

13、多态:

子类重写父类方法——动态多态。类的重载——静态多态。

14、面向对象建模

就是用面向对象思想完成需求分析建模的过程。

15、OMT

就是面向对象的模型技术,是一种方法学(解决问题的方式和技术)。

16、三种模型:

对象模型:数据结构,动态模型:(控制结构)流程(执行操作),功能模型:运算(数值变化)

17、UML统一建模语言:

统一标准,面向对象,可视化,无关语言(独立于过程),易用

19、对象模型使用UML的类图:

a、类基本结构,类,属性,方法(矩形框包裹的)
b、关系:关联,聚集,继承(泛化),依赖,细化

20、动态模型:

状态图,时序图(顺序图)等(描述系统控制结构。通常用状态图表示)

21、功能模型:

流程图,一个功能的详细操作流程。

22、功能模型和对象模型:

对象构成功能,功能是对象的操作过程。

23、动态模型和对象模型:

对象构成动态模型,动态是对象操作过程描述。

24、动态模型和功能模型:

功能就是动态模型中的具体操作。

第十章 面向对象分析

1、面向对象分析OOA:

抽象用户需求建立需求模型的过程。

2、要求:

要让开发和用户等相关人员容易理解,完成需求规格说明书,没有二义性且具有完善性。

3、核心是:

对象模型(最基本,最重要,最核心)

4、OOA三个子模型:

静态结构——对象模型,
交互次序–动态模型,
数据变换——功能模型

5、五个层次:

主题层,类与对象层,结构层,属性层,服务层(功能方法)

6、OOA的过程:

寻找类与对象–>识别结构–>识别主题–>定义属性–>建立流图(动态模型和功能模型)–>定义服务(方法)

7、OOA过程详解:

a、类与对象分析:先找所有的名词和概念,后筛选,筛选掉冗余,无关,笼统,属性,操作以及实现(具体的过程)。
b、关联关系分析:先找所有的的动态或隐含的关联等,后筛选,筛选掉无关的等关联,绘制关联关系图。
c、主题划分:模块划分,低耦合高内聚,具有良好的独立性(不同主题内对象相互依赖和交互最少原则)。
d、确定属性:分析和选择两个步骤。
e、分析继承:自底向上或自顶向下
f、反复修改:简化类图。
~类图中具有了类名和属性基础,缺少方法设计
g、动态模型建立(状态图和时序图):
	a、利用脚本完成,正常,异常,和特殊三种情况。b、简单设计用户界面,保证正常的输入输出。c、画事件跟踪图-->时序图-->状态图。d、检查。h、功能模型建立(数据流图)——描述功能,确定映射约束和依赖。i、定义服务:从功能中总结出共同的行为方法,和属性操作。

8、三大模型关系:

a、对象模型是功能模型的动作者,数据流,数据存储的结构描述者。
b、动态模型是功能模型的执行次序描述者。
c、功能模型是对象模型的关系描述者
d、动态模型是对象模型的方法描述者
e、功能模型是动态模型的动作描述者和动作补充者。
f、对象模型是动态模型的操作动作执行者的描述者。
  • 43
    点赞
  • 250
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一、软件工程概述 1.软件特点 软件:计算机程序、方法、规则、相关的文档资料,以及计算机程序运行时所需要的数据。 软件是计算机系统中的逻辑成分,具有无形性。其主要内容包括:程序、配置文件、系统 文档、用户文档等。 2.软件分类 (1)按功能划分:系统软件、支撑软件、应用软件。 (2)按工作方式划分:实时处理软件、分时处理软件、交互式软件、批处理软件。 (3)按规模划分:微型软件、小型软件、中型软件、大型软件。 (4)按服务对象划分:通用软件、定制软件。 3.软件发展阶段 (1)程序设计时代(20世纪50年代)。 (2)程序系统时代(20世纪60年代)。 (3)软件工程时代(20世纪70年代起)。 4.软件危机 (1)危机现象:软件开发成本与进度估计不准确,软件产品与用户要求不一致,软件产品质量可靠性差,软件文档不完整不一致,软件产品可维护性差,软件生产率低。 (2)危机原因:软件的不可见性,系统规模庞大,生产工程化程度低,对用户需求关心不 够,对维护不够重视,开发工具自动化程度低。 5.软件工程 软件工程:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必须的相关文件资料。 软件工程是一门关于软件开发与维护的工程学科,它涉及软件生产的各个方面,能够为经济、高效地开发高质量的软件产品提供最有效的支持。 (1)工程方法:结构化方法、JSD方法、面向对象方法。 (2)软件工具:具有自动化特征的软件开发集成支撑环境。 (3)工程过程:在软件工具支持下的一系列工程活动,基本活动是软件定义、软件开发、 软件验证、软件维护。 (4)工程管理:项目规划,项目资源调配,软件产品控制。 (5)工程原则:分阶段生命周期计划,阶段评审制度,严格的产品控制,采用先进的技术, 成果能清楚地审查,开发队伍精练,不断改进工程实践。 (6)工程目标:开发成本较低,软件功能能满足用户需求,软件性能较好,软件可靠性高, 软件易于使用、维护与移植,能按时完成开发任务并及时交付使用。 (7)工程文化:包括工程价值、工程思想和工程行为三个方面的内容。 二、软件工程过程模型 1.软件生命周期 如同任何事物都有一个发生、发展、成熟直至衰亡的全过程一样,软件系统或软件产品也有一个定义、开发、运行维护直至被淘汰这样的全过程,我们把软件将要经历的这个全过程称为软件的生命周期。它包含:软件定义、软件开发、软件运行维护三个时期,并可以细分为可行性研究、项目计划、需求分析、概要设计、详细设计、编码实现与单元测试、系统集成测试、系统确认验证、系统运行与维护等几个阶段。 软件定义期 软件定义是软件项目的早期阶段,主要由软件系统分析人员和用户合作,针对有待开发的软件系统进行分析、规划和规格描述,确定软件是什么,为今后的软件开发做准备。这个时期往往需要分阶段地进行以下几项工作。 1.软件任务立项 软件项目往往开始于任务立项,并需要以“软件任务立项报告”的形式针对项目的名称、性质、目标、意义和规模等作出回答,以此获得对准备着手开发的软件系统的最高层描述。 2.项目可行性分析 在软件任务立项报告被批准以后,接着需要进行项目可行性分析。可行性分析是针对准备进行的软件项目进行的可行性风险评估。因此,需要对准备开发的软件系统提出高层模型,并根据高层模型的特征,从技术可行性、经济可行性和操作可行性这三个方面,以“可行性研究报告”的形式,对项目作出是否值得往下进行的回答,由此决定项 目是否继续进行下去。 3.制定项目计划 在确定项目可以进行以后,接着需要针对项目的开展,从人员、组织、进度、资金、设备等多个方面进行合理的规划,并以“项目开发计划书”的形式提交书面报告。 4.软件需求分析 软件需求分析是软件规格描述的具体化与细节化,是软件定义时期需要达到的目标。 需求分析要求以用户需求为基本依据,从功能、性能、数据、操作等多个方面,对软件系统给出完整、准确、具体的描述,用于确定软件规格。其结果将以“软件需求规格说明书”的形式提交。 在软件项目进行过程中,需求分析是从软件定义到软件开发的最关键步骤,其结论不仅是今后软件开发的基本依据,同时也是今后用户对软件产品进行验收的基本依据。 软件开发期 在对软件规格完成定义以后,接着可以按照“软件需求规格说明书”的要求对软件实施开发,并由此制作出软件产品。这个时期需要分阶段地完成以下几项工作。 1.软件概要设计 概要设计是针对软件系统的结构设计,用于从总体上对软件的构造、接口、全局数据结构和数据环境等给出设计说明,并以“概要设计说明书”的形式提交书面报告,其结果将成为详细设计与系统集成的基本依据。 模块是概要设计时构造软件的基本元素,因此,概要设计中软件也就主要体现在模块的构成与模块接口这两个方面上。结构化设计中的函数、过程,面向对象设计中的类、对象,它们都是模块。概要设计时并不需要说明模块的内部细节,但是需要进行全部的有关它们构造的定义,包括功能特征、数据特征和接口等。 在进行概要设计时,模块的独立性是一个有关质量的重要技术性指标,可以使用模块的内聚、耦合这两个定性参数对模块独立性进行度量。 2.软件详细设计 设计工作的第二步是详细设计,它以概要设计为依据,用于确定软件结构中每个模块的内部细节,为编写程序提供最直接的依据。 详细设计需要从实现每个模块功能的程序算法和模块内部的局部数据结构等细节内容上给出设计说明,并以“详细设计说明书”的形式提交书面报告。 3.编码和单元测试 编码是对软件的实现,一般由程序员完成,并以获得源程序基本模块为目标。 编码必须按照“详细设计说明书”的要求逐个模块地实现。在基于软件工程的软件开发过程中,编码往往只是一项语言转译工作,即把详细设计中的算法描述语言转译成某种适当的高级程序设计语言或汇编语言。 为了方便程序调试,针对基本模块的单元测试也往往和编码结合在一起进行。单元测试也以“详细设计说明书”为依据,用于检验每个基本模块在功能、算法与数据结构上是否符合设计要求。 4.系统集成测试 所谓系统集成也就是根据概要设计中的软件结构,把经过测试的模块,按照某种选定的集成策略,例如渐增集成策略,将系统组装起来。 在组装过程中,需要对整个系统进行集成测试,以确保系统在技术上符合设计要求,在应用上满足需求规格要求。 5.系统确认验证 在完成对系统的集成之后,接着还要对系统进行确认验证。 系统确认验证需要以用户为主体,以需求规格说明书中对软件的定义为依据,由此对软件的各项规格进行逐项地确认,以确保已经完成的软件系统与需求规格的一致性。为了方便用户在系统确认期间能够积极参入,也为了系统在以后的运行过程中能够被用户正确使用,这个时期往往还需要以一定的方式对用户进行必要的培训。 在完成对软件的验收之后,软件系统可以交付用户使用,并需要以“项目开发总结报告”的书面形式对项目进行总结。 软件运行与维护期 软件系统的运行是一个比较长久的过程,跟软件开发机构有关的主要任务是对系统进行经常性的有效维护。 软件的维护过程,也就是修正软件错误,完善软件功能,由此使软件不断进化升级的过程,以使系统更加持久地满足用户的需要。因此,对软件的维护也可以看成为对软件的再一次开发。在这个时期,对软件的维护主要涉及三个方面的任务,即改正性维护、适应性维护和完善性维护。 2.瀑布模型 瀑布模型诞生于20世纪70年代,是最经典的并获得最广泛应用的软件过程模型。瀑布模型中的“瀑布”是对这个模型的形象表达,即山顶倾泻下来的水,自顶向下、逐层细化。 (1)特点:线性化模型、阶段具有里程碑特征、基于文档的驱动、阶段评审机制。 (2)作用:为软件项目按规程管理提供了便利,为其他过程模型的推出提供了一个良好的 拓展平台。 (3)局限性:主要适合于需求明确且无大的需求变更的软件开发,但不适合分析初期需求 模糊的项目。 3.原型模型 (1)快速原型方法:是原型模型在软件分析、设计阶段的应用,用来解决用户对软件系统在需求上的模糊认识,或用来试探某种设计是否能够获得预期结果。 (2)原型进化模型:针对有待开发的软件系统,先开发一个原型给用户使用,然后根据用 户的使用意见,对原型不断修改,使它逐步接近,并最终到达开发目标。 4.增量模型 增量模型结合了瀑布模型与原型进化模型的优点。在整体上按照瀑布模型的流程实施开发,以方便对项目的管理。但在软件的实际创建中,则将软件系统按功能分解为许多增量构件逐个地创建与交付,直到全部构件创建完毕,并都被集成到系统之中交付使用。 比较瀑布模型、原型进化模型,增量模型具有非常显著的优越性。但增量模型对软件设计有更高的技术要求。 5.螺旋模型 螺旋模型是一种引入了风险分析与规避机制的过程模型,是瀑布模型、快速原型方法和风险分析方法的有机结合。其基本方法是,在各个阶段创建原型进行项目试验,以降低各个阶段可能遇到的项目风险。 6.喷泉模型 喷泉模型是专门针对面向对象软件开发方法而提出的。“喷泉”一词用于形象地表达面向对象软件开发过程中的迭代和无缝过渡。 7.组件复用模型 组件复用方法是最近几年发展起来的先进的软件复用技术,在基于组件复用的软件开发中,软件由组件装配而成,这就如同用标准零件装配汽车一样。因此,组件复用模型能够有效地提高软件生产率。 三、项目分析与规划 1.计算机系统分析 (1)计算机系统 计算机系统是一个非常复杂并具有智能特性的开发系统,包括:硬件系统、软件系统、网络通信系统、人工操作系统等诸多子系统。 (2)系统分析 系统分析是对软件项目的高层分析,需要获取的是有关系统的框架描述,并需要使系统从它所处的环境中分离出来,为划分系统边界与确定系统构架提供依据。 (3)系统分析模型 分析模型是指采用作图方式对系统进行直观的描述。系统前期分析过程中经常使用的图形模型有系统框架图和系统流程图。其中,系统框架图用于说明系统的基本构造框架,而系统流程图则用于表现系统的基本加工流程。 2.项目可行性分析 (1)意义 •以少量的费用对项目能否实施尽早作出决断。 •根据项目条件限制,对系统的体系构造、工作模式等作出高层抉择。 •其结果可作为一个高层框架被用于需求分析之中。 (2)分析内容 •技术可行性:从技术与技术资源这两个方面作出可行性评估。 •经济可行性:从项目投资和经济效益这两个方面作出可行性评估。 •应用可行性:从法律法规、用户操作规程等方面作出可行性评估。 (3)分析过程 •建立系统模型。 •进行可行性评估。 •撰写可行性研究报告。 3.项目成本效益分析 (1)项目成本估算方法:基于软件规模的成本估算;基于任务分解的成本估算。 (2)项目效益分析指标:纯收入;投资回收期;投资回收率。 4.项目规划 (1)项目开发计划 项目开发计划涉及的内容包括: •开发团队的组织结构,人员组成与分工。 •项目成本预算。 •项目对硬件、软件的资源需求。 •项目任务分解和每项的任务里程碑标志。 •基于里程碑的进度计划和人员配备计划。 •项目风险计划。 •项目监督计划。 (2)项目进度表 项目进度是基于里程碑制定的,可以使用进度图表来描述项目进度。甘特图表是一种常用的项目进度图表,可以直观地描述项目任务的活动分解,以及活动之间的依赖关系、资源配置情况、各项活动的进展情况等。 四、软件需求分析 1.需求分析任务 (1)用户需求 用户需求是用户关于软件的一系列意图、想法的集中体现,是用户关于软件的外界特征的规格表述。 (2)系统需求 系统需求是比用户需求更具有技术特性的需求陈述,是提供给开发者或用户方技术人员阅读的,并将作为软件开发人员设计系统的起点与基本依据。主要包括:功能、数据、性能、安全等诸多方面的需求问题。 2.需求分析过程 需求分析是对软件系统的后期分析,需要进行的活动包括:分析用户需求、建立需求原型、分析系统需求和进行需求验证等。 3.用户需求获取 (1)用户调查是最基本的用户需求信息收集方法,比较常用的调查方法包括:访谈用户、开座谈会、问卷调查、跟班作业、收集用户资料。 (2)需求原型可被用来解决用户对软件系统在需求认识上的不确定性。一般情况下,开发人员将软件系统中最能够被用户直接感受的那一部分东西构造成为原型。例如,界面、报表或数据查询结果。 4.结构化分析建模 所谓模型,就是对问题所做的一种符号抽象。可以把模型看作为一种思维工具,利用这种工具可以把问题规范地表示出来。主要的分析模型包括: (1)功能层次模型。它使用矩形来表示系统中的子系统或功能模块,使用树形连线结构来表达系统所具有的功能层级关系。 (2)数据流模型。用于描述系统对数据的加工过程,其图形符号是一些具有抽象意义的逻辑符号,主要的图形符号包括:数据接口、数据流、数据存储和数据处理。可以依靠数据流图来实现从用户需求到系统需求的过渡。结构化分析就是基于数据流的细化实现的,它是结构化分析方法的关键。 (3)数据关系模型。也称为ER图,是应用最广泛的数据库建模工具。需要通过数据实体、数据关系和数据属性这三类图形元素建立数据关系模型。 (4)系统状态模型。通过系统的外部事件、内部状态为基本元素来描绘系统的工作流程,这种建模方式比较适合于描述一些依赖于外部事件驱动的实时系统。 5.需求有效性验证 需求有效性验证是指对已经产生的需求结论所要进行的检查与评价。一般需要对需求文档草稿从有效性、一致性、完整性、现实性、可检验性等几个方面进行有效性验证。比较常用的需求有效性验证方法与工具包括:需求评审、需求原型评价和基于CASE工具的需求一致性分析。 6.需求规格定义 需求规格说明书是需求分析阶段需要交付的基本文档,将成为开发者进行软件设计和用户进行软件验证的基本依据,涉及引言、术语定义、用户需求、系统体系结构、系统需求等有关软件需求及其规格的诸多描述与定义。 五、软件概要设计 1.设计过程与任务 概要设计中首先需要进行的是系统构架设计,然后是软件结构、数据结构等方面的设计。主要有以下几个方面的设计任务:制定规范、系统构架设计、软件结构设计、公共数据结构设计、安全性设计、故障处理设计、可维护性设计、编写文档、设计评审。 2.系统构架设计 (1)集中式结构 集中式系统由一台计算机主机和多个终端设备组成。其具有非常好的工作稳定性和安全保密性。但系统建设费用、运行费用比较高,灵活性不够好,结构不便于扩充。 (2)客户机/服务器结构 客户机/服务器结构依靠网络将计算任务分布到许多台不同的计算机上,但通过其中的服务器计算机提供集中式服务。其优越性是结构灵活、便于系统逐步扩充。 (3)多层客户机/服务器结构 •两层结构:将信息表示与应用逻辑处理都放在了客户机上,服务器只需要管理数据库事务。 •三层结构:将两层结构的客户机上的容易发生变化的应用逻辑部分提取出来,并放到一个专门的“应用服务器”上。 •B/S结构:是Web技术与客户机/服务器结构的结合。其优点是不需要对客户机进行专门的维护。 (4)组件对象 分布式结构通过组件进行计算分布。它依赖于对象中间件建立,具有灵活的构架,系统伸缩性好,能够给系统的功能调整与扩充带来便利。 3.软件结构设计 软件结构设计是对组成系统的各个子系统的进一步分解与规划。主要设计内容有:确定模块元素、定义模块功能、定义模块接口、确定模块调用与返回、进行结构优化。 (1)模块概念 •模块化:使用构造程序,可使软件问题简化。 •抽象化:概要设计中的模块被看成是一个抽象化的功能黑盒子。 •信息隐蔽:每个模块的内部实现细节对于其他模块来说是隐蔽的。 (2)模块的独立性 软件系统中每个模块都只涉及自己特定的子功能,并且接口简单,与软件中其他模块没有过多的联系。一般采用耦合和内聚这两个定性的技术指标进行度量。 耦合用来反映模块相互关联程度,模块间连接越紧密,耦合性就越高。内聚用来反映模块内元素的结合程度,模块内元素结合越紧密,则内聚性就越高。为提高模块独立性,要求模块高内聚、低耦合。 耦合形式由低至高是:非直接耦合、数据耦合、控制耦合、公共耦合、内容耦合。 内聚形式由低至高是:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。 (3)设计建模 •软件结构图:由Yourdon于20世纪70年代提出,被广泛应用于软件结构设计中,能够有效说明软件中模块之间的调用与通信。 •HIPO图:由美国IBM公司推出。其中,H图用于描述软件的分层调用关系,作用类似软 件结构图,IPO图用于说明描述模块的输入—处理—输出特征。 (4)软件结构优化 主要优化设计原则有:使模块功能完整、使模块大小适中、使模块功能可预测、尽量降低模块接口的复杂程度、使模块作用范围限制在其控制范围之内、模块布局合理。 4.面向数据流的结构设计 (1)变换分析 软件结构由输入、变换和输出三个部分组成。 (2)事务分析 软件结构由接收事务与事务活动两个部分组成。 (3)混合流分析与设计 软件系统是变换流与事务流的混合。对于这样的系统,通常采用变换分析为主、事务分析为辅的方式进行软件结构设计。5.数据库结构设计 (1)逻辑结构设计 •设计数据表 •规范数据表 •关联数据表 •设计数据视图 (2)物理结构设计 •数据存储结构 •数据索引与聚集 •数据完整性 六、面向对象分析与设计 1.面向对象方法学 面向对象技术涉及面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程实现(OOP)这三个方面的问题。 (1)基本概念 •类:面向对象模块单位,作用是为创建对象实例提供模板。其具有数据与行为这两个方面的特征,并需要通过属性、操作和方法进行描述。 •属性、操作与方法:类具有数据与行为这两个方面的特征,并需要通过属性、操作和方法进行描述。 •类的继承性:指上级父类能够把自己的属性、操作传递给下级子类。 •类的多态性:子类对象可以像父类对象那样使用,它们可以共享一个操作名,然而却有不同的实现方法。 •对象:对象是类模块实例化的结果。 •消息:指对象之间的通信。 (2)优越性 •跟现实世界更加接近 •可使软件系统结构更加稳定 •软件具有更好的可重用性 •软件更加便于维护与扩充 2.面向对象分析建模 面向对象分析建模需要建立的是软件系统的用户领域模型,需要从系统业务流程、组织结构和行为过程等几个方面对系统进行分析。 (1)用例图 用例图涉及参入者、用例等元素,用于描述用户与系统之间的交互关系,说明系统所具有的业务能力和业务流程,能够方便开发者理解用户领域的专有术语和业务内容。 (2)活动图 活动图是一种行为模型,主要用于描述用例图中用例的内部活动状态与活动转换过程,以获得对用例的交互行为与工作流程的细节说明。涉及活动状态、活动转换等元素。 (3)分析类图 建立类图的概念模型,描述体现现实世界中数据构造的实体类及其它们之间的关系。 (4)序列图 以用例图中的用例为描述单位,以类图中的类为对象依据,以活动图中的活动转换为行为依据,建立与时间顺序有关的用例中对象之间的交互模型。 3.面向对象设计建模 面向对象设计建模需要把分析阶段的结果扩展成技术解决方案,需要建立的是软件系统的技术构造模型。 (1)设计类图 设计类图中的类是构造系统的基本模块单位,需要在分析类图基础上进行更加完整的面向设计的描述。除了实体类,设计类图中还需要考虑用于向外提供操作接口的边界类和用于实现内部协调的控制类。 (2)协作图 描述对象交互时的链接关系和基于链接而产生的消息通信及其操作接口。 (3)状态图 描述一个特定对象的所有可能的状态以及引起状态转换的事件。 (4)构件图 描述组成系统的物理构件及其它们之间的关系。构件之间关系主要是依赖关系。 (5)部署图 描述系统运行时的物理架构,涉及物理节点、节点之间的连接关系以及部署到各个节点上的构件的实例等。 七、用户界面设计 1.图形用户界面(GUI)所具有的特点 (1)比较容易学习和使用。 (2)用户可利用多屏幕(窗口)与系统进行交互,并可通过任务窗方便地由一个任务转换到另一个任务。 (3)可以实现快速、全屏的交互,能很快在屏幕上的任何地方进行操作。 图形用户界面设计已不是设计人员能够独立解决的了,需要邀请图形设计人员、系统分析人员、系统设计人员、程序员、用户应用领域方面的专家和社会行为学方面的专家以及最终用户的共同参入。 2.基于原型的用户界面设计 用户界面设计是一个迭代的过程,其基本过程包括三个步骤: (1)建立界面需求规格模型。 (2)以界面需求模型为依据创建界面原型。 (3)评价界面原型。 3.界面设计中需要考虑的因素 用户界面设计将会受诸多用户因素的影响,并主要体现在以下几个方面: (1)用户工作环境与工作习惯。 (2)用户操作定势。 (3)界面一致性。 (4)界面动作感。 (5)界面信息反馈。 (6)个性化。 (7)容错性。 (8)审美性与可用性。 4.界面类型 在基于图形界面的应用系统中,用户界面一般由若干个窗体组成,其窗体类型包括: (1)单窗体界面(SDI)。其特点是应用程序一次只能打开一个独立窗体。 (2)多窗体界面(MDI)。由一个MDI主窗体和多个MDI子窗体组成。其中MDI主窗体如同容器用来装载MDI子窗体,而MDI子窗体则被限制于MDI主窗体之内,不能独立存在。诸多公共操作都被放置在MDI主窗体上。 (3)辅助窗体。通常也叫做对话框,它是对主窗体的补充,用于扩展主窗体的功能。辅助窗体的种类主要有:登录窗、消息窗、设置窗等。 (4)Web页面。当采用到基于Web的B/S结构时,系统中的某个Web页面可能会被作为Web应用的进入点,则它可以作为一个特殊的主窗体看待。 5.界面功能特征 在进行用户界面设计时,需要考虑界面的功能问题。大体上说来,用户界面的功能主要体现在以下方面: (1)用户交互。指用户与计算机系统之间的信息交流。 (2)信息表示。指系统提供给用户信息,信息可以采用文本形式表示,也可以采用图形形式表示。 (3)用户联机支持。指系统给用户提供的应用指导。 6.界面导航设计 界面导航所指的是如何由一个界面转换到另一个界面。可以使用活动图来描述界面之间的转换关系,其中活动图中的每一个活动状态可用来表示系统中的每一个界面。 八、程序算法设计与编码 1.结构化程序特征 结构化程序的基本特征是程序的任何位置是单入口、单出口的。因此,结构化程序设计中,GOTO语句的使用受到了限制,并且程序控制也要求采用结构化的控制结构,以确保程序是单入口和单出口的。 2.程序算法设计工具 (1)程序流程图 程序流程图又称为程序框图,其历史悠久、应用广泛,从20世纪40年代末到70年代中期,它一直是程序算法设计的主要工具。程序流程图的主要优点是能够非常直观的描述程序的控制流程。但是,传统的程序流程图却是一种非结构化的程序算法设计工具。 (2)N-S图 为了满足结构化程序设计对算法设计工具的需要,Nassi和Shneiderman推出了盒图,又称为N-S图。它是一种严格符合结构化程序设计原则的图形描述工具。 N-S图的基本特点是通过矩形框描述模块内部程序的各个功能区域,并通过由外到内的矩形框嵌套表示程序的多层控制嵌套。 (3)PAD图 PAD是问题分析图(ProblemAnalysisDiagram)的英文缩写,由日本日立公司首先推出,并得到了广泛的应用。它是符合结构化程序设计原则的图形描述工具。 PAD图的基本特点是使用二维树形结构表示程序的控制流程,从上至下是程序进程方向,从左至右是程序控制嵌套关系。 (4)PDL语言 PDL语言也称为伪码,或过程设计语言,它一般是某种高级语言稍加改造后的产物,可以使用普通的正文编辑软件或文字处理系统进行PDL的书写和编辑。 PDL语言的语法规则分外部语法和内部语法。其中,外部语法用于定义程序中的控制结构和数据结构,内部语法则用于表示程序中的加工计算或条件。 (5)判定表 判定表是算法设计辅助工具,专门用于对复杂的条件组合关系及其对应的动作行为等给出更加清晰的说明,能够简洁而又无歧义地描述涉及条件判断的处理规则。 3.Jackson程序设计方法 1983年法国科学家Jackson提出了一种以软件中的数据结构为基本依据的程序算法设计方法。在以数据处理为主要内容的信息系统开发中,具有一定的应用价值。 Jackson程序设计方法的基本设计途径是通过分析输入数据与输出数据的层次结构,由此对程序算法的层次结构进行推论。 为了方便由数据结构映射出程序结构,Jackson将软件系统中所遇到的数据分为顺序、选择和重复三种结构,并使用图形方式加以表示。Jackson程序结构也是顺序、选择和重复这三种结构,并可以使用与数据结构相同的图形符号表示。 4.程序编码 在完成程序算法设计之后,接着需要编码。 (1)编程语言种类 •低级语言:包括第一代机器语言与汇编语言,它们是直接面向机器的语言。 •高级语言:指面向问题求解过程的语言,使用了与人的思维体系更加接近的概念和符号,一般不依赖于实现这种语言的计算机,具有较好的可移植性。 •第四代语言(4GL):指一些面向问题的高级语言,第四代语言是在更高一级抽象的层次上表示数据与猜想结构,它不需要规定程序算法细节。 (2)选择编程语言的依据 在对软件系统进行编码之前,必须抉择使用什么样的程序设计语言实现这个软件系统。在选择编程语言时往往需要考虑诸多方面的因素,例如软件项目的应用领域、软件问题的算法复杂性、软件的工作环境、软件在性能上的需要、软件中数据结构的复杂性、软件开发人员的知识水平和心理因素等。 (3)编程风格与质量 编程风格是编写程序时需要遵守的一些规则。在衡量程序质量时,源程序代码的逻辑简明清晰、易读易懂是一个重要因素,而这些都与编程风格有着直接的关系。 (4)影响程序工作效率的因素 一般说来,程序工作效率会受到处理器计算速度、存储器存储容量和输入输出速度等几个方面因素的影响,并与程序设计语言、操作系统、硬件环境等有着直接关系。因此,在考虑程序工作效率时,需要将诸多因素综合起来分析。 5.程序算法复杂性度量 程序算法复杂性主要指模块内程序的复杂性。比较著名的程序算法复杂性度量方法是McCabe度量法,其对程序复杂性的度量采用的是程序的环形复杂度,计算公式是: V(G)=m–n+p 其中,V(G)是程序有向图G中的环数,m是程序有向图G中的弧数,n是程序有向图G中的节点数,p是程序有向图G中分离部分的数目。 九、软件测试 1.测试目标 尽力发现软件中的错误,而不是为了验证软件的正确性。 2.测试方法 (1)黑盒测试:基于程序的外部功能规格而进行的测试,又称为功能测试。 (2)白盒测试:基于程序的内部结构与处理过程而进行的测试,又称为结构测试。 3.单元测试 单元测试的对象是单元模块,一般以白盒测试为主,以黑盒测试为辅。测试内容包括模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试。 单元测试通常在编码阶段进行。测试时需要用到辅助模块,如驱动模块、桩模块。 4.集成测试 系统集成时主要有非渐增组装测试和渐增组装测试这两种方法: (1)非渐增组装测试:一种一次性地进行系统组装的方法。 (2)渐增组装测试:一种将单元模块的确认测试与集成测试结合在一起的测试方法,它比非渐增组装测试是具有更大的优越性。可以自顶向下渐增集成,也可以自底向上渐增集成。5.确认测试 确认测试又称有效性测试,其任务是验证软件的功能、性能及其他特性是否与用户的要求一致。在进行确认测试时,可以采用Alpha测试或Beta测试。其中,Alpha测试是在开发环境下由用户进行的测试,而Beta测试则是由软件用户在软件实际使用环境下进行的测试。 6.测试用例设计 设计测试用例就是为测试准备测试数据。由于测试用例不同,发现程序错误的能力也就不同,为了提高测试效率降低测试成本,应该选用高效的测试用例。 白盒测试用例设计主要采用逻辑覆盖,包括语句覆盖、判定覆盖、条件覆盖、判定—条件覆盖、条件组合覆盖和路径覆盖。 黑盒测试用例设计包括等价划分、边界值分析和错误推测等几种方法。 7.面向对象测试 (1)面向对象单元测试 不能孤立地测试单个操作,而应该把操作作为类的一部分来测试。 (2)面向对象集成测试 •基于线程的测试。 •基于使用的测试。 (3)面向对象确认测试 研究系统的用例模型和活动模型,设计出确认测试时的用户操作脚本。 8.软件调试 软件调试也叫做排错,涉及诊断与排错这两个步骤。但调试的关键是诊断。 常用的调试方法有:输出存储器内容、在程序中插入输出语句、使用自动调式工具。 常用的调试策略有:试探法、回溯法、对分查找法、归纳法、演绎法。 9.自动测试工具 常用的自动测试工具有:测试数据生成程序、动态分析程序、静态分析程序、模块测试、程序。 10.软件可靠性评估 软件可靠性的定义是:程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。 软件可用性的定义是:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。为了方便可用性的计算,一般使用稳态可用性对系统进行可用性评价。 系统平均无故障时间的估算式是:MTTF=1/(K(ET/IT–Ec(t)/IT)) 十、软件维护 1.软件维护定义 软件维护是在软件运行维护阶段,为了改正软件错误或为了满足用户新的应用需要,而对软件进行改错、变更或进化的过程。 维护任务一般分为:改正性维护、适应性维护、完善性维护和预防性维护。 2.影响软件维护工作的因素 主要因素有:系统大小、程序设计语言、系统文档和系统年龄等。 3.非结构化维护 没有按照软件工程原则实施软件开发,以致和软件配套的一系列文档没有建立起来,保留下来的可能只有源程序。 4.结构化维护 建立在严格按照软件工程原则实施软件开发基础上,因此各个阶段的文档完整,能够比较全面地说明软件的功能、性能、软件结构、数据结构、系统接口和设计约束等。 5.软件维护的代价 软件维护代价包括有形与无形这两个方面的代价。其中,有形代价是指软件维护的直接费用支出,无形代价则指其他非直接的维护代价。 6.软件可维护性 软件可维护性是指维护人员理解、改正、改动和改进这个软件的难易程度。 可以从系统的可理解性、可靠性、可测试性、可修改性、可移植性、运行效率和可使用性这七个方面对软件的可维护性进行综合评估。 7.软件维护的实施 软件维护实施过程中,一般涉及以下几个问题:维护机构、维护申请报告、软件维护工作流程、维护记录和维护评价。 8.对老化系统的维护 老化系统是指一些使用早期程序设计语言开发的系统。为了能够有效地对老化系统进维 护,Yourdon提出了以下的几点维护建议: (1)尽可能得到更多的背景信息。 (2)力图熟悉程序的所有控制流程。 (3)评价现有文档的可用性。 (4)充分利用交叉引用信息。 (5)必须非常谨慎地对程序进行修改。 (6)在删除某些代码时,要确认代码确实不再使用。 (7)不要试图共享程序已有的临时变量或工作区。 (8)保持详细的维护活动和维护结果记录。 (9)如果程序结构混乱,修改受到干扰,可抛弃程序重新编写。 (10)插入出错检验。 9.逆向工程与再工程 逆向工程是通过源程序,甚至是目标程序,由此导出设计模型、分析模型的过程。可以把逆向工程描述为一个魔术管道,从管道一端流入的是一些非结构化的无文档的源代码或目标代码,而从管道另一端流出的则是计算机软件的分析、设计文档。 逆向工程被用到了软件维护上,通过从老化系统的源代码中提取程序流程设计、系统结构设计,甚至是数据流图,给老化系统的维护带来方便。 当逆向工程被用于重新构造或重新生成老化系统时,这个过程就叫做再工程。再工程不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来改建或重建现有的系统。 10.软件配置管理 配置管理包括软件配置标识、软件变更控制和软件版本控制等方面的内容。 当对软件进行维护时,软件产品发生了变化,这一系列的改变,必须在软件配置中体现出来,以防止因为维护所产生的变更给软件带来混乱。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值