软件工程期末复习要点归纳总结.docx
《软件工程期末复习要点归纳总结.docx》由会员分享,可在线阅读,更多相关《软件工程期末复习要点归纳总结.docx(16页珍藏版)》请在冰豆网上搜索。
软件工程期末复习要点归纳总结
第一章软件工程学概论
1、软件危机产生的原因
软件本身的特点:
难于维护、逻辑复杂
软件开发与维护的方法不正确:
忽略需求分析重要性、轻视软件维护
课本表述:
1、软件不同于硬件,它是计算机中的逻辑部件而不是物理部件
2、软件不同于一般程序,它的一个显着特点是规模庞大,而且程序的复杂性将规模的增加而呈现指数上升。
3、软件本身特有的特点确实给开发和维护带了一些客观困难
4、软件开发与维护有关的许多错误认识与做法有关(忽略需求分析,轻视软件维护)
5、对用户要求没有完整准确的认识就匆忙开始着手编写程序
6、在软件不同阶段进行修改需要付出的代价是很不相同的
2、软件危机的表现(什么是软件危机)
(1)、成本高:
(2)、软件质量得不到保证:
软件质量问题导致失败的软件项目非常多
(3)、进度难以控制:
●项目延期比比皆是
●由于进度问题而取消的软件项目较常见
●只有一小部分的项目能够按期完成
(4)、维护十分困难:
▼软件维护的多样性
▼软件维护的复杂性
▼软件维护的副作用
3、克服软件危机
(1)、管理的角度:
软件开发过程的研究、文档的标准化以及人员的交流方式等
(2)、软件开发方法的研究
结构化软件开发方法,面向对象的开发
4、软件工程的定义
概括的说,软件工程师指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
(1)、软件工程就是建立和使用一套合理的工程原理,从而经济地获得可靠的、可以在实际机器上高效运行的软件。
(2)、
把系统的、规范的、可度量的方法应用于软件开发、运行和维护的过程,也就是把工程应用于软件.
研究
中提到的途径
总之:
软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。
他借鉴传统工程的原理、方法,以提高质量,降低成本为目的。
5、软件工程的本质特性
1、关注与大型程序的构造
2、中心课题是控制复杂度
3、软件经常变化
4、开发软件的效率非常重要
5、和谐的合作是开发软件的关键
6、软件必须有效地支持它的用户
7、在软件工程领域中通常由具有一个文化背景的人替另外一种文化背景的人创造产品
6、软件工程的基本原理
1、用分阶段的生命周期计划严格管理
2、坚持进行阶段评审
3、实行严格的产品控制
4、采用现代程序设计技术
5、结果应能清楚地审查
6、开发小组应该少而精
7、承认不断改进软件工程实践的必要性
软件工程学包含3个要素:
方法、工具和过程
7、软件生命周期
(1)、概念:
软件生命周期由软件定义、软件开发和运行维护(也成软件维护)3个时期组成。
(2)、内容:
1、问题定义
回答“要解决的问题是什么?
“,写出关于问题性质、工程目标和工程规模的书面报告
2、可行性分析
回答”对于问题是否有行得通的解决办法?
“,即探索问题是否值得去解,是否有可行的办法
3、需求分析
确定”为了解决这个问题,目标系统必须做什么“,确定目标系统必须具备哪些功能,得到需求规格说明书。
4、总体设计
回答”概括地说,应该怎样实现目标系统?
“,确定程序由哪些模块组成以及模间的关系
5、详细设计
回答”应该怎样具体地实现这个系统呢?
”,确定实现模块功能所需要的算法与数据结构
6、编码和单元测试
写出正确的容易理解、容易维护的程序模块,然后仔细测试每个模块
7、综合测试
通过各种类型的测试(及相应的调试)是软件达到预定要求
8、软件维护
通过各种必要活动是系统持久地满足用户需求
8、生命周期模型
(1)、瀑布模型
传统瀑布模型特点:
1、阶段间具有顺序性与依赖性
2、推迟实现的观点
3、质量保证的观点
瀑布模型
优点:
1、可强迫开发人员使用规范的方法(例如:
结构化技术);
2、严格规定每个阶段必须提交的文档;
3、要求每个阶段交出的所有产品都必须通过验证。
缺点:
1、“瀑布模型是由文档驱动的”成为主要缺点
适用范围:
适合于用户需求明确、完整、无重大变化的软件项目开发。
(2)、快速原型模型
适用范围:
用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等情况。
(3)、增量模型
特点:
1、反复的应用瀑布模型的基本成分和原型模型的迭代特征,每一个线型过程产生一个“增量”的发布或提交,该增量均是一个可运行的产品。
2、早期的版本实现用户的基本需求,并提供给用户评估的平台。
优点:
1、在较短时间内向用户提交可完成部分工作的产品;
2、逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击;
缺点:
1、软件体系结构必须是开放的;
2、开发人员既要把软件系统看作整体。
又要看成可独立的构件,相互矛盾;
3、多个构件并行开发,具有无法集成的风险。
(4)、螺旋模型
基本思想:
使用原型或其他方法来降低风险。
适用范围:
适用于内部开发大规模软件项目。
优点:
1、对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件发的一个重要目标
2、减少了过多测试或测试不足
3、维护和开发之间并没有本质区别
缺点:
1、风险驱动,需要相当丰富的风险评估经验和专门知识,否则风险更大
2、随着迭代次数的增加,工作量加大,软件开发成本增加
(5)、喷泉模型
特点:
喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于采用对象技术的软件开发项目。
该模型认为软件开发过程自下而上周期的各阶段是相互迭代和无间隙的特性。
(6)、Rational统一过程
RUP重复一系列周期,每个周期由一个交付给用户的产品结束。
每个周期划分为初始、细化、构造和移交四个阶段,每个阶段围绕着五个核心工作流(需求、分析、设计、实现、测试)分别迭代。
第二章可行性研究
1、概念(目的)
用最小的代价在尽可能短的时间内确定问题是否能够解决,不是解决问题,而是确定问题是否值得去解决。
2、可行性研究任务
了解客户的要求及现实环境,从技术、经济和社会因素等三方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步项目开发计划。
即对软件开发以后的行动方针提出建议。
3、研究内容
(1)技术可行性使用现有的技术能实现这个系统吗?
(2)经济可行性这个系统的经济效益能超过它的开发成本吗?
(3)操作可行性系统的操作方式在这个用户组织内行得通吗?
(4)法律可行性新系统开发是否会侵犯法藤、集体或国家利益?
4、数据字典
(1)、内容
1、数据流
2、数据流分量(即数据元素)
3、数据存储
4、处理
(2)、作用
对于数据流图中出现的所有被命名的图形元素在字典中作为一个词条加以定义,使得每一个图形元素都有一个确切的定义。
第三章需求分析
1、需求分析的任务
(1)确定对系统的综合要求
(2)分析系统的数据要求
(3)导出系统的逻辑模型
(4)修正系统的开发步骤
2、获取需求的方法
(1)访谈
(2)面向数据流自顶向下
(3)简易的应用规模说明技术
(4)快速建立软件模型
3、实体-关系图(
)、层次方框图(
)和IPO图(
)
4、结构化分析模型
●数据流图:
描绘当数据在软件系统中移动时被变换的逻辑过程,指明系统具有的变换数据的功能,是建立功能模型的基础
●实体-联系图:
描绘数据对象及数据对象之间的关系,用于建立数据模型。
●状态转换图:
指明了作为外部事件结果的系统行为。
描绘了系统的各种行为模式(称为“状态”)和在不同状态间转换的方式。
是行为建模的基础
第四章总体设计
1、模块独立性与耦合性(
)
(1)模块化
把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
模块化的优点:
1.使软件结构清晰,容易设计也容易阅读与理解
2.容易测试与调试,提高可靠性
3.提高软件的可修改性
4.有助于软件开发工程的组织管理
(2)模块独立的重要性
○有效的模块化(即具有独立的模块)的软件比较容易开发出来
○独立的模块比较容易测试和维护
(3)耦合
衡量不同模块彼此间互相依赖(连接)的紧密程度,耦合要低,即每个模块和其他模块之间的关系要简单
1、数据耦合:
两个模块之间通过参数交换信息,而且交换的信息仅仅是数据
2、控制耦合:
传递的信息中有控制信息
3、特征耦合:
当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素
4、公共环境耦合:
两个或多个模块通过一个公共环境相互作用
5、内容耦合:
出现一下情况之一,则为内容耦合:
1、一个模块访问另一个模块的内部数据
2、一个模块不通过正常入口而转到另一个模块的内部
3、两个模块有一部分代码重叠
4、一个模块有多个入口
数据耦合<控制耦合<特征耦合<公共环境耦合<内容耦合
(4)内聚(
)
衡量一个模块内部各个元素彼此结合的紧密程度。
内聚要高,每个模块完成一个相对独立的特定子功能
信息隐藏(
)
应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的
2、启发规则
1、改进软件结构提高模块独立性
2、模块规模应该适中
3、深度、宽度、扇入、扇出都应适中
4、模块的作用域应该在控制域之内
5、力争降低模块接口的复杂度
6、设计单入口、单出口模块
7、模块功能应该可以预测
3、层次图和HIPO图(
)
4、面向数据流的设计方法(
)
(1)概念
面向数据流设计就是把信息流映射成软件结构,信息流的类型决定了映射的方法。
信息流包括变换流、事物流。
(2)变换分析与事务分析(
)
5、小结
i.进行软件结构设计遵循的最主要的原理是模块独立原理
ii.抽象和求精是一对互补概念
iii.软件工程师在实践中总结经验得出一些很有参考价值的启发式规则
iv.自顶向下逐步求精是进行软件结构设计的常用途径
v.用形式化的方法由数据流图映射出软件结构
第五章实现
1、选择程序设计语言
为了使程序容易测试和维护以减少软件的总成本,所选用的高级语言程序应该有理想的模块化机制,以及可读性好的控制结构和数据结构:
为了便于调试和提高软件可靠性,语言特点应该是编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。
第六章软件测试
2、测试的概念
(1)测试是为了发现程序中的错误而执行程序的过程
(2)好的测试方案是极可能发现了至今为止尚未发现的错误的测试方案。
(3)成功的测试是发现了至今为止尚未发现的错误的测试。
3、测试的过程与步骤(
)
大型软件的测试过程基本由下述几个步骤组成
(1)模块测试(单元测试)发现编码和详细设计的错误
(2)子系统测试
(3)系统测试(集成测试)
(4)验收测试(确认测试)
(5)平行运行
4、单元测试(
)
着重从下述5个模块进行测试(主要使用白盒测试技术)
(1)模块接口
(2)局部数据结构
(3)重要的执行通路
(4)出错处理通路
(5)边界条件
5、集成测试(
)
集成测试就是测试和组装软件的系统化技术,主要目标是发现与接口有关的问题。
有两种集成策咯
(1)自顶向下集成
(2)自底向上集成
6、确认测试(
)
也称验收测试,它的目标是验证软件的有效性。
通常使用黑盒测试法。
7、白盒测试技术(
)
白盒方法测试软件时设计测试数据的典型技术
(1)逻辑覆盖
1、语句覆盖
2、判定覆盖
3、条件覆盖
4、判定/条件覆盖
5、条件组合覆盖
6、点覆盖
7、边覆盖
8、路径覆盖
(2)控制结构测试
1、基本路径测试
2、条件测试
3、循环测试
8、黑盒测试技术(
)
黑盒测试力图发现下述类型的错误:
(1)功能不正确或遗漏了功能。
(2)界面错误。
(3)数据结构错误或外部访问数据库错误
(4)性能错误
(5)初始化和终止错误
黑盒测试用到的技术
(1)等价划分
(2)边界值分析
(3)错误推测
第七章维护
1、维护的定义(
)
所谓软件维护就是在软件已经交付使用周,为了改正错误或满足新的需要而修改软件的过程。
根据交付使用之后可能进行的4项活动具体定义软件维护
(1)改正性维护
纠正在使用过程中暴露出来的错误;诊断和改正错误的过程,
(2)适应性维护
为了和变化了的环境适当地配合而进行的修改软件活动
(3)完善性维护
在使用软件的过程中增加新的功能或修改已有功能,还可能提出一般性的改进意见的过程
(4)预防性维护
为了改进未来的可维护性与可靠性,或为了给未来的改进奠定更好的基础而修改软件的过程。
2、维护的过程(
)
(1)维护组织
(2)维护报告
(3)维护的事件流
(4)保存维护记录
(5)评价维护活动
3、小结
1、软件生命周期每个阶段的工作都和软件可维护性有密切关系。
2、再工程过程可以在完成任意一个活动之后中止
第八章面向对象技术
1、面向对象方法学要点
)
面向对象方法学的出发点和基本原则,是尽可能模拟人类思维方法,是开发软件尽可能接近人类认识世界解决问题的方法与过程。
2、面向对象方法学优点
1、与人类习惯的思维方法一致
2、稳定性好
3、可重用性好
4、较易开发大型软件产品
5、可维护性好
3、对象模型
)
对象模型表示静态的,结构化的系统的“数据”性质。
它是对模拟客观世界实体的对象以及对象彼此之间的关系的映射,描述了系统的静态结构。
4、动态模型
)
动态模型表示瞬时的、行为化的系统的”控制“性质,它规定了对象模型中的对象的合法序列。
5、功能模型
)
功能模型表示变化的系统的”功能“性质,他指明了系统应该”做什么”,因此更直接反映了用户对目标系统的需求。
6、三种模型之间的关系
)
功能模型指明了系统应该“做什么”;动态模型明确规定了什么时候(即在何种状况下接受什么时间的触发)做;对象模型则定义了做事情的实体。
在面向对象方法学中,对象模型是最基本的,它为其他两种模型奠定了基础,人们依靠对象模型完成了3中模型的集成。
下面扼要地叙述3种模型之间的关系。
三种模型描述了系统的不同方面:
对象模型
动态模型
功能模型
对象的静态结构及相互关系
与时间和顺序有关的系统性质
与值的变化有关的系统性质
描述系统的数据结构
控制结构
系统的功能
“干事的主体”
“什么时候干”
“干什么”
7、其他
复杂问题(大型系统)的对象模型通常由下述5个层次组成:
主题层、类与对象层、结构层、属性层、服务层
主题层
类与对象层
结构层
属性层
服务层
面向对象开发方法包括OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象实现)三个部分
第九章软件项目管理
1、估算软件规模(
)
(1)代码行技术
每个人了估计程序的最小规模(a),最大规模(b)和最可能规模(m),分别算出这3中规模的平均值
、
和
之后,用下面公式计算程序规模:
L=
(2)功能点技术
2、项目进度(Gantt图)
3、质量保证
概括得说,软件质量就是“软件与明确地和隐含地定义的需要相一致的程度”。
更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。
4、软件配置管理
软件配置管理事是在软件的整个生命周期内管理变化的一组活动。
具体地说,这组活动用来:
(1)标识变化
(2)控制变化
(3)确保适当地实现了变化
(4)向需要知道这类信息的人报告变化
5、基线
基线是一个软件配置管理概念,它有助于人们在不严重合理变化的前提下来控制变化,简而言之,基线就是通过了正式复审的软件配置项。
。
在软件配置项变成基线之前,可以迅速而非正式地修改它。
其他复习
简答题
1、简述文档在软件工程中的作用。
(1)提高软件开发过程的能见度
(2)提高开发效率
(3)作为开发人员阶段工作成果和结束标志
(4)记录开发过程的有关信息便于使用与维护;
(5)提供软件运行、维护和培训有关资料;
(6)便于用户了解软件功能、性能。