天津专升本软件工程导论.docx
《天津专升本软件工程导论.docx》由会员分享,可在线阅读,更多相关《天津专升本软件工程导论.docx(32页珍藏版)》请在冰豆网上搜索。
天津专升本软件工程导论
软
件
工
程
导
论
目录
第1章软件工程学概述
1、软件的定义
软件=程序+数据结构+文档:
(1)完成特定功能的程序;
(2)适合程序处理的数据结构;(3)描述程序功能、如何操作和使用的相关文档。
2、什么是软件危机?
它的典型表现有哪些?
产生它的原因是什么?
软件危机:
在计算机软件的开发和维护过程中所遇到的一系列严重问题。
典型表现:
(1)对软件开发成本和进度的估计极不准确;
(2)软件产品质量较差,可靠性低;
(3)用户对开发出来的软件产品不满意;
(4)开发出来的软件几乎是不可维护的;
(5)软件产品缺少应有的文档资料;
(6)软件产品的供不应求。
客观原因(软件的特征):
⑴软件是开发的,而不是制造的;⑵软件不磨损,但退化;⑶自定义特性使其不同于其他的硬件产品的标准化,软件都规模庞大,而程序的复杂性是随其规模的扩大呈指数增加。
主观原因:
⑴对用户要求没有完整和准确的认识就匆忙编写程序;⑵对软件的开发过程的认识不准确;⑶对软件质量的重视不够是造成软件开发成本激增的主要原因;⑷轻视软件维护将是一个重大的错误。
3、什么是软件工程?
它的本质特征有哪些?
软件工程:
采用工程的概念、原理、技术和方法,并结合正确的管理技术和能够得到的最先进的技术方法,经济有效地开发和维护软件的一门新兴工程学科。
本质特征:
⑴一般更关注于大型软件系统的开发;⑵其中心任务是控制整个软件系统的复杂性;⑶提高软件开发的效率;⑷加强人员和技术的管理;⑸更好地满足用户的需求。
4、简述软件工程的基本原理。
(分别在每个要点后补充说明)
⑴用分阶段的生命周期计划严格管理;⑵坚持进行阶段评审;⑶实行严格的产品控制;⑷采用现代设计技术;⑸结果应能清楚地审查;⑹开发小组的成员应该少而精;⑺承认不断改进软件工程实践的必要性。
5、软件工程方法学:
主要包含3个要素,方法、工具和过程;
应用最广泛的有传统方法学;面向对象方法学。
6、什么是软件生命周期?
它分为哪三个阶段,每个阶段又包含哪几个时期?
软件生命周期:
一个软件从定义、开发、使用和维护,直至最终被废弃,需要经历的漫长时期。
㈠软件定义
⑴问题定义:
明确软件系统需要解决的问题是什么。
确定问题的性质;软件目标和规模;形成书面报告。
⑵可行性研究:
确定软件系统是否值得去解。
高层次的系统分析和设计;估算系统的成本和效益;产生文档《可行性研究报告》。
⑶需求分析:
解决这些问题需要系统做什么。
与用户交流;生成系统逻辑模型;产生文档《软件需求规格说明书》。
㈡软件开发
⑷总体设计(概要设计):
应该怎样实现目标系统。
设计出实现目标系统的方案;设计软件结构,确定模块及之间关系。
⑸详细设计(模块设计):
如何具体地实现这个系统。
详细的设计每个模块的算法和数据结构。
⑹编码和单元测试:
写代码,测试每个模块。
选取程序设计语言;写出容易理解和维护的程序模块;对每一个模块进行严格的测试)。
⑺综合测试:
通过各类测试和调试来完善软件。
集成测试+验收测试(用户参加);保存测试计划、测试方案和测试结果。
㈢运行维护
⑻软件维护:
通过各种必须的维护活动使系统持久地满足用户的需要。
维护活动有:
改正性维护;适应性维护;完善性维护;预防性维护。
7、软件生命周期的模型
㈠瀑布模型(线性模型之一)
特点:
(1)各阶段之间有依赖性和严格的顺序性;
(2)推迟实现——典型特点;(3)严格的阶段质保;(4)文档驱动。
问题:
(1)实际的项目很少顺序严格;
(2)用户往往难以给出具体、正确、完整的要求;(3)开发人员“阻塞状态”严重。
㈡(快速)原型模型
特点:
(1)出品速度快;
(2)逐步求精;(3)开发阶段迭代。
问题:
(1)实现过程中不应有的折衷方案;
(2)开发者急于完成原型而忽略了整体设计和可维护性;(3)用户的参与过多也造成了软件开发管理的混乱。
适用范围:
结构和算法不复杂的系统
㈢增量模型(渐增模型)
特点:
(1)结合了线性模型和原型模型的特点;
(2)每个增量可以结合原型法;(3)系统的问世提前→“增量1”
问题:
开放的软件体系结构;中心思想:
“渐进开发,逐步完善”
㈣喷泉模型:
典型的面向对象的软件过程模型之一,“喷泉”较好地体现了面向对象软件开发过程迭代和无缝的特性。
第2章可行性研究
1、为什么要进行可行性研究?
目标:
“用最小的代价和尽可能短的时间判断问题是否值得去解?
”
实质:
高层次的系统分析和设计
主要任务:
(1)分析和澄清问题定义;
(2)导出系统的逻辑模型;(3)探索各种解法并研究每种解法的可行性;(4)制定粗略的进度、建议和计划。
2、研究软件工程项目的可行性要从哪几个方面着手?
⑴技术可行性;⑵经济可行性;⑶操作可行性;⑷社会可行性
3、简述软件工程的可行性研究的步骤?
(1)复查系统规模与目标:
访问关键人员,复查确认系统规模和目标;清晰描述对目标系统的一切限制和约束。
(2)研究目前正在使用的系统:
了解现有系统,实地考察;注意现有系统与目标系统之间的接口(功能);运行费用。
(3)导出新系统的高层逻辑模型:
从现有的物理系统出发导出目标系统的逻辑模型。
(4)导出与评价各种方案:
(逻辑模型——〉物理解法)评估解决方案的可行性;给出实现进度表。
(5)推荐行动方针:
作为结果之一是否继续开发?
对推荐的系统详细的成本/效益分析。
(6)草拟初步的开发计划:
制定工程进度表;开发人员需求;设备与软件的需求(使用情况说明);估计软件生命周期每个阶段的成本;给出下一个阶段的进度表/成本估计。
(7)编写《可行性研究报告》并提交审查
4、可行性研究的工具(什么是数据流图、由哪几部分组成、含义是什么?
)
(1)系统流程图:
用图形符号以黑盒子形式描绘组成系统的每个部件(程序、文档、数据库、人工过程)。
注:
系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程(程序流程图)。
(2)数据流程图:
数据流图(DataFlowDiagram)是一种用图形符号表示数据流从输入到输出的移动变换过程,即数据流图描绘数据在软件中流动和被处理的逻辑过程。
•源点/终点(名词):
表示图中要处理数据的输入来源或处理结果要送往何处。
它是数据流图的外围环境中的实体。
•加工/变换(动宾结构):
使用椭圆或圆角矩形表示。
它是以数据结构或数据内容作为加工对象的,是对数据进行处理的单元,是对数据流进行某些操作或变换。
•数据存储(名词):
和数据流一样都是数据,仅仅所处的状态不同。
数据存储是处于静止状态的数据,数据流是处于运动中的数据。
•数据流(名词):
沿箭头方向传送数据,指明被加工的数据与流向。
(3)熟记DFD的检查和修改原则及设计它的注意事项(p16-17)。
5、成本/效益分析可用哪些指标进行度量?
㈠成本估计:
从经济角度评价开发一个新的软件工程项目是否可行
⑴代码行技术:
软件成本=每行代码的平均成本×源代码行数
⑵任务分解技术:
软件开发成本=任务1的成本+任务2的成本+……
⑶自动估计成本技术:
使用软件工具
㈡效益分析:
有形效益和无形效益。
有形效益用货币时间价值、投资回收期、纯收入等指标进行度量。
无形的效益主要是从性质上、心理上进行衡量,很难直接进行量化。
⑴货币的时间价值(F=P(1+i)n)
P=F/(1+i)n
⑵投支回收期:
累积的经济效益(现在值)最初的投资所需的时间
⑶纯收入=(软件在整个生存期之内系统的)总累积经济效益(现在值)-最初投资
6、在企业管理中使用制图系统来取代大部分人工工作,每年可节省2000元。
若软件生存期5年,则5年可节省1万元。
开发这个系统共投资6000元。
设年利率是6%,利用上面计算货币现在价值的公式,可以算出引入制图系统后,每年预计节省的钱的现在价值。
如下表所示,试计算投资回收期和纯收入。
年
将来值(万元)
(1+i)n
现在值(万元)
累积的现在值(万元)
1
0.2
1.06
0.1887
0.1887
2
0.2
1.1236
0.1780
0.3667
3
0.2
1.1910
0.1679
0.5346
4
0.2
1.2625
0.1584
0.6930
5
0.2
1.3382
0.1495
0.8425
解:
由表中数据得第三年的经济效益为0.5346万元,还差0.6-0.5346=0.0654万元,则还需0.0654/0.1584=0.4129年,所以
投资回收期为3.4129年;
纯收入为0.8425-0.6=2425元
7、p19第8题
顶层数据流图:
一级DFD:
P20第9题:
顶层DFD:
DataFlowDiagram:
P20第10题
顶层DFD:
最终DFD:
Entiy-Relation图:
第3章需求分析
P30
1、需求分析阶段的基本任务是什么?
怎样理解此阶段的任务是“做什么”而不是“怎么做”?
任务:
完整、准确、清晰、具体地确定系统所要完成的工作。
(1)确定对系统的综合要求;
(2)分析系统的数据要求;
(3)建立软件的逻辑模型;
(4)编写软件需求规格说明书;
(5)需求分析评审:
验证一致性、完整性、现实性、有效性。
2、需求获取的方法分为几类,并说出各种方法的特点?
⑴、访谈:
最原始的获取用户需求的技术,时间长、片面性;
⑵、问卷调查:
通常与用户访谈组合使用,片面性、面广;
⑶、观察用户工作流程:
需要对复杂流程加深了解或对关键人物理解不清楚时使用,耗时长;
⑷、建立联合分析小组:
由软件开发方和客户方共同组成;
⑸、快速原型法:
需要多次修改。
3、什么是结构化分析方法?
该方法使用什么工具描述?
结构化分析技术是面向数据流自顶向下逐步求精进行需求获取的方法,适合于大型数据处理类型系统的需求分析。
实体-联系图E-R、数据流图DFD、数据字典DD,描述加工逻辑的结构化语言、判定表和判定树等。
4、什么是E-R图,由哪几部分组成,含义各是什么?
ER图,是一种面向问题的数据模型,是按照用户观点对数据建立的模型。
1实体:
对软件必须理解的复合信息的抽象;
2属性:
数据对象的性质;
3联系:
数据对象彼此之间相互连接的方式,
一对一1:
1、一对多1:
N、多对多M:
N。
5、什么是数据字典DD,作用是什么,有哪些条目?
DD对数据流图加以补充说明,是关于数据的信息的集合。
基本功能(作用):
定义数据。
复杂数据元素的组成方式:
①顺序;②选择;③重复;④可选。
内容:
定义DFD中每一个被命名的图形元素包含①名字及别名、②数据描述、③数据定义、④数据位置、⑤补充说明等。
P31第6题:
DFD
DD:
购书单=学生信息+教材信息
学生信息=学号+姓名+专业+年级
教材信息=教材名称+订购数量
7、DFD如下:
DD:
事务={入库零件|出库零件}
到货报表=零件信息+供应商
零件信息=零件编号+零件名称+订货数量+目前价格
供应商={主要供应商|次要供应商}
8、DFD如下:
DD:
生理信号=脉搏+体温+血压+心电图
9、DFD如下:
顶层DFD:
一级DFD:
二级DFD:
退房、调房类似于分房
DD条目:
列举“住户申请表”、其他类似
10、DFD:
DD条目:
名字:
报名表
别名:
报名单
定义:
报名表=报名者信息+课程名
报名者信息=姓名+性别+身份证号
描述:
提供报名者信息及考试课程
位置:
报名者书面填写
补充说明:
11、DD条目:
服务电话=[分机号码|外线号码]
分机号码=8201..8299
外线号码=0+[市话号码|长号码]
长号码=区号+市话号码
区号=000..300
市话号码=局号+分局号
局号=[455|325|999]
分局号=4{数字字符}4
12、见第二章第10题
13、DD条目:
用户标示符=字母字符+字母数字串
字母数字串=0{字母字符|数字字符}7
14、见教材P32.
第4章总体设计
1、总体设计的主要目的和任务是什么?
目的:
概括地说,系统应该如何实现;
任务:
①系统设计阶段,确定系统的具体实现方案;②结构设计阶段,确定系统的软件结构。
2、什么是结构化设计,通常把结构化设计分为哪两个阶段?
SD,面向(基于)数据流的设计方法;分为系统设计阶段和结构设计阶段。
3、软件结构设计原理(名词解释)
⑴模块:
由边界元素限定的相邻程序元素的序列,而且由一个总体标识符代表它。
模块化:
解决一个复杂的问题时,自顶向下逐层把软件系统划分成若干个能完成特定子功能的模块的过程。
⑵抽象:
抽出事物本质特性而不考虑细节(具体—>抽象—>具体);
逐步求精:
为了能集中精力解决主要问题而尽量推迟考虑问题的细节。
⑶信息隐藏:
设计和确定模块时,使得一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的。
局部化:
把一些关系密切的软件元素物理地放得彼此靠近;
优点:
防止错误的扩大与传播。
⑷模块独立性:
每个模块完成一个相对独立的特定子功能,并且和其他模块之间的联系最少切接口简单。
Ⅰ、耦合:
一个软件结构内不同模块间的相互联系紧密程度(耦合强弱取决于接口的复杂程度、调用方式及传递的信息)。
耦合度由低到高:
①无直接耦合:
模块间没有直接联系,不传递任何信息;
②数据耦合:
模块间有调用关系,传递简单数据值;
③控制耦合:
模块间调用时传递的是控制变量;
④特征耦合:
模块间调用时传递的是某些特征数据;
⑤公共耦合:
模块间通过一个公共数据环境相互作用;
⑥内容耦合:
模块间调用时直接使用模块的内部数据或经非正常人口转入另一个模块。
Ⅱ、内聚:
模块内各元素彼此结合的紧密程度。
内聚度由低中高依次为:
①偶然内聚:
元素间没有任何联系;
②逻辑内聚:
模块内执行几个逻辑相似的功能,通过参数确定执行哪一个模块(选择结构);
③时间内聚:
把需要同时执行的动作组合在一起;
④过程内聚:
模块内部的处理是相关的且以特定的次序执行;
⑤通信内聚:
所处理的元素在同一数据结构上,或使用相同的输入数据或者产生相同的输出数据;
⑥顺序内聚:
所处理的元素密切相关于同一功能且顺序执行;
⑦功能内聚:
所有数据元素共同完成一个功能,缺一不可。
Ⅲ、力争做到高内聚低耦合,两者矛盾时内聚更重要应予以更多重视。
4、试比较软件结构图与层次图的异同
同:
都是描绘软件结构的图形工具,图中的一个矩形框代表一个模块,框间连线表示调用关系;
异:
层次图适于在自顶向下设计软件的过程中使用;结构图中还有带注释的箭头表示模块间的信息传递,还包括助记符号(菱形表选择调用、弧形箭头表循环调用)。
5、什么是HIPO图?
H(带编号的层次)图+每个模块的IPO图(与每个方框对应有一张IPO图来描绘这个模块的处理工程)
6、模块独立性准则、软件结构形态特征准则分别是什么?
⑴模块独立性准则:
通过模块分解(独立成一个子功能模块)或合并(功能相关模块),力求做到低耦合高内聚,保持模块相对独立性。
⑵模块的控制域包含作用域:
通过上移判断点、下移受判断影响的模块加以改进。
⑶软件结构的形态特征准则:
①深度、宽度适当;②扇入数大比较好;③不能把功能无关的元素凑在一起形成超级模块;④顶扇出数高,中扇出数较低,底扇入数高。
⑷模块大小准则:
50-150条语句左右,1-2页纸。
⑸模块的接口准则:
设计简单、功能可预测、划分适当。
7、数据流图转换成软件结构图:
(DFD)
SC:
8、第11题DFD如下:
软件结构图SD如下:
第5章详细设计
1、详细设计的目的和主要任务?
(P66第1题)
为软件结构图(SC图或HC图)中的每一个模块确定采用的算法和块内数据结构,用某种选定的表达工具给出清晰的描述.
设计出程序的“蓝图”,编写软件的“详细设计说明书”.
2、详细设计的工具有哪些,简要介绍?
⑴程序流程图:
对控制流程的描绘很直观;不能逐步求精,可理解性差;可随意转移控制,违背结构程序设计的原则。
⑵盒图/N-S图/CHAPIN图:
不能任意转移控制;功能域(特定控制结构的作用域)明确;很容易确定局部和全程数据的作用域;适合结构化程序设计方法,对于非结构化程序无法表示。
⑶PAD图:
使用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易;所描绘程序结构清晰、易读、易懂、易记;支持自顶向下、逐步求精方法的使用。
⑷PDL(过程设计语言):
用于描述功能模块的算法设计和加工细节的语言,称为设计程序用语言,它是一种伪码,不能被编译;方便书写和编辑,描述复杂条件组合时也不如判定表方便。
⑸判定表和判定树:
⑴确定条件;⑵每个条件取值;⑶画出初步判定表;⑷简化后的判定表。
判定树适合于描述加工中具有多个策略,而且每个策略和若干条件有关的逻辑功能;数据元素重复书写,分枝的次序可能影响最终判定树的简介程度。
3、结构化程序设计的基本原则?
在详细设计中所有模块都使用单入口、单出口的顺序、选择、循环三种基本控制结构.
4、比较面向数据流和面向数据结构两类设计方法的异同?
(第8题)
同:
(1)遵守结构程序设计“由顶向下”逐步细化的原则,并以其为共同的基础;
(2)均服从“程序结构必须适应问题结构”的基本原则,各自拥有从问题结构(包括数据结构)导出程序结构的一组映射规则。
异:
(1)面向数据流的设计以数据流图为基础,在分析阶段用DFD表示软件的逻辑模型,在设计阶段按数据流类型,将数据流图转换为软件结构。
面向数据结构的设计以数据结构为基础,从问题的数据结构出发导出它的程序结构;
(2)面向数据流的设计的最终目标是软件的最终SC图,面向数据结构的设计的最终目标是程序的过程性描述。
5、Jackson方法分为哪几个步骤来完成设计?
⑴确定输入、输出数据的逻辑结构并用Jackson图表示;⑵找出输入、输出数据结构中有对应关系的数据单元;⑶按规则导出程序结构图;⑷在适当位置列出所有的操作条件;⑸用Pseudocode表示程序。
6、(第3题)程序流程图如下:
(第4题)流程图和盒图:
(第7题)PAD图如下:
(第10题)Jackson图如下:
(第11题)N-S图
PAD图:
(第12题)
判定表:
⑴判定条件可能取值表:
条件名称
取值
符号
取值数
性别
男
M
2
女
F
职工年龄
<25岁
A
3
25~40岁
B
40~50岁
C
文化程度
初中
J
3
高中
S
大学
U
⑵计算组合数:
2*3*3=18
⑶判定表:
1、10
2、11
3、6、9、
12、15、18
4
5
7、16
8、17
13
14
性别
--
--
M
M
M
--
--
F
F
职工年龄
A
A
A
B
B
C
C
B
B
文化程度
J
S
U
J
S
J
S
J
S
学习
√
电工
√
钳工
√
√
车工
√
√
技术员
√
协管员
√
√
(4)Pseudocode如下:
(第13题)判定表如下:
(1)判定条件的可能取值:
条件名称
取值
符号
取值数
行李重量
≤30
W
2
>30
U
机舱等级
头等
F
2
其他
O
是否为国内乘客
是
Y
2
否
N
健康状况
正常
Z
2
残疾
C
(2)计算条件组合数:
2*2*2*2=16
(3)判定表
1-8
9
10
11
12
13
14
15
16
行李重量
W
U
U
U
U
U
U
U
U
机舱等级
--
F
F
F
F
O
O
O
O
是否为
国内乘客
--
Y
Y
N
N
Y
Y
N
N
健康状况
--
Z
C
Z
C
Z
C
Z
C
行李收费
价格(元)
0
(U-30)
*4
(U-30)
*2
(U-30)
*8
(U-30)
*4
(U-30)
*6
(U-30)
*3
(U-30)
*12
(U-30)
*6
判定树如下:
第6章实现
1、程序设计语言可以分为哪几类?
面向机器语言:
机器语言、汇编语言;
高级语言:
通用语言(BASIC、C等)、专用语言(PROLOG、LISP)
2、什么是编码风格,为了编好程序,应遵守哪些规则?
在不影响程序正确性和效率的前提下,有效、合理地编排和组织程序的基本原则。
⑴程序内部文档:
①标示符(命名及说明);②注解(序言、描述性注解);③布局(阶梯式)
⑵语句构造及书写:
①构造规则;②书写原则
⑶输入/输出:
①输入设计原则;②输出设计原则
⑷效率:
有良好编码风格的基础上提高效率
3、程序复杂度度量
⑴McCabe方法:
根据程序控制流环形复杂度定量度量程序复杂度。
①程序流程图->流图
②环形复杂度a.V=区域数/判断节点+1/边-节点+2
③V≦10(10更科学的上限)、可加性VA+VB(A与B)
⑵Halstead方法:
根据运算符和操作数的总个数度量程序复杂度
N实=N1(运算符出现次数)+N2(操作数出现次数)
H预=n1log2n1+n2log2n2(n1不同运算符个数,n2不同操作数个数)
E误=N实log2(n1+n2)/3000
(P74第5题)判定条件个数为3,故环型复杂度V=3+1=4
流图如下:
第7章软件测试
1、软件测试的目标(定义)、准则。
2、软件测试方法
(1)测试时是否需要执行被测软件?
静态测试:
特性分析无须执行借助软件评审文档或程序编程标准减少错误。
主要方法:
个人代码走查;小组代码检查;代码评审;静态结构分析;代码质量度量。
动态测试:
实际运行输入用例判定结果检验正确性可靠性有效性。
主要方法:
白盒测试、黑盒测试、灰盒测试
(2)测试是否针对内部结构和具体实现算法?
白盒测试:
结构测试、逻辑驱动测试或基于程序的测试;内部细节
逻辑路径 规约及程序清单。
黑盒测试:
功能测试、数据驱动测试或基于规格说明的测试;用户观点 当作黑盒 只考虑程序输入输出和程序功能 根据需求规格说明书设计 推断测试结果的正确性。
3、软件测试过程
⑴单元测试:
将每个模块作为一个独立的实体来测试。
测试重点:
模块间的接口、局部数据结构、重要的执行通路(选择、循环等)、出错处理通路、边界条件
环境:
①驱动模块,用来模拟被测试模块的上一级模块;②桩模块,用来模拟被测试模块工作中所有的调用模块。
⑵集成测试:
按照概要设计的要求组装独立模块成为子系统或系统,同时经过测试来发现接口错误的一种系统化的测试。
单元测试完成后为什么还需要集成测试?
数据穿过接口时可能丢失;一模块