@smartZhou
2018-12-24T02:47:53.000000Z
字数 4804
阅读 159
软件工程
一.软件危机和软件工程
1.1什么是软件危机?它有哪些典型表现?
答:软件危机是指在计算机软件的开发与维护过程中所遇到的一系列的严重问题。它包括两方面:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。软件危机的典型表现:1)对软件开发成本和进度的估计常常很不准确。2)用户对"已完成的"软件系统不满意的现象经常发生。3)软件产品的质量的往往靠不住。4)软件常常是不可维护的。5)软件通常没有适当的文档资料。6)软件成本在计算机系统总成本中所占的比例逐年上升。7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
1.2为什么会出现软件危机?
产生软件危机的原因:一方面与软件本身的特点有关;另一方面也和软件开发与维护的方法不正确有关。软件规模庞大,而且程序复杂性将随着程序规模的增加而呈现指数上升。软件本身独有的特点确实会给开发和维护带来一些客观困难。忽视软件需求分析的重要性,认为软件开发就是写程序,并设法使之运行,轻视软件等。软件开发的不同阶段进行修改需要付出的代价是很不相同的。
1.3.什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机?
软件工程是指导计算机软件开发和维护的一门工程学科。软件工程是:1)把系统的,规范的,可度量的途径应用于软件开发,运行和维护过程,也就是把工程应用于软件;2)研究1)中提到的途径。
二.软件生命周期
2.1软件生命周期六个阶段的名词解释?
软件生命周期是由软件定义,软件开发和运行维护(软件维护)3个时期组成。软件定义通常分为3个阶段:问题定义,可行性研究,需求分析。软件开发通常分为4个阶段:总体设计,详细设计,编码和单元测试,综合测试。维护时期的主要任务是使软件持久地满足用户的需要。1.问题定义阶段必须回答的关键问题是:"要解决的问题是什么?"如果不知道问题是什么就试图解决这个问题,显然是盲目的,只会白白浪费时间和金钱,最终的结果是毫无意义的。2.可行性研究是目的"不是解决问题,而是确定问题是否值得去解决"。可行性研的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。
2.2需求分析中了解软件要做什么?
为什么要进行需要分析?为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件,不论人们把设计和编码工作做得如何出色,不能真正满足用户需求的程序只会令用户失望,给开发都带来烦恼。
2.3总体设计和详细设计阶段如何完成?
总体设计通常由两个主要阶段组成:1)系统设计阶段 2)结构设计阶段系统设计阶段:确定系统的具体实现方案。结构设计阶段: 确定软件结构。典型的总体设计过程包括下述9个步骤:1)设想供选择的方案。2)选取合理的方案3)推荐最佳方案4)功能分解5)设计软件结构6)设计数据库7)制定测试计划8)书写文档9)审查和复审
2.4.总体设计之流程图绘制
例题:研究下面的伪代码程序:
LOOP:Set I to (START+FINISH)/2If TABLE(I)=ITEM goto FOUNDIf TABLE(I)<ITEM Set START to (I+1)If TABLE(I)>ITEM Set FINISH to (I-1)If (FINISH-START)>1 goto LOOPIf TABLE(START)=ITEM goto FOUNDIf TABLE(FINISH)=ITEM goto FOUNDSet FLAG to 0goto DONEFOUND: Set FLAG to 1DONE:Exit
要求:
(1)画出程序流程图
(2)程序是结构化的吗?说明理由。
(3)若程序是非结构化的,设计一个等价的结构化程序并且画出程序流程图。
(4)此程序的功能是什么?它完成预定功能有什么隐含的前提条件吗?
2.5软件测试的目的?测试方法?
软件测试是为了发现程序中的错误而执行程序的过程。如果已经知道了产品应该具有的功能,可以通过测试来检测是否每个功能都能正常使用;如果知道产品软件工程包含3个要素:方法,工具和过程。
2.6耦合和内聚的定义?
1)耦合是对一个软件结构内不同模块之间互连程序的度量。耦合强弱取决于模块间接口的复杂程序,进入或访问一个模块的点,以及通过接口的数据。2)内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展,简单的说,理想内聚的模块只做一件事情。3)模块内的高内聚往往意味着模块间的松耦合。4)耦合衡量不同模块彼此间互相依赖(连接)的紧密程序;5)内聚衡量一个模块内部各个元素彼此结合的紧密程序;6)
三.章节分析
3.1可行性研究重要知识点
目的:可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否值得去解决。可行性研究的目的不是解决问题,而是确定问题是否值得去解决。
技术可行性 使用现有的技术能实现这个系统吗?经济可行性 这个系统的经济效益能超过它的开发成本吗?操作可行性 系统的操作方式在这个用户组织内行得通吗?
数据流图(DFD)是一种图形化技术,它描述信息流和数据从输入移动到输出的过程中所经受的变换。
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义信息。
一般来说,数据字典应该由对下列4类元素的定义组成:
数据流数据流分量(即数据元素)数据存储处理
3.2需求分析的重要知识点
目的:为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件,不论人们把设计和编码工作做的如何出色,不能真正满足用户需求的程序只会令用户失望,使开发者带来烦恼。
基本任务准确地回答"系统必须做什么"这个问题。
需要分析的任务不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些工作,也就是对目标系统提出完整,准确,清晰,具体的要求。
3.3形式化说明技术的重要知识点
定义所谓形式化方法,是描述系统性质的基于数学的技术,也就是说,如果一种方法有坚定的数学基础,那么它就是形式化的。
非形式化的缺点用自然语言书写的系统规格说明书,可能存在矛盾,二义性,含糊性,不完整性及抽象层次混乱等问题。
所谓矛盾就是指一组相互冲突的陈述。二义性是指读者可以用不同方式理解的陈述。抽象层次混乱是指在非常抽象的陈述中混进了一些关于细节的低层次陈述。这个的规格说明书使得读者很难了解系统的整体功能结构。
3.4总体设计的重要知识点
基本目的
就是回答"概括地说,系统应该如何实现"这个问题。通过这个阶段的工作将划分出组成系统的物理元素----程序,文件,数据库,人工过程和文档等。总体设计的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
两个主要阶段
系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构。
抽象
把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象,或者说抽象就是抽出事物的本质特征而暂时不考虑它们的细节。
逐步求精
为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
耦合
耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度。
种类
数据耦合 控制耦合 特征耦合 环境耦合 内容耦合
模块间的耦合程度强烈影响着系统的可理解性,可测试性,可靠性,可维护性。
数据耦合
如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。
控制耦合
如果传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现),这种耦合称为控制耦合。
特征耦合
当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了循特征耦合。
环境耦合
当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。
内容耦合
最高程度的耦合内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合。
一个模块访问另一个模块的内部数据。一个模块不通过正常入口而转到另一个模块的内部。两个模块有一部分程序代码重叠(汇编)一个模块有多个入口(这意味着一个模块有几种功能)
内聚
内聚标志着一个模块内各个元素彼此结合的紧密程序,它是信息隐藏和局部化概念的自然扩展。
分类
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 逻辑内聚 偶然内聚
- 低内聚有如下几类:
偶然内聚
如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。
逻辑内聚
如果一个模块完成任务在逻辑上属于相同或相似的一类(例如一个模块产生各种类型的全部输出),则称为逻辑内聚
时间内聚
如果一个模块包含的任务必须在同一段时间内执行(例如:模块完成各种初始化工作),就叫时间内聚。
3.6 详细设计的重要知识点
根本目标
详细设计的根本目标是确定应该怎样具体地实现所要求的系统。
任务
详细设计阶段的任务还不是具体地编写程序,而是要设计出程序的"蓝图"
因此,详细设计的结果基本上决定了最终的程序代码的质量。
3.6实现部分的重要知识点
测试的目标或定义
1)测试是为了发现程序中的错误而执行程序的过程。2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。3)成功的测试是发现了至今为止尚未发现的错误的测试。从上述动作规则可以看出,测试的正确定义是"为了发现程序中的错误而执行程序的过程"。
测试方法
如果已经知道了产品应用具有的功能,可以通过测试来检测是否每个功能都能正常使用;如果知道了产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。前一种方法称为黑盒测试,后一种方法称为白盒测试。
黑盒测试法把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检测程序功能是否能按照价格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息(例如数据库或文件)的完整性。黑盒测试又称为功能测试。
白盒测试与黑盒测试法相反,它的前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否能按预定要求正确工作。
确认检测
确认也称为验收测试,它们的目标是验证软件的有效性。
验证指的是保证软件正确地实现了某个特定要求的一系列活动,而确认指的是为了保证软件确定满足了用户需求而进行的一系列活动。
3.5维护的重要知识点
改正性维护
把诊断和改正错误的过程称为改正性维护。
适应性维护
适应性维护,也就是为了和变化了的环境适当地配合而进行的修改软件的活动,既必要又经常的维护活动。
完善性维护
在使用软件的过程中用户往往提出增加新功能或修改已有功能的建议,还可能提出一般性的改进意见。为了满足这类要求,需要进行完善性维护。
预防性维护
当为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件时,出现了第四项维护。这项维护活动通常称为预防性维护。
- 决定软件可维护性的因素
可理解性可测试性可修改性可移植性可重用性