软件危机是指在计算机软件的开发和维护中所遇到的一系列严重问题。
产生的原因:
一方面与软件本身的特点有关,另一方面也和软件开发和维护的方法不正确有关。
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念,原理,技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效的维护它,这就是软件工程。
基本原理:
用分阶段的生命周期计划严格管理
坚持进行阶段评审
实行严格的产品控制
采用现代程序设计技术
结果应能清楚地审查
开发小组的人员应该少而精
承认不断改进软件工程实践的必要性
3、软件工程方法学包含的三要素:
方法、工具和过程
4、软件生命周期的 三个时期:
软件定义: 3个阶段,问题定义、可行性研究、需求分析
软件开发: 4个阶段,总体设计,详细设计,编码和单元测试,综合测试
(其中前两个阶段又称为系统设计,后两个阶段又称为系统实现)
运行维护: 维护时期的主要任务:使软件持续地满足用户的需要
5、软件过程的几个模型(选择)
瀑布模型(带反馈环)、快速原型模型(不带反馈环)、增量模型(),螺旋模型(排除风险)、喷泉模型(无缝迭代)
1、可行性研究实质:
可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。
三个方面:技术可行性,经济可行性,操作可行性
可行性研究的目的:用最小的代价在尽可能短的时间内确定问题是否能够解决。
3、数据流图
定义:数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
特点:
①数据流图中没有具体的物理部件,只是描绘数据在软件中流动和被处理的逻辑过程。
②数据流图是系统逻辑功能的国形表示,是分析员与用户之间极好的通信工具。
③设计时只需考虑系统必须完成的基本逻辑功能,不考虑怎样具体地实现这些功能。
数据流图和数据字典共同组成系统的逻辑模型
4、数据字典的定义
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
5、数据字典由四类元素定义组成
①数据流 ②数据流分量(数据元素)③数据存储 ④处理
6、成本效益分析的目的
成本/效益分析的目的正是要从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确地做出是否投资于这项开发工程的决定。
7、三种成本估计技术
①代码行技术②任务分解技术③自动估计成本技术
8、货币的时间价值的计算
1、模型是什么?
所谓模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。通常,模型由一组图形符号和组织这些符号的规则组成。
2、结构化分析实质:
结构化分析实质是一种创建模型的活动
3、需求分析过程应建立的三种模型是:
数据模型 功能模型 行为模型
4、数据模型中包含的三种相互关联的信息
数据对象、数据对象的属性 以及 数据对象彼此间相互连接的关系。
5、验证软件需求的方法
①验证需求的一致性
②验证需求的现实性
③验证需求的完整性和有效性
6. 联系
1、总体设计的两个阶段
系统设计阶段:确定系统的具体实现方案
结构设计阶段:确定软件结构
2、总体设计中,划分出组成系统的物理元素有
程序 文件 数据库 人工过程 文档
3、模块是构成程序的基本条件
4、什么是抽象?
人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。
5、信息隐藏还来的好处
绝大多数数据和过程对于软件的其他部分而言是隐藏的,在修改期间由于疏忽而引入的错误就很少可能传到软件的其他部分。
6、模块独立的概念
模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。
模块的独立程度可以由两个定性标准度量,分别是内聚和耦合。(提高模块的内聚程度并且降低模块间的耦合程度,从而获得较高的模块独立性)
在进行软件结构设计时应该应该遵循的最主要的原理是模块独立原理。
7、耦合
耦合定义:耦合是对一个软件结构内不同模块之间互联程度的度量。(耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据)
①数据耦合(低耦合): 如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据
②控制耦合(中等程度的耦合):如果传递的信息中有控制信息,则是控制耦合
③特征耦合: 当把数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合
④公共环境耦合(介于数据耦合和控制耦合之间): 如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时可以利用公共环境耦合
⑤内容耦合(最高程度的耦合): 出现下列情况之一,就发生了内容耦合
{
Ⅰ 一个模块访问另一个模块的内部数据
Ⅱ 一个模块不通过正常入口而转到另一个模块的内部
Ⅲ 两个模块有一部分程序代码重叠
Ⅳ 一个模块有多个入口
}
8、耦合设计原则
尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。
9、内聚
概念:内聚标志着一个模块内各个元素彼此结合的紧密程度,他是信息隐藏和局部化概念的自然扩展。
几种内聚的区分:(内聚越高越有利于独立性)
①偶然内聚(低内聚 0分):各个元素没有实质性联系。
②逻辑内聚(低内聚 1分)不同功能混在一起,合用部分程序代码。
③时间内聚(低内聚 3分)一个模块包含的任务必须在同一段时间内执行
④过程内聚(中内聚 5分)模块内必须以特定次序执行。
⑤通信内聚(中内聚 7分)所有元素都使用同一个输入数据产生同一个输出数据。
⑥顺序内聚(高内聚 9分)处理必须顺序执行。
⑦功能内聚(高内聚 10分)所有元素处理属于一个整体,完成一个单一的功能。
10、扇出的定义:
扇出是一个模块直接控制(调用)的模块数目。
11、几种图形工具的区别 (选择题)
层次图 HIPO图(有编号) 结构图
1.目标
详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,即经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
2.工作任务
详细设计阶段的任务是要设计出程序的“蓝图”,以后程序员将根据这个“蓝图写出实际的程序代码。
详细设计的结果基本上决定了最终的程序代码的质量。
3.结果程序设计
实际上用顺序结构和循环结构完全可以实现选择结构,因此理论上的最基本结构只有两种
4.程序流程图
程序流程图又称为程序框图,它是历史上最悠久,使用最广泛的描述过程设计的方法。
(4)当算法中包含多重嵌套的条件选择时,用程序流程图,盒图,PAD图,过程设计语言(PDL)都不易表达清楚。然而判定表却能够清晰的表示复杂的条件组合和应做的动作之间的关系。
判定树是判定表的变种,它也能清晰的表示复杂的条件组合和应做的动作之间的关系。
(6)过程设计语言(PDL):也称为伪码。
4.程序复杂程度的定量度量
最广泛的是McCabe方法和Halstead方法
McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。
Halstead方法根据程序中运算符和操作数来度量程序的复杂程度。
必考题
第二题
1.通常把编码和测试统称为实现
所谓编码就是把软件设计结果翻译成用某种程序设计语言书写的程序,程序的质量主要取决与软件设计的质量。
(1)模块测试:模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。
(2)子系统测试:子系统测试是经过单元测试的模块放在一起形成一个子系统来测试。
(3)系统测试:系统测试是把经过测试的子系统装配成一个完整的系统来测试。
(4)验收测试:验收测试把软件系统作为单一的实体进行测试,测试内容与系统测试基本类似。
在这个测试步骤中发现的往往是系统需求说明书的错误。验收测试也称为确认测试。
(5)平行运行
单元测试集中检测软件设计的最小单元——模块。通常单元测试和编码属于软件过程的同一个阶段
由模块组装成程序时又两种方法。一种方法是渐增式测试,另一种是非渐增式测试。
自顶向下集成方法是一个日益为人们广泛采用的测试和组装软件的途径。采用深度优先的策略或宽度优先的策略。
确认测试也称为验收测试,它的目标是验证软件的有效性。
5.白盒/黑盒测试
条件组合覆盖是前述几种覆盖标准中最强的
三种白盒测试技术:基本路径测试,条件测试,循环测试。
三种黑盒测试技术:等价划分,边界值分析,错误推测。
目前软件测试仍然是保证软件可靠性的主要手段
1.软件维护的定义:所谓软件维护就是在软件已经交使用之后,为了改正错误或满足新的需要而修改软件的过程。
2.四类维护活动:改正性维护,适应性维护,完善性维护(占比最高),预防性维护(最低)。
3.文档是影响软件可维护性的决定因素。