软件工程复习Word文档下载推荐.docx
《软件工程复习Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《软件工程复习Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
a.原型模型:
开发人员和用户在“原型”上达成一致,缩短了开发周期,加快了工程进度,降低成本。
·
三种类型
探索型
实验型
演化型
两种策略
废弃策略:
探索型实验型
追加策略:
i.螺旋模型:
将原型实现的迭代特征与瀑布模型中控制的和系统化的方面结合起来,不仅体现了这两种模型的优点,而且增加了风险分析。
3、喷泉模型:
是一种支持面向对象开发的过程模型
4、基于构件的开发模型:
利用预先包装的构件来构造应用系统。
5、形式化方法模型:
易于发现需求的歧义性、不完整性和不一致性,易于对分析模型、设计模型和程序进行验证。
9、CASE工具与环境
计算机辅助软件工程:
是指使用计算机及相关的软件工具辅助软件开发维护管理等过程各项活动的实施,以确保这些活动能高效高质量地进行。
10.简述CASE工具和环境的重要性。
CASE已被证明可以加快开发速度,提高应用软件生产率并保证应用软件的可靠品质。
计算机专业人员利用计算机使他们的企业提高了效率,企业的各个部门通过使用计算机提高了生产率和效率,增强了企业的竞争力并使之带来了更多的利润。
第二章系统工程
1.计算机系统元素:
软件、硬件、人员、数据库、文档和规程
2.系统工程的任务
1 识别用户要求
2 系统建模和模拟
3 成本估算和进度安排
4 可行性分析:
经济技术法律
5 生成系统规格说明
3.可行性分析(主要从经济、技术、法律等方面分析所给出的解决方案是否可行,能否在规定的资源和时间的约束下完成。
)
1 经济可行性分析:
成本,效益(经济效益,社会效益),货币的时间价值,投资回收期,
纯收入)
2 技术可行性分析:
风险分析,资源分析,技术分析
3 法律可行性分析
第3章需求工程
1、需求工程的重要性是什么?
可以确定客户需求、帮助分析人员理解问题、评估可行性、协商合理的解决方法、无歧义
的规约方案、确认规约以及将规约转换到可运行的系统时的管理要求。
2、需求工程的六个阶段
1 需求获取:
系统分析人员通过与用户的交流、对现有系统的观察及对任务进行分析。
2 需求分析和协商:
分析每个需求与其他需求的关系以检查需求的一致性、重叠和遗漏的情
况,并根据用户的需求对需求进行排序。
3 系统建模:
通过合适的工具和符号系统地描述需求。
4 需求规约:
给出对目标软件的各种需求。
5 需求验证:
对功能的正确性、完整性和清晰性以及其他需求给予评价。
6 需求管理:
对需求工程所有相关活动的规约和控制。
第4章设计工程
1、简述模块、模块化及模块化设计的概念
1 模块:
是数据说明、可执行语句等程序对象的集合,是单独命名的,并且可以通过名字来访问的
2 模块化:
是指把软件按照规定原则,划分为一个个较小的,相互独立的但又相互关联的部件
3 模块化设计:
就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系
软件设计:
把软件需求变换成软件表示过程,它主要包含两个阶段:
软件体系结构设计阶段和部件级设计。
其它阶段:
数据/类设计,接口设计
2、软件设计的任务
1 数据/类设计:
将分析类模型变换成类的实现和软件实现所需要的数据结构
2 体系结构设计:
定义了软件的整体结构
3 接口设计:
描述了软件内部、软件和协作系统之间以及软件同人之间如何通信
4 部件级设计:
将软件体系结构的结构性元素变换为对软件部件的过程性描述
3、软件设计的原则:
抽象与逐步求精、模块化和信息隐藏
抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象,下层的概念是上层概念的精化和细化。
软件设计中的抽象手段有:
过程抽象和数据抽象。
1.功能独立:
标志是内聚和耦合
模块的独立性可以由两项指标来衡量:
内聚度与耦合度
1 内聚:
是一个模块内部各个元素彼此结合的紧密程度的度量
a.功能内聚:
指一个模块中各个部分都是为完成一项具体功能而协同工作,紧密联
系,不可分割。
b.顺序内聚:
指一个模块完成多个功能,这些功能又必须顺序执行。
c.通信内聚:
指一个模块内所有处理元素都集中在某个数据结构的一块区域中。
d.过程内聚:
指一个模块完成多个任务,这些任务必须指定的过程执行。
e.时间内聚:
指一个模块中的所有任务必须在同一时间段内执行。
f.逻辑内聚:
逻辑内聚是指完成一组逻辑相关任务的模块,调用该模块时,由传送
给模块的控制性参数来确定该模块应执行哪一种功能
g.巧合内聚:
2 耦合:
是模块之间的相对独立性(互相连接的紧密程度)的度量
a.非直接耦合:
两个模块之间没有直接关系,它们之间的联系完全是通过主模块的
控制和调用来实现的
b.数据耦合:
一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制
参数、公共数据结构或外部变量)来交换输入、输出信息的
c.标记耦合:
一组模块通过参数表传递记录信息,就是标记耦合。
这个记录是某一
数据结构的子结构,而不是简单变量。
其实传递的是这个数据结构的地址
d.控制耦合:
如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选
择另一模块的功能,就是控制耦合
e.外部耦合:
一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不
是通过参数表传递该全局变量的信息,则称之为外部耦合
f.公共耦合:
若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公
共耦合。
公共的数据环境可以是全局数据结构、共享的通信区、内存
的公共覆盖区等
g.内容耦合:
当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模
块时就发生了内容耦合
总结:
●模块之间的连接越紧密,联系越多,耦合性就越高,而其模块独立性就越弱
●一个模块内部各个元素之间的联系越紧密,则它的内聚性就越高
●模块独立性比较强的模块应是高内聚低耦合的模块
●耦合是直接的主导因素,内聚则辅助耦合共同对模块的独立性进行衡量
4、体系结构发展过程
a.单主机结构
b.C/S(Client/Server)结构
c.B/S(Browser/Server)结构
d.C/S和B/S混合结构
5、部件级设计技术(概要设计)
●在结构化分析和设计方法时部件往往被称为模块
●在面向对象分析和设计时部件被称为类,在基于构件的开发方法中,部件被称为构件。
1.部件级设计技术任务:
a.确定部件采用算法
b.确定部件使用的数据结构
c.写入部件设计说明书
2.结构化程序设计方法
概念:
如果一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连结,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
目的:
使程序代码容易阅读、容易理解。
3.表达算法工具
a.语言描述
b.表格描述
c.图形表示法:
流程图:
独立于任何一种程序设计语言,比较直观、清晰、易于学习掌握
1 PAD:
ProblemAnalysisDiagram的缩写,由程序流程图演化而来
五种基本控制结构
a.PAD所描述程序的层次关系表现在纵线上,每条纵线表示一个层次,把PAD图从左到右展开
b.PAD的执行顺序:
✧从最左主干线上端的结点开始,自上而下执行;
✧每遇到判断或循环,就从左到右进入下一层,从表示下一层的纵线上端开始执行,直到该纵线下端,再返回上一层的纵线的转入处
PAD事例:
例题:
有一个表A
(1)、A
(2)、...A(n),按递增顺序排列。
给定一个Key值,在表中用折半法查找。
若找到,将表位置i送入x,否则将零送到x,同时将key值插入表中。
算法:
(1)置初值H=1(表头),T=N(表尾)。
(2)置i=[(H+T)/2](取整)。
(3)若Key=A(i),则找到,i送到x;
若Key>
A(i),则Key在表的后半部分,i+1送入H;
若Key<
A(i),则Key在表的前半部分,i-1送入T,重复第2步查找直到H>
T为止。
(4)查不到时,将A(i),...A(N)移到A(i+1)...A(N+1),Key值送入A(i)中。
第5章结构化分析和设计
1.结构化方法:
结构化分析(StructuredAnalysis简称SA)
结构化设计(StructuresdDesign简称SD)
结构化程序设计(StructuredProgramming简称SP)
2.自顶向下的过程是分解的过程;
自底向上的过程是抽象的过程。
3.结构化分析方法的分析结果包括:
一套分层的数据流图、一本数据字典(包括E-R图)、
一组加工规约以及其他补充材料。
4.数据流图:
描述输入数据流到输出数据流的变换(即加工)过程,用于对系统的功能建模
基本图形元素
数据流(dataflow):
带箭头横线
加工(process):
至少有一个输入和输出:
圆形
文件(file):
源或宿:
长方形
1.源或宿:
存在于软件系统之外的人员或组织,表示软件系统输入数据的来源和输出数据的去向,因此也称为源点和终点
源或宿用相同的图形符号表示:
a.当数据流从该符号流出时表示是源
b.当数据流流向该符号时表示是宿
c.当两者皆有时表示既是源又是宿
2.加工:
描述输入数据流到输出数据流的变换
1 每个加工用一个定义明确的名字标识
2 至少有一个输入数据流和一个输出流
3 可以有多个输入数据流和多个输出数据流
3.文件:
保存数据信息的外部单元
1 每个文件用一个定义明确的名字标识
2 由加工进行读写
3 DFD中称为文件,但在具体实现时可以用文件系统实现也可以用数据库系统等实现
4.每个数据流用由一组固定成分的数据组成并拥有一个定义明确的名字标识
数据流图的层次结构
数据流的流向:
1 从一个加工流向另一个加工
2 从加工流向文件(写文件)
3 从文件流向加工(读文件)
4 从源流向加工
5 从加工流向宿
数据流图的各个层次:
1 顶层图(0曾图):
1张
只有代表整个软件系统的1个加工,描述了软件系统与外界(源或宿)之间的数据流
顶层图中的加工经分解后的图称为0层图(只有1张)
2 中间层图:
中至少有一个加工(也可以有多个)在下层图中分解成一张子图
3 底层图:
处于最底层的图称为底层图,其中所有的加工不再分解成新的子图
5.分层数据流图的一致性
父图子图平衡
数据守恒
局部文件
一个加工的输入和输出数据库不能同名
6.分层数据流图的完整性
a.每个加工至少有一个输入数据流和一个输出数据流
b.在整套分层数据流中,每个文件应至少有一个加工读该文件,有另一个加工写该文件
c.分层数据流图中的每个数据流和文件都必须命名(除了流入或流出文件的数据流),并保持与数据字典的一致
a)分层DFD中的每个基本加工(即不再分解子图的加工)都应有一个加工规约
7.数据字典
1)字典条目
a.数据流
b.文件
c.数据项(组成数据流和文件的数据)
d.加工
e.源或宿
2)描述符号
5.描述基本加工的小说明
加工逻辑的描述方法:
a.结构化语言:
介于自然语言和形式语言之间的一种半形式语言
b.判定表(p90):
适用于加工逻辑包含多个条件,而不同的条件组合需做不同的动作
c.判定树(p91):
判定表的变种,它本质上与判定表是相同的,只是表示形式不同
6.结构化需求:
数据流图
结构化设计:
软件结构图
7.结构图
将结构化分析得到的数据流图映射成软件体系结构的一种设计方法
深度:
程序结构图中控制的层数
宽度:
程序结构图中同一层次上模块总数的最大值
扇出:
该模块直接调用的模块数目
擅入:
能直接调用该模块的模块数目
启发式设计策略
a.改造程序结构图,降低耦合度,提高内聚度
b.避免高扇出,并随着深度的增加,力求高扇入
c.模块的影响范围应限制在该模块的控制范围内
d.降低模块接口的复杂程度和冗余程度,提高一致性
e.模块的功能应是可测的,避免对模块施加过多限制
f.尽可能设计单入口和单出口的模块
单入口和单出口的模块能有效地避免内容耦合,因此在结构化设计时应尽量将模块设计成单入口和单出口。
8.数据流图到软件体系结构的映射
第13章软件测试
1.软件测试概念:
为了证明程序是正确的,即测试能发现程序中所有的错误
1)软件目的:
发现软件中的错误和缺陷,并加以改正。
2)软件测试的基本原则:
a.所以测试都可以追溯到客户需求
b.应该在测试工作开始前较长一段时间就做测试计划
c.测试的模板发现的错误越多潜藏的错误可能越多
d.测试应从小到大规模测试
e.穷举测试不可能
f.最好是第三方来测试
3)测试用例:
由测试输入数据和预期结果组成
2.白盒测试:
把测试对象看作一个透明的盒子,测试人员根据程序内部的逻辑结构及有
关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确
地工作
语句覆盖:
被测程序的每个可执行语句都至少执行一次
判定覆盖:
被测程序的每个判定的所有可能结果都至少执行一次
(即判定的每个分支至少经过一次)
条件覆盖:
被测程序的每个判定中的每个条件的所有可能结果都至少出现一次
判定/条件覆盖:
测程序的每个判定的所有可能结果都至少执行一次,并且,每个判
定中的每个条件的所有可能结果都至少出现一次
条件组合覆盖:
被测程序的每个判定中条件结果的所有可能组合都至少出现一次
路径覆盖:
被测程序的每条可能执行到的路径都至少经过一次(如果程序中包含环
路,则要求每条环路至少经过一次)
3.黑盒测试:
把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和
内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的
功能需求
等价类划分:
指输入域的某个子集,该子集中的每个输入数据对揭露软件中的错误
都是等效的,测试等价类的某个代表值就等价于对这一类其他值的测
试
a.有效输入数据:
指符合规格说明要求的合理的输入数据,主要用来检验程序是否实现了规格说明中的功能
b.无效输入数据:
指不符合规格说明要求的不合理或非法的输入数据,主要用来检验程序是否做了规格说明以外的事
用等价类划分法设计测试用例的实例:
某编译程序的规格说明中关于标识符的规定如下:
标识符是由字母开头,后跟字母或数字的任意组合构成;
标识符的字符数为1∽8个;
标识符必须先说明后使用;
一个说明语句中至少有一个标识符;
保留字不能用作变量标识符。
边界值分析:
专门挑选那些位于边界附近的值(即正好等于、或刚刚大于、或刚刚
小于边界的值)作为测试用例
4、测试策略
V模型:
描述软件开发各阶段与测试策略之间的对应关系。
1.一种测试策略就是将测试分为:
a.单元测试:
是针对程序中的模块或构件,主要揭露编码阶段产生的错误。
b.集成测试:
针对集成的软件系统,主要揭露设计阶段产生的错误。
c.确认测试:
是根据软件需求规约对集成的软件进行确认,主要揭露不符合需求规约的错误。
d.系统测试:
对于基于计算机系统中的软件,还需将它集成到基于计算机系统中,并进行系统测试,以揭露不符合系统工程中对软件要求的错误。
2.单元测试过程
1 单元测试通常与编码工作结合起来进行。
2 模块本身不是一个独立的程序,在测试模块时,必须为每个被测模块开发一个驱动(driver)
程序和若干个桩(stub)模块。
驱动模块:
接收测试数据,调用被测模块,把测试数据传送给被测模块,被测模块执行后,
驱动模块接收被测模块的返回数据,并打印相关结果
桩模块的功能:
是替代被被测模块调用的模块,它接受被测模块的调用,验证入口信息,
把控制连同模拟结果返回给被测模块
3.集成测试:
经单元测试后,每个模块都能独立工作,但把它们放在一起往往不能正常工作
1)非增量式集成
2)增量式集成
a.自顶向下集成:
(桩模块)
深度优先测试:
广度优先测试:
b.自底向上集成:
(驱动模块)
4.确认测试:
确认测试以软件需求规约为依据,以发现软件与需求不一致的错误
a.主要检查软件是否实现了规约规定的全部功能要求,文档资料是否完整、正确、合理,
其他的需求,如可移植性、可维护性、兼容性、错误恢复能力等是否满足
a.确认测试的结果可分为两类:
满足需求规约要求的功能或性能特性,用户可以接受。
发现与需求规约有偏差,此时需列出问题清单。
5.系统测试:
系统测试是对整个基于计算机的系统进行的一系列测试
6.调试:
目的是确定错误的原因和准确位置,并加以纠正
调试方法:
1.蛮力法:
是一种最省脑筋但又最低效的方法
2.回溯法:
是从错误的征兆出发,人工沿着控制流程往回跟踪,直至发现错误的根
源
3.原因排除法:
又可分为归纳法和演绎法
第15章软件维护
1.软件维护:
软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程。
2.维护的分类(从优先级别从高----->
低)
1 纠错性维护
2 适应性维护
3 改善性维护
4 预防性维护
3.维护的过程
1 建立维护组织
2 确定维护过程
3 保管维护记录
4 进行维护评价
4.影响软件可维护性的因素
1 可理解性
2 可测试性
3 可修改性
4 可移植性
5.提高可维护性的方法
1 确定质量管理目标和优先级
2 使用提高软件质量的技术与工具
3 选择可维护性高程序设计语言
4 完善程序文档
5 进行质量保证审查
6.4种类型的软件审查
1 在检查点进行复审
2 验收检查
3 周期性地维护审查
4 对软件包进行检查