logo资料库

846软件工程讲义.doc

第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
资料共38页,剩余部分请下载后查看
编写说明
专业课综述
【专业课综述】
【启尉考研学长学姐复习建议】
第一章 软件工程概述★
1.1.1软件工程
1.1.2软件危机
1.定义:是指计算机软件的开发和维护过程中所遇到的一系列严重的问题。
2.原因:
1)软件规模越来越大,结构越来越复杂
2)软件开发管理困难而复杂。
3)软件开发费用不断增加。
4)软件开发技术落后
5)生产方式落后,仍采用手工方式。
6)开发工具落后,生产率提高缓慢。
2.典型表现:
1)对软件开发成本和进度的估计常常很不准确。
2)用户对已完成的软件不满意的现象时有发生。3)软件产品的质量往往是靠不住的。4)软件常常是不可
1.1.3软件开发工程化
1.软件工程定义:将系统化、理论化的、可量化方法用于软件开发运行与维护。
2.软件产品具有的特性:可靠性、有效性、易维护性、可理解性。
3.软件开发的发展过程:
1)程序设计阶段:尚无软件概念,程序设计主要是围绕硬件进行开发,规模很小,工具简单,无明确分工,程序设计
2)程序系统阶段:硬件环境相对稳定,开始广泛使用产品软件,从而建立了软件的概念。软件系统的规模越来越庞大
3)软件工程阶段:软件危机得到缓解,硬件已经向巨型化、微型化、网络化和智能化,软件开发技术手段和管理方法
4.软件工程的基本原理:
1)用分阶段的生命周期计划严格管理
2)坚持进行阶段评审
3)实行严格的产品控制
4)采用现代程序设计技术
5)结果应能清楚的审查
6)开发小组的人员应该少而精
7)承认不断改进软件工程实践的必要性
5软件生命周期:是软件的产生直到报废或停止使用的生命周期。
6.软件生命周期的阶段:问题定义、可行性研究、需求分析、开发阶段、维护、软件重用、软件再工程。
7.软件工程方法学
(1)三要素:方法、工具、过程
(2)软件工程方法学的类型:
1)结构化设计方法
2)面向对象方法
3)形式化方法
1.1.3软件开发工程化
1.软件过程:是一个最终满足需求且达到工程目标的软件产品所需的步骤。
2.软件生存周期过程:基本过程、支持过程、组织过程
3.能力成熟度模型CMM:是对软件组织进化阶段的描述,随着软件组织定义、实施、测量、控制和改进其软件
4.软件过程成熟度的五个等级:
1)初试级:软件过程是无序的,甚至是混乱的,没有什么是经过定义的,项目成功的完成完全依赖个人的努力和核心
2)可重复级: 建立基本的项目管理过程和实践去跟踪项目成本、进度、质量,必要的过程准则可以重复类似项目的
3)已定义级:软件已经文档化、标准化、并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况
4)已管理级:制定了软件过程和产品质量的详细度量标准。软件质量都被开发组织人员所理解和控制。
5)优化级:加强了定量分析,通过质量反馈和新技术的反馈过程不断持续的改进。
1.1.4CASE工具与环境
1.分类:
1)支持软件开发过程的工具:需求分析工具、设计工具、编码工具、排错工具、测试工具等。
2)支持软件维护过程的工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具等。
3)支持软件管理过程和支持过程的工具:项目管理工具、配置管理工具、软件评价工具等。
2.工具的评价和选择:功能、易用性、稳健性、硬件要求和性能、服务和支持
3.软件开发环境:数据集成、界面集成、控制集成、方法与过程集成、平台集成
1.1.5敏捷开发
1.敏捷软件开发的价值观:
1)个人和交互高于过程和工具
2)可运行软件高于详尽的文档
3)与客户协作高于合同谈判
4)对变更及时做出反应高于遵循计划
2.敏捷软件开发的原则:
1)我们的最高目标是通过尽早和持续递交付有价值的软件来满足客户;
2)欢迎对需求提出变更 - 即使在项目开发后期,要善于利用需求变更,帮助客户获得竞争优势;
3)要不断交付可用的软件,周期从几周到几个月不等,越短越好
4)项目过程中,业务人员与开发人员必须在一起
5)要善于激励项目人员,给他们以所需要的环境和支持,并相信他们能够完成任务
6)无论是团队内还是团队间,最有效的沟通方法是面对面的交谈
7)可用的软件是衡量进度的主要指标
8)敏捷过程提倡可持续的开发,项目方,开发人员和用户应该能够保持恒久稳定的进展速度
9)对技术的精益求精以及对设计的不断完善将提升敏捷性
10)要做到简洁,尽可能减少不必要的工作,这是一门艺术
11)最佳的架构,需求和设计出自于自组织的团队
12)团队要定期反省如何能够做到更有效,并相应调整团队的行为
第二章 软件过程与模型★★
2.1.1软件过程
1.定义:是指软件生存周期中的一系列相关过程,由软件计划、软件开发、软件维护等一系列过程活动构成。
2.软件过程模型
(1)瀑布模型
1)基本思想:将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,规定他们自上而
2)特点:阶段间的顺序性和依赖性;阶段性质量保证;文档驱动推进研发过程;
3)开发周期:问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试、维护
4)优点:为项目提供按阶段划分的过程模型;当前一阶段完成后,才开始要去关注后续阶段,可以实现阶段性质量保
缺点:各个阶段的划分完全固定,阶段之间产生大量的文档,极大的增加工作量;用户只有在整个过程的末期才能
5)适用情况:待开发项目与以前项目类似;需求稳定且好理解;适用技术经过验证并且成熟;整个项目开发周期较长
(2)快速原型法
1)定义:根据用户提出软件定义,快速开发一个原型,向用户展示,再根据原型修改意见,进一步修改、完善、确认
2)基本过程:用户和开发人员根据初始需求共同制定项目规划;利用快速分析技术共同定义需求和价格,设计者开发
3)优点:直观形象,符合循序渐进规律,易接受;有效避开开发人员和用户对需求理解不一致;及时暴露问题,及时
缺点:为了加快速度,导致质量降低;没有严格开发文档,维护困难;缺乏统一规划和开发标准;难以对系统的开
4)适用情况:用户需求不确定或经常变化;开发人员经验不丰富;开发规模不大、不复杂的系统;分析和设计是不行
(3)增量模型
1)首先构建部分系统,在逐渐增加功能或者性能,直到完成系统(先创建核心功能)。
2)应注意问题:良好的可扩展性架构设计是基础;必须定义良好的接口;必须定义可行的过程(正式评审难以实现)
3)优点:降低进度拖延,需求变更和验收的风险;提高项目开发的可管理性;采用持续增量方式,将用户反馈融入细
缺点:同瀑布一样,早期要了解大部分需求;
4)适用情况:适合于软件需求不明确、设计方案有一定风险的软件项目。
(4)螺旋模型
1)模型要求不断迭代,即每次迭代都不是原水平上进行,是对整个开发过程进行迭代,而不仅仅对编码测试进行迭代
2)步骤:确定下一阶段目标,开发方案及约束条件;风险分析,构造原型;开发验证阶段产品软件产品;制定下一阶
3)优点:设计上灵活,可在项目各个阶段变更;以小的分段来构建大型系统,是成本计算简单容易;用户始终参与每
缺点:需要丰富的风险评估经验和专门知识,风险大的项目开发中,始末能及时标识风险,势必造成重大损失;过
4)适用情况:高风险,需求不明确的大型软件项目
(5)迭代模型
1)RUP将迭代定义为:迭代包括产生产品、发布(稳定,可执行的产品版本)的全部活动和要使用该发布所必需的
2)工作流程:需求工作流程、分析工作流程、实施工作标准、测试工作流程
3)原型不断完善,增量不断扩建都是扩建“逐步求精”的过程
4)主要阶段:初试阶段:确定业务用例和定义项目范围
精化阶段:分析问题域,细化产品定义,定义系统架构并建立
构建阶段:反复开发,完善软件系统,达到用户要求
产品化阶段:产品交付给用户,安装、培训、交付、维护
5)模型核心流程:
业务建模:对用户需求及业务流程重新规划,优化,抽象
获取需求:定义用户界面,用户需求和目标
分析设计:需求分析待开发系统设计,逐步开发架构,保证设计合适环境,保证功能性能符合需求
实施:对照分层结构定义代码,以构建方式实施类和对象,对已开发按单元测试再集成。
测试:构建部署到真实环境中
配置与变更管理:保持产品完整性与一致性
项目管理:为软件密集型项目提供框架,为项目计划人员设备,执行和评审,提供使用准则
环境:流程环境和工具环境
6)优点:在早期和中期,用户需求可以变化;迭代之初,不要求有一个近似的产品原型;使用范围广,几乎适用于所
缺点:采用循环的工作方式,每次循环都使工作产品更靠近目标产品,要求项目组成员具备很高水平,掌握先进的
7)统一软件开发过程(RUP):
四个阶段:初始、精华、构建、产品化
九个流程:业务建模、获取需求、分析设计、实施、测试、部署
(6)面向对象模型:
1)三种形式模型:对象模型(系统数据结构)、动态模型(系统控制结构)、功能模型(系统功能)
2)对象模型:(最关键)(对谁做)
静态的、结构化系统数据性质,从客观实体对象关系角度描述关系。
关联是类与类之间关系,是链的抽象,两个类之间关联称为二元关联
链是对象与对象之间关系,是关联的实例
关联的多重性是指类中有多少个对象与关联的类的一个对象相关
类的层次结构有聚集(整体与部分)和一般化(继承)关系
动态模型:(何时做)
瞬时的行为化的,规定对象的合法序列,体现系统的控制操作的执行顺序,从对象时间和状态角度出发,表现对象
用状态图作为描述项,描述系统状态和事件。
功能模型(做什么)
直接地反应了用户对系统的要求,由一组数据流图组成,说明数据流如何从外部输入,经过操作和内部存储输出到
第三章 可行性研究★★
3.1.1可行性研究
1定义:是在项目投资决一种科学的方法策前对拟建项目进行全面的技术,经济分析与论证,并对其做出可行或不
2.可行性研究报告三个内容:
1)分析论证项目投资建设的必要性
2)分析项目投资建设的可行性
3)分析项目投资建设的合理性(核心问题)
3.1.2可行性分析
1技术可行性
用于解决软件项目问题的可能性和现实性
系统流程图和高层数据流图
注意:
1)要全面考虑系统开发过程所涉及的所有技术问题
2)尽可能采用成熟技术
3)慎重引入先进技术
4)着眼于具体的开发环境和开发人员
5)技术可行性评价
2经济可行性
也称投资/效益分析(成本/效益分析)
软件项目总成本:开发成本和运行成本
软件项目总效益:直接经济效益和间接社会效益
3社会可行性
运行环境的可行性(操作可行性)
法律可行性
3.1.3可行性研究的阶段
1.机会研究:一般机会研究和项目机会研究
2.初步可行性研究:
工作目标:初步投资估算;
对默写关键问题专题辅助研究;
确定初步可行性;
是介于机会研究和可行性研究之间
3.详细可行性研究(基础)
为项目决策提供技术、经济、社会、财务等评价标准
主要目标:全面深入技术经济分析和比较选择工作
对软件项目投资方案做多方案选择
确定软件项目投资最终可行性和选择依据标准
决定项目性质的阶段
4.项目评估决策:对软件项目可行性研究报告进行全面审核和评价
第四章 软件项目管理★★
4.1.1软件项目概述
1.定义:软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People
2.基本内容:项目定义、项目计划、项目执行、项目控制、项目收尾
3.4P:人员、产品、过程、项目
4.软件项目管理的内容:启动一个软件项目;项目组织;项目计划;软件度量;项目估算;风险管理;进度安排
4.1.2软件度量
1.ISO/IEC:Metric度量;Measurement度量; Measure测度;直接测量;间
2.面向规模度量:是一种利用软件的规模对某些软件属性进行度量的方法。
3面向功能的度量
4.软件质量模型:
(1)McCall模型
软件质量的要素:正确性、可靠性、效率、完整性、可用性、可维护性、灵活性、可测试性、可移植性、可复用性
(2)ISO/IEC9126质量模型
功能性:适合性、准确性、互操作性、依从性、安全性
可靠性:成熟性、容错性、易恢复性
易用性:易理解性、易学性、易操作性
效率:时间特性、资源特性
可维护性:易分析性、易改变性、稳定性、易测试性
可移植性:适应性、易安装性、遵循性、易替换性
(3)程序复杂性度量
McCabe环形复杂性度量
Halstead复杂性度量
4.1.3软件项目估算
1.代码行、功能点和工作量估算
2.IBM估算模型
3.CoCoMo模型(基本、中级、详细)
4.Putnam模型
5.软件可靠性估算:错误植入法、分别测试法、软件平均故障间隔时间估算
4.1.4项目进度管理
1.定义:确保软件项目在规定的时间内按期完成。
2.基本原则:划分、相互依赖性、时间分配、工作量确认、定义责任、定义结果、定义里程碑
3.进度安排:甘特图、计划评审技术、跟踪进度
4.1.5风险管理
1. 风险标识:性能、成本、支持和进度
风险预测
风险评估
风险管理和控制:风险避免、风险监控、风险管理及监控计划
2软件项目组织:主程序员小组、民主制小组、层次式小组
4.1.6软件配置管理
1.软件配置项:
配置管理:是通过技术或行政手段对软件产品及其开发过程和生命周期进行控制、规范的一系列措施。配置管理的
版本:是指计算机软件配置项的完全编撰或重编撰相关的计算机软件配置项的初始发布或在再发布。
发布:是一项配置管理行为,说明某配置项的一个特定版本已准备好用于特定的目的。
基线:是指已经过正式审核与同意,可用作下一步开发的基础,并且只有通过正式的修改管理过程方能加以修改的
变更控制:变更控制的目的并不是控制变更的发生,而是对变更进行管理,确保变更有序进行。
配置审计:是指对所要求的全部配置项均已产生出来,当前配置与规定的需求相符所作的证明。
配置状态记录:是指一种配置管理元素,由记录和报告为有效的管理某一配置所需的信息组成。
2.软件配置管理的主要活动:
版本控制:是对系统不同版本进行标识和跟踪的过程。
变更控制:结合人的规划和自动化工具以提供一个控制并管理变更的机制
配置审计:通过调查研究确定已制定的过程、指令、规格说明、基线以及其他特殊要求是否恰当和被遵守,以及实
状态报告:是一个软件配置管理任务。
第五章 需求分析★★★
5.1.1概述
1.需求三个层次:业务需求:为什么开发
用户需求:要做什么怎么完成
功能需求:(外部行为)软件功能
2.特点:用户与开发人员很难交流
用户需求动态变化的
系统变更的代价呈非线性增长
3.重要性:是获取用户需求有效途径
决定项目成功与否关键因素
是系统分析和软件设计的桥梁
是控制软件质量的重要阶段
4.任务:确定系统必须完成那些工作,对目标系统提出完整、准确、清晰、具体的要求。
借助当前逻辑模型,到处目标系统的逻辑模型
5.软件需求规格说明书(SRS):功能需求、非功能需求、约束条件、质量属性
5.1.2需求分析过程
1.获取用户需求方式:
用户沟通交流法:用户访谈、调查分析、情节串联、
工具分析法:䱻图、帕紧托图
模型与语言描述法:分析建模法、语言描述法
原型化方法
2.需求分析的步骤:调查研究;确定需求;描述需求;需求分析复审;
5.1.3需求分析工具
1数据流图:(DFD)“功能模型”
(1)描绘信息流和数据从输入移动到输出的过程所经的变换逻辑模型(功能)
作为交换信息工具,作为分析和设计的工具,形象具体,易验证正确的,可行性研究阶段只需画出:高层次数据流
(2)常用符号:
1)源点/终点:部门、人员、组织
2)处理:数据变换的原因
3)数据流:动态数据及流动方向
4)数据存储:文件、数据库
(3)分层方法:顶层数据流图
一层数据流图
二层数据流图
(4)命名规则:
数据流及数据存储:名字代表整个数据流,而不是部分
不要使用空洞,缺乏具体含义名字如:数据
如有困难(命名)那么就是分解不对,需要重新分解
处理:线数据流命名,再相关联处理命名“由表及里”
反应整个处理功能而不是部分
动词(及物)+宾语
只包括一个动词
如果命名困难,那么就是分解不对,需求要重新分解
2.数据字典(DD)“模型核心”
关于数据信息集合,对数据流图中所有元素定义的集合
主要用途L都是工人查阅不了解条目的解释,在软件分析和设计中,给人提供关于数据的描述信息(作为分析阶段
对数据流、数据元素,数据存储、加工等描述
3.实体联系图(E-R图)“数据模型”
提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型
实体对象:软件必须理解复合信息表示,复合信息是只有一系列不同性质或属性的事件
属性:定义了实体对象的性质
联系:客观世界中的事物彼此间往往是有联系的(一对一、一对多、多对多)
3.状态转换图(STD图)“行为模型”
通过描绘系统的状态及引起系统状态转换事件,来表示系统的行为。
1)状态:是任何可以被观察到的系统行为模式,主要的状态有出台、终态和中间状态(初态只能有一个初态,终态可
2)事件:是在摸个特定时刻发生的事情,它是对引起系统做动作或从一个状态转换到另一个状态的外界事件的抽象。
3)行为:进入某状态所做的动作(如:状态框内do:行为名)
5.1.4UML用例需求模型
1UML的主要内容
(1)UML有三种基本的构造块:事物、关系和图
1)事物:结构事物、行为事物、分组事物、注释事物、
2)关系:依赖、关联、泛化、实现
3)图:用例图、类图、对象图、活动图、状态图、顺序图、合作图
(2)规则:名字、作用域、可见性、完整性、执行
(3)共用机制:规范说明、修饰、公用划分、扩展机制(构造型,标记值,约束)
2.UML视图
1)用例视图:定义了其外部行为,是最终用户,分析人员和测试人员,定义了系统的需求。因此约束了描述系统设计
2)设计视图:描述支持,用例视图中规定了功能需求和逻辑结构,由程序组件定义,主要是类,所包含数据,类的行
3)实现视图:描述系统物理组件,包括可执行文件,代码库和数据库等内容,这些视图中包含信息与配置管理和系统
4)进程视图:形成并发和同步机制的进程和线程
5)部署视图:描述物理组件如何在系统中运行实际环境中分布
5.1.5需求分析变更
1.需求过程管理内容:需求确认、需求评审、需求跟踪、需求变更控制
2.原因:问题域的复杂性越来越高;交流障碍;完整性问题;变更的需求引发更多变更
3.相应对策
1)思想方面:需求分析人员意识;用户意识;
2)项目管理方面:划定项目范围,拟定协议;需求版本控制;技术支持;
4.需求分析与验证方法:
1)自查法:小组审查法、参照法、逻辑分析法
2)用户审查
3)专家审查
4)原型法
5.需求分析验证内容:正确性、一致性、完整性、可行性、必要性、可校验性、可跟踪性
6.需求管理的方法和手段:
1)确定需求变更控制过程;
2)建立变更控制委员会;
3)进行需求变更影响分析;
4)跟踪所有受需求变更影响的工作产品;
5)建立需求基线和需求控制版本文档,维护好需求变更历史记录;
6)跟踪每项需求的状态;衡量需求稳定性,使用需求管理工具;
第六章 软件总体设计(概要设计)★★★
6.1.1软件总体设计阶段任务
1.概要设计阶段要完成的任务:
1)软件的总体设计:软件系统分为哪些部分,各部件之间有什么联系以及已确定的需求对这些组件部分如何分配
2)数据结构设计:决定文件系统的结构或数据的模式,子模式以及数据完整性、安全性设计
3)完成用户手册:对需求分析阶段编写的初步用户需求手册进行重新审定,在概要设计的基础上确定用户使用的要求
4)制定初步测试计划:完成概要设计之后,应对测试的策略、方法和步骤等提出明确的要求
5)概要设计评审:在以上几项工作完成之后,组织对概要设计工作质量的评审
6)编写概要设计说明书
6.1.2软件总体设计的基本思想
概要设计要完成程序结构的总体设计,最主要的任务是解决如何把系统划分成若干部分的问题。
1模块化
(1)定义:就是把程序划分成相对独立访问的模块,每个模块完成特定的功能,整体集成后形成系统,这些模块
(2)模块化基本思想策略:分而治之E(P1+P2)>C(P1)+C(P2)
当模块总数增加时,开发单个模块的代价(工作量)下降,但是不可忽视的是:当模块总数增加时,与模块接口有
启示:要模块化,但应避免模块化不足或者是超模块化
(3)好处:是软件结构清晰,部金融已设计也容易阅读和理解;
容易测试和调试,提高软件的可靠性;
提高软件的可修改性;
有助于软件开发工程的组织管理;
2.抽象
(1)定义:从纷繁复杂的事物中提炼出事物的本质过程,是一个具体到概念的过程;
(2)类别
1)过程抽象:是指具有明确和优先功能的指令序列(处理、动作的抽象)
2)数据抽象:描述数据对象的数据集合(数据结构、数据文件)
3.逐步求精
(1)定义:即将系统功能按层次进行分解,每一层不断将功能细化,到最后一层都是功能单一,简单易实现的模
(2)为了能集中精力解决主要问题,应尽量推迟对问题细节的考虑
注:抽象使得设计者能够说明过程和数据,同时却忽略底层细节
求精帮助设计者在设计过程中解释底层细节
4.信息隐藏和局部化
(1)定义:每个模块的实现细节对于其他模块来说是隐藏的,模块中所包含的信息对于其他不需要这些信息模块
5.模块独立内聚与耦合
(1)耦合
1)定义:耦合性也称耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性,调用模块的方式
2)耦合性从低到高:
非直接耦合:两个模块之间没有直接的联系
数据耦合:两个模块通过参数交换信息,交换的信息仅仅是数据
标记耦合:两个模块之间通过参数表传递一个数据结构的一部分(如某一数据结构的子结构)
控制耦合:如果两个模块通过参数交换信息,交换信息有控制信息。
外部耦合:相同的外部数据调用
公共耦合:一组模块都访问同一个公共数据环境
内容耦合:一个模块直接访问另一个模块的内部数据,或者一个模块不通过正常的入口转到了另一模块内部,或者
3)规则:尽量使用数据耦合;少用控制耦合;限制公共环境耦合;完全不用内容耦合
4)好处:容易分工合作;易测试和维护,修改工作量较少,错误传播范围小,扩充功能容易;
(2)内聚
1)定义:是一个模块内部各成分之间相关联程度的度量
2)内聚由低到高
偶然内聚:模块中的代码无法定义其不同功能的调用。
逻辑内聚:把集中相关功能组合在一起,每次调用时,由传递给模块参数来确定改模模块应完成哪一种功能
时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块
过程内聚:是指一个模块完成多个任务,这些任务必须按指定的过程执行
通信内聚:是指一个模块内所有处理元素都集中在某个数据结构的一块区域中
顺序内聚:是指一个模块完成多个功能,这些功能又必须顺序执行
功能内聚:是指一个模块中各个部分都是为完成一项具体功能而协同工作,紧密联系,不可分割
6.软件结构设计的启发式原则:
1)改进软件结构,提高模块独立性
2)模块规模应该适中
3)深度、宽度、扇出和扇人都应适当
4)模块的作用域应该在控制域之内
5)力争降低模块接口的复杂程度
6)模块功能应该可以预测
6.1.3软件总体设计的工作步骤:
1总体设计阶段组成
1)系统设计阶段
2)结构设计阶段
2.总体设计步骤
1)提供多种可能实现的方案
2)选取合理的方案
3)推荐最佳的方案
4)程序的结构设计
5)设计数据库
6)制定测试计划
7)书写文档
6.1.4软件结构设计工具
1.层次图:用来描述软件的层次结构。层次图中一个矩形框代表一个模块,方框间的连线表示调用关系,默认上
2.结构图:是指以模块的调用关系为线索,用自上而下的连线表示调用关系并注明参数传递的方向和内容,从宏
简单调用、选择调用、循环调用
6.1.5面向数据流的设计方法
1.定义:是给出设计软件结构的一个系统化的途径,即通过“面向数据流的设计方法”可以将软件需求分析阶段
2.数据流图的类型
(1)变换型
具有明确的输入、变换和输出界面的数据流图称为变换型数据流图
变换型数据流图如下:
在变换型数据流图中,信息沿输入通路进入系统,同时由外部形势变换成内部形式,进入系统的信息通过变换中心
(2)事务型
具有在多种事物中选择执行某类事务的能力,事物型结构由至少一条接受路径、一条事务中心和若干条动作路径组
事物型数据流图如下:
3.设计步骤:
1)复查基本系统模型
2)复审DFD图,必要时可再次进行一次复查
3)确定数据流图的类型
4)按照转换规则,对数据流图进行剖分,映射为初始的软件结构图。(即把数据流图映射成软件模块结构的上层)
a)变换型DFD到SC的转换规则:
对于变换型DFD,首先找出变换中心,一般从左到右,及沿物理输入找到逻辑输入,再从右到左,即沿物理输出
b)事物型DFD到SC的变换规则
与变换型结构相似,其中有一个明显的事务中心。
一接收分支和一发送分支
5)基于数据流图逐步分解高层模块结构,设计中下层模块
6)根据之前模块化设计的基本思想,调整模块大小及耦合、内聚等关系,按照设计改进原则优化和改进最初的软件结
7)描述模块接口
第七章 软件详细设计★★★
7.1.1详细设计阶段的目的和任务
1.详细设计的目标:
1)实现模块功能的算法要逻辑上正确
2)算法描述要简明易懂
2.详细设计的任务:
1)为每个模块进行详细的算法设计
2)为模块内的数据结构进行设计
3)为数据结构进行物理设计
4)其他设计(代码设计、输入/输出格式设计、人机对话设计)
5)编写详细设计说明书
6)评审
7.1.2结构化程序设计与程序设计风格
1.结构化程序设计(是过程设计的关键技术)
1)主张使用顺序、选择、循环三种基本结构来嵌套连接成具有复杂层次的“结构化程序”,严格控制goto语句的
2)“自顶向下,逐步求精”的设计思想
3)独立功能,单入口单出口的模块结构
2.程序设计风格:
1)程序算法的选择
2)程序中的注释行
3)恰当使用空格、空行和移行
4)每个程序或模块在其可执行部分的前面都集中了一些说明语句
5)输入和输出信息
7.1.3常用的详细设计表达工具
1.程序流图
1)定义:是以特定的图形符号加上说明来表示算法的图
2)基本的控制结构:
a)顺序型结构:含有多个连续的加工步骤;
b)选择型结构:由某个逻辑条件式的取值选择两个加工的一个;
c)循环结构:在控制条件成立时,重复执行特定的加工;
d)多选择型结构:列举多种加工的情况,根据某控制变量的取值,逻辑执行其中之一。
3)程序流程图的优缺点:
优点:把程序执行的控制流程顺序表达十分清楚,直观易懂;
缺点:本质上不是逐步求精的好工具,诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构;用箭
2盒图(N-S)
(1)特点:功能域(即一个特点控制结构的作用域)明显,可以从盒图看出来;
不能任意转移控制;
很容易确定局部和全局数据的作用域;
很容易表示嵌套关系,也可以表示模块的层次结构;
3.问题分析图(PAD)
(1)定义:用二维树形结构的图表示程序的控制流。
注:以PAD图为基础,能方便地编写出程序,用这种图转换为程序代码比较容易;
(2)PAD基本符号:
(3)PAD图的主要优点:
1)使用表示结构优化控制结构的PAD图符号所设计出来的程序必然是程序化程序;
2)描述的程序结构十分清晰;
3)用PAD图表现程序逻辑、易读、易懂、易记;
4)很容易将PAD图转换成高级程序语言源程序,有利于提高软件可靠性和软件生产率;
5)既可用于表示程序逻辑,也可用于描述数据结构;
6)PAD图的符号支持自顶向下,逐步求精方法的使用;
4决策树
(1)决策树又称判定树,是一种描述加工的图形工具,适合描述问题处理中具有多个判断,而且每个决策与若干
(2)表示方法:
5.决策表
(1)定义:决策表又称判定表,是一种呈表格状的图形工具,适用于描述处理判定条件较多,各条件又相互组合
(2)组成部分:
1)条件桩:列出问题的所有条件;
2)动作桩:列出了问题规定可能采取的操作;
3)条件项:列出针对它左列条件的取值
4)动作项:列出在条件项的各种取值情况下应该采取的动作;
(3)表示方法如图所示:
6.PDL设计语言
(1)定义:PDL设计语言又称为打印语言,也可称为伪码或结构化语言。
注:PDL用于书写软件设计规约,它是软件设计中广泛使用的语言之一,是一种非形式化的语言,对于控制结构
(2)PDL语言书写模块结构如下:
PROCEDURE<过程名>(<参数表>) <数据说明部分> <语句部分> END<过程名>
7.1.4程序复杂度的度量计算
1.McMabe方法
(1)定义:是一种基于程序控制流的复杂性的度量方法,基于对程序拓扑结构复杂度的分析,在很大程度上取决
注:单一的顺序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。
(2)三种方法中任何一种来计算环形复杂度:
1)流图中的区域数等于环形复杂度;
2)流图G的环形复杂度V(G)=E-N+2(E为流图中边的条数,N为结点数)
3)流图G的环形复杂度V(G)=P+1(P为流图中判定结点的数目)
2.Halstead方法
(1)定义:Halstead方法是一种复杂度量方法,不仅度量了程序长度,描述了程序的最小实现和实际实
第八章 软件实现★
8.1.1程序设计语言
1.程序设计语言的定义:用于书写计算机程序的语言
基本成分:数据成分:描述程序中所设计的数据
运算成分:描述程序中所包含的运算
控制成分:表达程序中的控制构造
传输成分:表达程序中数据的传输
2.程序设计语言的特性:
1)心理特性:歧义性、简洁性、局部性、顺序性、传统性
2)工程特性:可移植性、开发工具的可利用性、软件的可重用性、可维护性
3)技术特性:支持结构化构造的语言有利于减少程序环路的复杂性,使程序易测试、易维护。
3程序设计语言的分类:
1)第一代机器语言:计算机直接识别,编程效率极低;
2)第二代机器汇编语言:汇编语言指令是指机器指令的符号化,与机器指令存在直接的对应的关系,所以汇编语言同
3)第三代高级语言:面向用户,效率高,适应性强,兼容性好,便于移植;但是运行效率低,对硬件的操作不如汇编
8.1.2程序设计语言的选择
1.程序设计语言选择标准
1)系统用户的要求
2)可以使用的编程程序
3)软件的可移植性
4)软件的可靠性
5)软件的可维护性
6)软件的应用领域
2.程序设计风格(规则)
1)代码的可读性至上
2)遵循正确的命名约定(特定类名的第一个字母大写、大小写分离多个单词的命名、确保特定功能和变量名的第一个
3)必要时可使用空格
4)确保代码的可维护性
5)注释必须易于理解
6)正确使用函数
7)语句构造技巧(不要把所有的语句都写在一行、尽量避免复杂的条件测试、尽量减少对“非”条件测试、避免大量
8)整齐的代码缩进
第九章 软件测试★★
9.1.1软件测试的基础
1.软件测试基础
(1)定义:软件测试是描述一种用来鉴定软件的正确性、完整性、安全性和质量的过程。
(2)软件测试的目标:
1)测试是为了发现程序中的错误而执行程序的过程
2)好的测试方案是极可能发现至今为止尚未发现的错误的测试方案
3)成功的测试是发现了至今尚未发现的错误的测试
4)测试不仅仅是为了找出错误,通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发
5)这种分析能够帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性
6)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法
(3)软件测试的心理依据:
1)程序测试的过程具有破坏性
2)程序员应避免测试自己的程序
3)程序设计组织不应测试自己的程序
(4)软件调试
1)定义:软件调试是在进行了成功的测试之后才开始的工作,它与软件测试不同,调试的任务是进一步诊断和改正程
2)任务:进一步诊断改正程序中潜在的错误
3)调试:从错误人手,确定其位置
找出错误的内在原因
找到则排除错误,回归错误
否则加测试用例,证明猜测原因
调试活动:确定程序错误的性质和位置
修改程序,排除错误
4)调试方法:
a)强行排错:将内存内容打印出来分析
程序特定部位设置打印语句
自动调试工具(专门或交互式调试工具)
b)回溯法排错:确定最先发现症状位置,回溯源代码直到找到错误
c)原因排错法:
①对分查找法:已知每个变量在程序内若干关键点正确值,在“中点”注入正确值,检查输出是否正确,若错误,
②归纳法:特殊推断一般(从一些线索,错误的征兆)人手,分析他们之间的关系找出错误
收集数据组织数据 研究数据间关系 提出假设
③演绎法排错:从一般原理出发,经过排除和精华过程来推导出结论的逻辑方法
a)根据已有的测试用例,设想所有可能出错原因
b)逐个排除不正确的
c)验证余下假设确定出错的原因
可能原因 排除不适当原因 (有)对保密假设继续推断 证明假设
(没有)收集更多数据(不能) (能)纠正
9.1.2软件测试的原理和特点
1.软件测试原理(原则)
1)不应把软件测试仅看作软件开发过程的一个独立阶段,而应当把它贯穿于软件开发过程的各个环节中,不断测试,
2)测试用例必须包括测试输入数据和对输入的预期程续产生结果两部分;
3)程序错误有可能来自编写者编程水平不高或疏忽,还有可能来自对需求说明书的错误理解
4)应对一个测试结果做全面检查,以防止虽已测出错误,但因对测试结果检查不仔细和不全面,而被漏掉的情况发生
5)测试用例设计时,不仅要有有效的和期望的输入条件,还应包括无效的和不期望的输入条件
6)与前一个原理同理,测试程序时,不但要检查程序应该做事情的完成情况,还必须检查程序是否做了多余的、不应
7)在测试实践中有一种现象已被证实,且必须引起设计和测试人员的足够重视,即一个程序中尚未发现的错误数量与
8)不应该把测试工作看成是按部就班的工作
2.软件测试的准则:
1)应该尽早的进行,最好是在需求阶段就开始介入
2)程序员应该避免检查自己的程序,软件测试应该由第三方负责
3)设计测试用例时应考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下还要制造极端状态和意外状态
4)应该充分的注意测试中的群集现象
5)对错误结果要进行一个确认过程
6)制定严格的测试计划
7)妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便
8)所有测试追溯到用户需求,测试的目的是发现错误,其中最重要的是不能满足用户需求错误
9)应尽早地和不断地进行软件测试(贯穿每个阶段)
10)充分注意测试中群集现象(Pareto原理,80%错误与20%模块有关)
11)测试从小规模开始,逐步开始大规模测试(单个模块逐步集成)
12)不能做穷举测试
13)第三方测试原则
9.1.3软件测试的基本方法
1.白盒测试
(1)定义:利用程序内部的逻辑结构及有关信息,设计和选择测试用例,对程序所有逻辑路径及过程进行测试,
(2)白盒测试法按其程序不同观点可分为:语句测试、分支测试、路径测试
(3)白盒测试的方法:(由弱到强)
1)语句覆盖:就是设计若干个
2)判定覆盖:使设计的
3)条件覆盖:条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出
4)判定条件覆盖:就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所
5)条件组合覆盖,在白盒测试法中,选择足够的测试用例,使所有判定中各条件判断结果的所有组合至少出现一次,
6)路径覆盖,是每条可能执行到的路径至少执行一次。
(4)白盒测试的优缺点:
优点:迫使测试人员去仔细思考软件的实现
可以检测代码中的每条分支和路径
揭示隐藏在代码中的错误
对代码的测试比较彻底
最优化
缺点:测试成本昂贵
无法检测代码中遗漏的路径和数据敏感性错误
不验证规格的正确性
(5)为什么要用白盒测试:
黑盒测试不能确保每条路径都运行过,检验程序内部执行是否和算法或流程设计一致
2.黑盒测试
(1)定义:黑盒测试也称
(2)测试类型:功能不正确或遗漏
界面错误
数据结构或外部数据库访问错误
性能错误
初始化或终止错误
(3)黑盒测试用例设计方法:
1)划分等价类
a)定义:把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。
b)等价类划分可有两种情况:
有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。利用有效等价类可检验程序
无效等价类:与有效等价类的定义恰巧相反
c)等价类原则:
①在输入条件规定了取值范围或值得个数的情况下,则可以确定一个有效等价类和两个无效等价类。
②在输入条件规定了输入值的集合或者规定了“必须如何”的条件下,可确立一个有效等价类和一个无效
③在输入条件是一个布尔值的情况下,可确定一个有效等价类和一个无效等价类
④在规定了输入数据的一组值(假设n个),并且程序要对每一个输入值分别处理的情况下,可确定n个
⑤在规定了输入数据必须遵循规则的情况下,可确定一个有效等价类(符合规则)和若干无效等价类(从
⑥在确定已划分的等价类中个元素在程序处理中的方式不同的情况下,则应再将该等价类进一步划分为更小的
2)边界值分析法
a)定义:边界值分析是通过选择等价类边界的测试用例。边界值分析法不仅重视输入条件边界,而且也必须考虑输出
b)常见的边界值:对16bit整数而言32767和-32768
屏幕上光标最左上最右下
报表第一行和最后一行
数组元素第一个和最后一个
循环第0次,第1次,倒数第2次,第1次
3)错误推测法
a)定义:错误推测法是基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性性地谁测试用例的方法。
b)基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。
c)经验总结:还有输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行;缺省值;空白;空值;多
4)因果图法
a)从用自然语言书写的
b)方法步骤:分析输入输出,并进行分类,找出输入输出分别有几种
分析输入之间的关系
分析怎样的输入会导致各种结果
根据分析结果画出因果图
根据因果图画出判定表、人为删去判定表中不可能发生的情况
找出测试用例
3.软件测试的过程和步骤
(1)单元测试
a)定义:单元测试集中检查软件设计的最小单元----模块,即对各个模块进行测试,通常称为“分调”,它以详
b)测试方法:
①代码审查(人工):先编写人非正式,再由审查小组正式进行,30%~70%设计错误和编写错误
程序编写讲解、审查小组审查
预排演,编写代码审查单
②计算机测试(辅助模块模拟与被测模块相连模块)
驱动模块:相当于被测模块主程序,接受测试数据,传输给被测模块,再输出测试结果
桩模块:存根模块,代替被测模块调用的子模块
(2)集成测试
a)定义:集成测试,也叫
b)测试与接口问题:
①数据穿过接口时可能会丢失
②这个模块可能会破坏另一个模块的功能
③把子功能组装起来可能不产生所要求的主功能
④全程数据结构可能出现问题
⑤误差累积问题,单个可以接受的误差,装配以后可能会放大(或累积)到不可接受的程度
c)测试类型:
①非渐增式集成:把所有模块一次组装进行测试
②渐增式测试:将模块逐步组装成较大系统
自顶向下集成:桩模块(深度优先和广度优先)
自底向上集成:调用模块,代价小
③混合策略
改进自顶向下:基本用自顶向下,早期自底向下
混合法:上层用自顶向下,下层用自底向上
(3)确认测试
在集成测试之后,软件已经装配完成,接口错误也已经发现并纠正,这时便可以开始确认测试。确认测试运用黑盒
确认测试主要包括:
①α测试:用户对面市产品测试,开发者在其旁边,记下错误(是受控环境下测试)
目的:评价软件功能,可使用性,可靠性,性能界面
②β测试:多个用户在实际环境下测试,是开发者无法控制
目的:产品支持性
(4)系统测试
a)定义:是对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方。这
b)系统测试的类型:
①恢复测试 :以不同方式强制软件出现故障,检查软件能否恰当完成恢复
自动恢复:重新初始化、数据恢复、重新启动是否正确
人工干预恢复:检测平均恢复时间是否在允许范围内
②安全性测试:突破软件安全保护机构的安全保密措施,检验其漏洞
扮演视图攻击系统角色
外部手段获取密码
客户软件攻击系统
控制系统使其他人无法访问
引发系统错误,期望在系统恢复中侵入系统
设计目标:攻破系统付出代价大于攻破系统后得到信息价值
③强度测试:检验系统能力最高达到实际限度,承受能力一般高于5~10倍
④性能测试:是否达到性能要求规格
(5)回归测试:重新执行以作过测试的某子集,保证变化没带来预期副作用
回归测试集:检查软件全部功能的代表性测试用例
专门针对于能受修改影响的软件功能附加测试
针对被修改过软件功能测试
(6)循环测试:难以确定循环的次数,循环次数可能巨大,难以每种取值都可能测试。
3)软件可靠性和可用性:
①软件可靠性:是软件产品在规定的条件下和规定时间区间完成规定功能的能力
②软件可用性:是指软件产品在给定时间点,按照规格说明书的规定成功运行的概率
第十章 软件维护与再工程★
10.1.1软件维护
1.软件维护定义:是指在软件产品发布后,因修正错误、提升性能或其他属性而进行的软件修改
2软件维护的类型:
1)改正性维护:诊断和改正这个错误的过程
2)适应性维护:为了与变化了的环境适当地配合而进行的修改软件活动
3)完善性维护:为了满足用户在使用过程中提出增加新功能或修改已有功能的建议(占比最多)
4)预防性维护:为了进一步改进软件易维护性和可靠性,或者为了给未来的改进奠定更好的基础而进行的修改。
3.软件维护的过程:
1)维护组织:减少维护过程的混乱和盲目性,避免因小失大的情况发生。维护团队根据时间的不同,可以分为短期团
2)维护过程:从用户提出维护请求开始,如果维护请求是纠错性维护
3)维护记录:维护申请报告和软件修改报告
4)维护评价:维护记录的保存和维护的评审是两个相关的过程,只有保存了软件维护的记录,才能对维护的过程进行
4.软件可维护性
1)可维护性是指理解、改正、调整和改进软件的难易程度
2)主要因素有:可理解性、可测试性、可修改性、可移植性
3)提高可维护性的方法:
①确定质量管理目标和优先级
②使用提高软件质量的技术与工具
③选择可维护性高的程序设计语言
④完善程序文档
⑤进行质量保证审查
10.1.2软件再工程
1.再工程的几种概念
①逆向工程:指软件生存周期中,将软件的某种形式描述转换成更抽象形式的活动。
②重构:指在同一抽象级别上转换系统的描述形式
③设计恢复:指借助工具从已有程序中抽象出相关数据结构设计,体系结构设计和过程设计的信息
④再工程:指在逆向工程所获信息的基础上修改或重构已有的系统,产生系统的一个新版本。
2.软件再工程过程:
①库存目录分析 ②文档重构 ③逆向工程 ④代码重构 ⑤数据重构 ⑥正向工程
3.逆向工程:
1)定义:逆向工程是把软件源程序还原为软件文档或软件设计的过程。
2)逆向工程导出信息可分为4个抽象层次:
①实现级:包括程序的抽象语法树、符号表等信息;
②结构级:包括放映程序成分之间相互依赖关系的信息,如:调用图、结构图等;
③功能级:包括反映程序段功能及程序段之间关系的信息
④领域级:包括反映程序成分或程序诸实体与应用领域概念之间对应关系的信息,如:代码重构任务,只需获得实
3)逆向工程可用于恢复信息的方法主要有4类:
①用户指导下的搜索与变换
②变换方法
③基于领域知识的方法
④铅板恢复
长安大学 2021 年专业课核心考点辅导讲义 科目代码: 846 科目名称: 软件工程 长安大学 (846 软件工程) 长安大学(846)软件工程 考研辅导
长安大学 2021 年专业课核心考点辅导讲义 科目代码: 846 科目名称: 软件工程 目录 编写说明.............................................................................................................................1 专业课综述.........................................................................................................................4 专业课综述..................................................................................................................... 3 框架梳理.........................................................................................................................3 考研学长 学姐复习建议............................................................................................... 4 第一章软件工程概述.........................................................................................................8 第二章软件过程与模型...................................................................................................11 第三章可行性研究...........................................................................................................13 第四章软件项目管理.......................................................................................................15 第五章需求分析...............................................................................................................18 第六章概要设计...............................................................................................................22 第七章详细设计...............................................................................................................27 第八章软件实现...............................................................................................................28 第九章软件测试...............................................................................................................35 第十章软件维护与再工程...............................................................................................37 第 II页
长安大学 2021 年专业课核心考点辅导讲义 科目代码: 846 科目名称: 软件工程 编写说明 各位考生大家好!欢迎报考长安学校软件专业的硕士研究生,也感谢你选择我们启 尉考研教育的复习讲义材料。我们复习讲义是由本校本专业的研究生学长学姐花费很多 时间和精力编写的,其内容全面完整的涵盖专业课中的考试重点难点,以及学长学姐的 复习经验等内容,用以帮助考研的同学快速了解专业课考试的重难点,提高考生复习效 率节省复习时间等。本书所包含的内容为软件工程的基础内容,且本书《长安大学 2021 年考研复习辅导讲义》只适用于 2021 年 12 月份参加考研的学生,2021 年考研之后我 们启尉教育团队还会根据最新的出题方向以及考试内容变化对资料进行更新和完善,请 考试持续关注,切勿使用以往年份的过时资料影响复习效果。 下面将简要介绍科目代码软件工程综合的考试情况及所需参考资料。 1.长安大学科目代码 846 软件工程综合部分初试介绍 第 1页
长安大学 2021 年专业课核心考点辅导讲义 科目代码: 846 科目名称: 软件工程 846《软件工程》考试内容及范围 (适用于报考信息工程学院软件工程专业的考生) 一、考试总体要求 软件工程是研究软件开发和软件管理的一门实践性和工程性并重的学科。我校软件 工程专业本科期间开设有:《软件工程导论》,《软件需求分析》,《软件详细设计》,《软 件设计与体系结构》,《软件项目管理》,《软件质量保证与测试》等多门与《软件工程》 直接高度相关的课程。因此,要求考生熟练掌握本课程中软件的分析、设计、程序开发、 测试、软件项目管理、软件维护等方面的基本概念、基本原理和一些典型的技术方法。 并利用这些概念、原理和方法解决软件开发中的实际问题。 二、考试的内容及比例 (一) 概述(<5%) 1. 软件的概念、特征 2. 软件危机的原因与表现 3. 软件工程的概念及组成 (二) 软件过程(5-10%) 1. 软件过程的定义 2. 几种典型的软件过程模型:瀑布模型、原型模型、增量模型、螺旋模型、迭 代模型、面向对象模型 (三) 软件项目管理(5-10%) 1. 软件项目人员组织与管理模式 2. 项目沟通管理 3. 软件项目规划与管理 4. 软件项目进度管理 (四) 软件需求分析(10-20%) 1. 需求的类型 2. 需求工程过程 3. 获取需求的方法 4. 需求描述的方法与工具(包括结构化的与面向对象的) (五) 软件设计(30-40%) 1. 软件设计的概念及其重要性 2. 软件设计(包括结构化的与面向对象的)方法、步骤、过程、工具 3. 设计的检查、审查与验证 (六) 软件实现(5%) (七) 软件测试(10-15%) 1. 软件测试的概念 2. 测试策略:单元测试、集成测试、系统测试、验收测试、面向对象的测试技 术 3. 几种黑盒测试与白盒测试技术:等价类划分法,边界值分析法,路径覆盖 (八) 软件演化(<5%) 第 2页
长安大学 2021 年专业课核心考点辅导讲义 科目代码: 846 科目名称: 软件工程 1. 软件维护 2. 软件再工程 三、试卷题型及比例 试卷题型分为名词解释、选择题、填空题、回答问题、分析题和设计题(包括简单 设计和综合设计)六种类型,其中名词解释占 12%,选择题占 7%,填空题占 7%,分析 题占 15~20%, 回答问题占 20~30%,设计题占 30~40%。 注意:分析、设计及回答问题类题目可参考《全国计算机软件资格(水平)考试》 历年试题中的软件设计师、软件评测师、系统分析师下午试题样式。这三类试题可能会 在一道试题中同时出现,并不严格区分上面给出的题型。 四、考试形式及时间 考试形式为笔试,考试时间三小时,满分 150。 五、主要参考书目 1. 《软件工程》,作者:韩利凯、高寅生、杨全,清华大学出版社,2013 2. 《软件工程:方法与实践》(第 2 版),作者:许家珆,电子工业出版社,2012 3. 《软件工程-实践者的研究方法》(第 5 版), 梅宏译,机机械工业出版社,2013 4. 《软件工程——理论、方法与实践》,作者:孙家广,高等教育出版社 最后,我想提醒各位的是,也是老师说的很多的话:“学软件要多动脑,多学多想”。 在复习的时候,结合每个知识点、每道题和现实生活中的机构多想多分析其中的软件学 原理。再则,讲义只是对全书考点的一个浓缩,起辅助指导的作用,希望考生能正确运 用讲义,认真复习,考出一个理想的成绩。 因编写时间有限,加之作者水平有限,讲义中的不足与不妥之处在所难免,恳切希 望广大使用本讲义的考生批评指正。 第 3页
长安大学 2021 年专业课核心考点辅导讲义 科目代码: 846 科目名称: 软件工程 专业课综述 【专业课综述】 软件工程课程是软件工程专业的基础课程,要着重掌握软件工程的生命周期及其内 容,软件开发过程,其中最主要的就是弄懂结构化方法和面向对象方法。 【启尉考研学长学姐复习建议】 1. 要注重掌握画图的技巧 2. 要注重对名词解释及简答题的理解记忆 第 4页
长安大学 2021 年专业课核心考点辅导讲义 科目代码: 846 科目名称: 软件工程 第一章 软件工程概述★ 1.1.1 软件工程 1.定义: 广义:包括所有根据用户指令、指示或要求运营体系、系统或设备支持系统。 狭义:下载存储在计算机装置中的数码比特。 定义:是一系列按照特定顺序组织的计算机数据和指令的集合。 2.软件工程的基本要素:程序、规程、规则、文档及数据。 3.软件组织结构定义:计算机软件配置项,计算机软件部件,计算机软件单元构 成层次结构。 4.软件特征:智能性、无形性、抽象性、系统性、泛域性、依附性、非损性、复 制性、烟花性 5.软件分类:系统软件、支撑软件、应用软件 6.软件语言:需求定义语言、功能性语言、设计性语言、实现性语言、文档语言 1.1.2 软件危机 1.定义:是指计算机软件的开发和维护过程中所遇到的一系列严重的问题。 2.原因: 1) 软件规模越来越大,结构越来越复杂 2) 软件开发管理困难而复杂。 3) 软件开发费用不断增加。 4) 软件开发技术落后 5) 生产方式落后,仍采用手工方式。 6) 开发工具落后,生产率提高缓慢。 2.典型表现: 1) 对软件开发成本和进度的估计常常很不准确。 2)用户对已完成的软件不满意的现象时有发生。 3)软件产品的质量往往是靠不住的。 4)软件常常是不可维护的。 5)软件通常没有适当的文档资料。 6)软件成本在计算机系统总成本中所占比例逐年上升。 7)软件开发生产率提高的速度远跟不上日益增长的软件需求。 1.1.3 软件开发工程化 第 5页
长安大学 2021 年专业课核心考点辅导讲义 科目代码: 846 科目名称: 软件工程 1.软件工程定义:将系统化、理论化的、可量化方法用于软件开发运行与维护。 2.软件产品具有的特性:可靠性、有效性、易维护性、可理解性。 3.软件开发的发展过程: 1) 程序设计阶段:尚无软件概念,程序设计主要是围绕硬件进行开发,规模很 小,工具简单,无明确分工,程序设计追求节省空间和编程技巧,无文档资 料,主要用于科学计算。 2) 程序系统阶段:硬件环境相对稳定,开始广泛使用产品软件,从而建立了软 件的概念。软件系统的规模越来越庞大,高级语言层出不穷,软件产品的质 量不高,生产效率低下,从而导致了“软件危机”。 3) 软件工程阶段:软件危机得到缓解,硬件已经向巨型化、微型化、网络化和 智能化,软件开发技术手段和管理方法多样。 4.软件工程的基本原理: 1) 用分阶段的生命周期计划严格管理 2) 坚持进行阶段评审 3) 实行严格的产品控制 4) 采用现代程序设计技术 5) 结果应能清楚的审查 6) 开发小组的人员应该少而精 7) 承认不断改进软件工程实践的必要性 5 软件生命周期:是软件的产生直到报废或停止使用的生命周期。 6.软件生命周期的阶段:问题定义、可行性研究、需求分析、开发阶段、维护、软件 重用、软件再工程。 7.软件工程方法学 (1)三要素:方法、工具、过程 (2)软件工程方法学的类型: 1) 结构化设计方法 2) 面向对象方法 3) 形式化方法 1.1.3 软件开发工程化 1.软件过程:是一个最终满足需求且达到工程目标的软件产品所需的步骤。 2.软件生存周期过程:基本过程、支持过程、组织过程 3.能力成熟度模型 CMM:是对软件组织进化阶段的描述,随着软件组织定义、实施、 测量、控制和改进其软件过程。 第 6页
分享到:
收藏