软件工程导论复习知识点
第一章软件工程概述及软件开发过程模式
- 软件工程的原则和方法
软件工程的原则:
- 选取适宜的开发模型
- 采用合适的设计方法
- 提供高质量的工程支持
- 重视软件工程的管理
软件工程方法学:
软件工程方法学包含3个要素:方法、工具和过程
软件工程方法主要分为7种类型:
- 面向功能方法
- 面向数据方法
- 面向对象方法(面向对象=对象+类+继承+消息通信)
- 面向问题方法
- 面向方法的开发方法
- 基于构建的开发方法
- 可视化方法
- 软件危机的概念及其产生软件危机的原因
软件危机的概念:
软件危机是指在计算机软件的开发和维护过程中所遇见的一系列严重问题。
概括的说软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
产生软件危机的原因:
- 与软件本身的特点有关:
- 管理和控制软件开发过程相当困难
- 软件在运行过程中不会因为使用时间过长而被“用坏”,如果运行中发现了错误,很可能是遇到了一个正在开发时期引入的在测试阶段没能检测出来的错误。因此,软件维护通常意味着改正或修改原来的设计,这就在客观上使得软件较难维护。
- 软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。
- 目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。
- 错误的认识和做法主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等
- 事实上,对用户要求没有完整准确的认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一。
- 也和软件开发与维护的方法不正确有关:
- 只重视程序而忽视软件配置其余成分的糊涂观念
- 软件开发人员在定义时期没有正确全面地理解用户需求,直到测试阶段或软件交付使用后才发现“已完成的”软件不完全符合用户的需要,这时再修改就为时已晚了。
- 轻视维护是一个最大的错误。
- 软件生命周期及各个阶段的任务
软件生命周期由软件定义、软件开发和运行维护(也称软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。
- 软件定义时期的任务:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又被称为系统分析,由系统分析员负责完成。软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
- 开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
- 维护时期的主要任务是使软件持久地满足用户的需要。具体地说,当软件在使用过程中发现错误时应当加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应该及时改进软件以满足用户的需要。通常对维护时期不再进一步划分阶段,但是每一次维护活动本质上都是一次压缩和简化了的定义和开发过程。
- 软件工程过程及软件工程过程模型
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。概括地说,软件过程描述为了开发出客户需要的软件,什么人(who),在什么时候(when),做什么事(what)以及怎样(how)做这些事以实现某一个特定的具体目标。
通常使用生命周期模型简洁的描述软件过程,生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称过程模型。
软件过程模型:
- 瀑布模型:线性模型,整体开发模型,文档给驱动的模型,每一阶段必须完成指定的文档,适用于需求明确的中、小型软件开发。
- 快速原型模型:用户参与较早,通过迭代完善用户需求,应用快速开发工具,适用于需求模糊的小型软件开发。
- 增量模型:每次迭代完成一个增量,可用于面向对象开发,适用于容易分块的大型软件开发。
- 螺旋模型
- 喷泉模型
- Rational统一过程
- 敏捷过程与极限编程
- 微软过程
- 软件工程面临问题
软件费用、软件可靠性、软件维护、软件生产率、软件重用
第二章软件的定义及其可行性研究
1、什么是可行性分析,可行性分析的目的和任务是什么?
可行性分析是指在项目正式开发之前先投入一定的精力,通过一套准则,从经济、技术、社会等方面对项目的必要性、可能性、合理性,以及项目所面临的重大风险进行评价和分析,得出项目是否可行的结论。
可行性分析的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。可行性分析的目的不是解决问题,而是确定问题是否值得去解决。
可行性分析的主要任务是从以下几个方面研究每种解法的可行性:技术可行性、经济可行性、操作可行性,必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。可行性分析最根本的任务是对以后的行动方针提出建议。
2、可以从几个方面进行可行性研究?
技术可行性、经济可行性、操作可行性,必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。
3、成本/效益分析方法
人力成本=(总代码行数/人月均代码行创建数)*人月均工资
功能点数=总的功能数*(0.6+0.01*ΣFi) Fi是软件复杂度调整值
软件人力成本=(软件功能点数/人月均功能点创建数)*人月均工资
4、衡量软件效益的三个指标。
投资回收期
纯收入
投资回收率
第三章 需求分析及其建模
1、需求分析的定义及目的
需求分析是软件定义时期的最后一个阶段,它的基本任务是准确地回答“系统必须做什么”这个问题。
2、需求分析的具体任务
3、数据流程图的画法
4、什么是数据字典
数据字典是关于数据的信息集合,也是对数据流图中包含的所有元素的定义的集合。数据字典的作用是在软件分析和设计的过程中给人提供关于数据的描述信息。
一般来说,数据字典应该由下列4类元素的定义组成:
- 数据流
- 数据流分量(即数据元素)
- 数据存储
- 处理
- 实体关系E-R图的三个元素
数据对象、数据对象的属性及数据对象彼此间相互联系的关系
- 判定表的画法
第四章概要设计
- 什么是概要设计,概要设计的目的
概要设计是在需求分析的基础上,对软件系统的总体结构、模块组成、功能实现方式、关键技术、数据结构等进行粗略的设计。
- 设计原理:模块化、信息隐藏和局部化、模块、模块独立性(耦合和内聚)
- 启发规则(3、4)
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度、宽度、扇出和扇入都应适当
- 模块的作用域应该在控制域之内
- 力争降低模块接口的复杂程度
- 设计单入口单出口的模块
- 模块功能应该可以预测
- 软件结构图
- 变换型数据流图和事务型数据流图
- 面向数据流的设计方法,如何从数据流程图转换为软件结构图
- 结构化方法存在的问题
(1)结构化方法分析和设计阶段所应用的模型之间存在鸿沟。分析阶段的主要模型是数据流程图,设计阶段的主要模型是软件模块结构图,数据流程图和软件模块结构图之间需要进行转换。不同的人转换出的模块图可能不同,有很大的随意性。
(2)需求分析的细化程度没有标准,只能凭借分析人员的经验自己把握;需求分析的过程是在一种瀑布形式,当需求变更时,功能变化就会导致软件模块结构发生变化,造成了软件结-构不稳定。
(3)结构化程序设计将数据定义与处理数据的过程相分离,不利于软件复用。
(4)结构化方法设计的软件结构不稳定,缺乏灵活性,可维护性差。
第五章软件详细设计
1、软件详细设计的任务
(1)详细设计出模块的算法,将算法用有关设计工具如程序流程图,PAD图及过程设计语言描述出来。
(2)设计出模块内的数据结构(0.5分)
(3)设计出数据库的结构和数据的存储模式(1分)
(4)进行模块的编码设计,设计出模块的输入/输入出界面和人机对话接口。(1分)(5)编写出详细设计的说明书(0.5分)
(6)对详细设计阶段的工作进行评审。(1分)
2、PDL
过程设计语言,也称伪码,是用正文形式表示数据和处理过程的设计工具
- 编码和软件测试
- 编码风格、高效率原则
- 程序内部的文档
- 数据说明
- 语句构造
- 输入输出
- 效率
3、软件测试的概念,软件测试的目标,软件测试的方法,软件测试的步骤
软件测试的概念:软件测试,是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程。
软件测试目标:
- 软件测试,是为了发现错误而执行程序的过程。
- 软件测试是对需求分析、设计和编码3个阶段进行最终的复审。
- 软件测试不是为了发现程序没有错误,也不是为了表明程序是正确的。软件测试的根本目标是尽可能多地发现错误。测试目标决定了测试方案的设计。
- 测试阶段的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。
软件测试的方法:黑盒测试和白盒测试
黑盒测试:基于程序外部功能而进行的测试,又称功能测试。
白盒测试:基于程序内部结构而进行的测试,又称结构测试。
软件测试的步骤:
大型软件系统的测试过程基本由下述几个步骤组成:
1、模块测试
2、子系统测试
3、系统测试
4、验收测试
5、平行运行
3、什么是确认测试
确认测试也称为验收测试,它的目标是验证软件的有效性。
4、白盒测试技术(主要看逻辑覆盖的前5种方法),如何设计测试路径和测试用例。
1、逻辑覆盖:
(1)语句覆盖
1、画出程序流程图、用标号标出所有的单一判定表达式;
2、覆盖标准的语义标准
3、构造条件组合表,设计可执行路径
4、根据可执行路径设计测试用例,从而得到测试用例表
(2)判定覆盖
(3)‘条件覆盖
(4)判定/条件覆盖
(5)条件组合覆盖
(6)点覆盖
(7)边覆盖
(8)路径覆盖
5、黑盒测试技术(等价类划分方法、了解边界值分析方法)
把全部输入数据合理地划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据取得较好的测试结果。
有效等价类:指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。
无效等价类:与有效等价类的定义恰巧相反。
设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更高的可靠性。
6、调试的概念,调试的过程
调试(也称为纠错)作为成功测试的后果出现,也就是说,调试是在测试发现错误之后排除错误的过程。
调试的过程:调试过程总会产生以下两种结果之一:
第一,找到了问题的原因并把问题改正和排除掉了;
第二,没有找出问题的原因。
7、什么是软件的可靠性?
软件可靠性是指:程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。
- 软件维护
- 软件维护的定义及软件维护活动分类
定义:所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。可以通过描述软件交付使用后可能进行的4项活动,具体地定义软件维护。
软件维护活动的分类:
- 改正性维护
- 适应性维护
- 完善性维护
- 预防性维护
2、什么是软件可维护性,提高软件可维护性的方法。
软件的可维护性 即维护人员理解、掌握和修改被维护软件的难易程度。(纠错、完善、适应、预见性维护)
决定软件可维护性的因素主要有下述5个。
可理解性
可测试性
可修改性
可移植性
可重用性
方法:软件可维护性是指软件能被理解,校正,适应及增强功能的容易程度。提高软件可维护性的方法包括要建立明确的软件质量目标,确定软件质量强调的是效率还是可移植性(3分);
要利用先进的开发技术和工具进行软件维护;建立明确的软件质量的保证体系加强软件维护工作的检查;
选择可维护的语言,改进程序文档的编写和管理方法(2分)。
-
十章 面向对象需求分析
- 对象
对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务(即公有的操作)。
- 继承和多态
继承:继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。
多态:在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。
- 什么是面向对象设计
面向对象设计是一种基于对象的软件设计方法,它将系统划分为多个对象,并通过对象之间的交互来实现系统的需求。
- 广泛使用的面向对象的方法
Booch方法、Rumbaugh方法、Coad和Yourdon方法、 Jacobson方法、
- 基于UML的软件开发过程
一种迭代的渐进式软件开发过程,它包含4个阶段:初启、细化、构造和移交。
6、用例图和类图画法