软件工程总结.docx
《软件工程总结.docx》由会员分享,可在线阅读,更多相关《软件工程总结.docx(20页珍藏版)》请在冰点文库上搜索。
![软件工程总结.docx](https://file1.bingdoc.com/fileroot1/2023-6/28/b3966840-a246-415e-8576-7ec376b2913d/b3966840-a246-415e-8576-7ec376b2913d1.gif)
软件工程总结
第一章软件工程学概述
1.1软件危机
(1)危机表现:
1、对软件开发成本和进度估计常常很不准确。
2、用户对“已完成的”图案件系统很不满意的现象经常发生。
3、软件产品的质量往往靠不住,。
4、软件常常是不可维护的。
5、软件通常没有适当的文档资料。
6、软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
(2)消除软件危机的途径:
1、首先应该对计算机软件有一个正确的认识。
2、应该推广使用在实践中总结出来的开发软件的成功的技术和方法。
3、应该开发和使用更好的软件工具。
4、总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
1.2软件工程
(1)1968年在第一届NATO会议上曾经给出了软件工程的一个早期定义:
软件工程就是为了经济地可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。
1993年IEEE进一步给出了更全面更具体的定义:
软件工程是:
把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;
研究中提到的途径。
(2)软件工程的本质特性:
1、软件工程关注于大型程序的构造。
2、软件工程的中心课题是控制复杂性。
3、软件经常变化。
4、开发软件的效率非常重要。
5、和谐地合作是开发软件的关键。
6、软件必须有效地支持它的用户。
7、在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产产品。
(3)软件工程的基本原理:
1、用分阶段的生命周期计划严格管理。
2、坚持进行阶段评审。
3、实行严格的产品控制。
4、采用现代程序设计技术。
5、结果应能清楚地审查。
6、开发小组人员应该少而精。
7、承认不断改进软件工程实践的必要性。
1.4软件过程
(1)软件开发的特点:
1、阶段间具有顺序性和依赖性。
2、推迟实现的观点。
3、质量保证的观点。
(2)几个模型:
1、瀑布模型。
2、快速原型模型。
3、增量模型。
4、螺旋模型。
5、喷泉模型(面向对象方法学)。
所谓模型,就是为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述。
第二章可行性研究
2.1可行性研究的任务
(1)研究可行性的五个方面:
1、技术可行性。
2、经济可行性。
3、操作可行性。
4、法律可行性。
5、社会可行性。
2.4数据流图
(1)数据流图(DFD):
1、用来描述软件系统的高级逻辑。
2、描述系统的功能集合。
3、描述系统的边界。
4、描述系统的处理过程。
(2)分层的依据:
7±2原则。
2.5数据字典
(1)数据字典(DD):
是关于数据的信息集合,也就是对数据流图中包含的所有元素的定义的集合。
(2)习题:
北京某高校可用的电话号码有以下几类:
校内电话号码由4位数字组成,第1位数字不是0;校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,若是本市电话则再接着拨8位数字(第1位不是0),若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)。
请用定义数据字典的方法,定义上述的电话号码。
解:
●电话号码=[校内电话号码|校外电话号码]
●校内电话号码=非零数字+3位数字//后面继续定义
●校外电话号码=[本市号码|外地号码]
●本市号码=数字零+8位数字
●外地号码=数字零+3位数字+8位数字
●非零数字=[1|2|3|4|5|6|7|8|9]
●数字零=0
●3位数字=3{数字}3//3至3个数字
●8位数字=非零数字+7位数字
●7位数字=7{数字}7
●数字=[0|1|2|3|4|5|6|7|8|9]
第三章需求分析
(1)软件的七大功能:
增、删、改、查、统、安、帮。
(2)软件的五大需求:
功能、性能、数据、环境、将来。
(3)分析的最大成果就是建模。
分析抽象建模画图
三个模型
(4)需求分析的方法遵守的准则(三型两化)
1、必须理解并描述问题的信息域,根据这条准则应该建立数据模型。
(ER图)
2、必须定义软件应完成的功能,这条准则要求建立功能模型。
(DFD)
3、必须描述作为外部事件结果的软件行为,这条准则要求建立行为模型。
(状态图)
4、必须对描述信息、功能和行为的模型进行分解,用层次的方式展示细节。
(5)
ER转换类和对象图
第五章总体设计
(1)
设计模型分析模型
用图形描述结构化分析建模和结构化设计建模并解释它。
5.2设计原理
(1)模块:
是由边界元素限定的相邻元素的序列,而且有一个总体标示符代表它。
(2)模块化:
就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
(3)模块独立
1、追求高内聚,低耦合。
2、耦合:
无耦合<数据耦合<控制耦合<公共环境耦合<内容耦合
出现内容耦合的情况:
●一个模块访问另一个模块的内部数据。
●一个模块不通过正常入口而转到另一个模块的内容。
●两个模块有一部分程序代码重叠(只可能出现在汇编程序中)。
●一个模块有多个入口(这意味着一个模块有几种功能)。
3、内聚:
功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚
功能内聚:
如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。
5.3启发规则
(1)启发式规则:
1、改进软件结构提高模块独立性。
2、模块规模应该适中。
3、深度、宽度、扇出和扇入都应该适当。
4、模块的作用域应该在控制域之内。
5、力争降低模块接口的复杂程度。
6、设计单入口单出口的模块。
7、模块功能应该可以预测。
第六章
142页,第七题
142页第八题
计算环形复杂度的方法:
(1)区域数等于环形复杂度
(2)流图V(G)=E-N-2(其中E为边条数,N为节点数)
(3)流图V(G)=P+1(P是流图中判定节点的数目)
第七章
1.测试的概念:
测试是为了发现程序中的错误而执行程序的过程。
2.测试的目标:
(1)测试是为了发现程序中的错误而执行程序的过程。
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。
(3)成功的测试是发现了迄今为止尚未发现的错误的测试。
3.测试的准则:
(1)所有的测试都应该能追溯到用户需求。
(2)应该远在测试开始之前就制定出测试计划。
(3)把二八定律应用到软件测试中。
(4)应该从“小规模”测试开始,并逐步进行“大规模”测试。
(5)穷举测试是不可能的。
(6)为了达到最佳的测试效果,应该由独立的第三方从事测试工作。
4.模块并不是一个独立的程序,因此必须为每个单元测试开发驱动软件和(或)存根软件。
通常驱动程序也就是一个“主程序”,它接收测试数据,把这些数据传送给被测试的模块,并且印出有关结果。
存根程序代替被测试的模块所调用的模块。
因此存根程序也可以称为“虚拟子程序”。
它使用被他代替的模块接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用他的模块。
5.软件有效性:
如果软件的功能和性能如同用户所合理期待的那样,软件就是有效的。
6.确认测试有下述两种可能的结果:
(1)功能和性能与用户的要求一致,软件是可以接受的。
(2)功能和性能与用户要求有差距。
7.语句覆盖:
选择足够多的测试数据,使被测程序中每个语句至少执行一次。
8.判定覆盖:
每个判定的每个分支都至少执行一次。
9.条件覆盖:
每个语句至少执行一次,判定表达式中的每个条件都取到各种可能的果。
给出一段程序,请画出流图,写出一组独立路径,并设计一组测试用例。
PROCEDUREaverage;
INTERFACERETURENSaverage,total.input,total.valid;
INTERFACEACCEPTSvalue,minimum,maximum;
TYPEvalue[1……100]ISSCALARARRAY;
TYPEaverage,total.input,total.valid;
minimum,maximum,sumISSCALAR;
TYPEiISINTEGER;
1:
i=1;
Total.input=total.valid=0;
Sum=0;
2:
DOWHILEvalue[i]<>-999
3:
ANDtotal.input<100;
4:
Incrementmaximumtotal.inputby1;
5:
IFvalue[i]=minimum
6:
ANDvalue[i]<=maximum
7:
THENIncrementtotal.validby1;
Sum=sum+value[i];
8:
ENDIF
Incrementiby1;
9:
ENDDO
10:
IFtotal.valid>0
11:
THENaverage=sum/total.valid;
12:
ELSEaverage=-999;
13:
ENDIF
ENDaverage
独立路径:
路径1:
1-2-10-11-13
路径2:
1-2-10-12-13
路径3:
1-2-3-10-11-13
路径4:
1-2-3-4-5-8-9-2-…
路径5:
1-2-3-4-5-6-8-9-2-…
路径6:
1-2-3-4-5-6-7-8-9-2-…
测试用例:
路径1的测试用例:
value[k]=有效输入值,其中k
Value[i]=-999,其中2=
预期结果:
基于K的正确平均值和总数。
第八章
1.软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程
2.有四种维护:
改正性维护,适应性维护,完善性维护,预防性维护
3.维护的无形代价?
维护的问题?
维护的无形代价:
(1)因为可用的资源必须工维护任务使用,以致耽误甚至丧失了开发的良机
(2)当看起来合理的有关改错或修改的要求不能及时满足时将引起用户不满
(3)由于维护时的改动,在软件中引入了潜伏的错误,从而降低了软件的质量
(4)当必须把软件工程师调去从事维护工作时,将在开发过程中造成混乱
维护的问题:
(1)理解别人写的程序通常非常困难,而且困难的程度随着软件配置成分的减少而巡视增加
(2)需要维护的软件往往没有合格的文档,或者文档的资料显著不足
(3)当要求对软件进行维护时,不能指望由开发人员非人们仔细说明软件
(4)绝大多数软件在设计时没有考虑将来的修改
4.决定软件可维护性的因素
(1)可理解性
(2)可测试性
(3)可修改性
(4)可移植性
(5)可重用性
第九章
1.面向对象方法学的要点
(1)对象
(2)类(3)继承(4)消息
2.面向对象方法学的优点
(1)与人类习惯的思维方法一致
(2)稳定性好
(3)可重用性好
(4)较易开发大型软件产品
(5)可维护性好
3.对象的特点
(1)以数据为中心
(2)对象是主动的
(3)实现了数据封装
(4)本质上具有并行性
(5)模块独立性好
4.三种模型间的关系
(1)针对每个类建立的动态模型,描述了类实现的生命周期或运行周期
(2)状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用力他们同时与类图中的服务相对应
(3)功能模型中的处理对应于对象模型中的类所提供的服务
(4)数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象
(5)数据流图中的数据流,往往是对象模型中的对象属性值,也可能是整个对象
(6)用例图中的行为者,可能是对象模型中的对象
(7)功能模型中的处理(或用例)可能产生动态模型中的事件
(8)对象模型描述了数据流图中的数据流,数据存储以及数据源点/终点的结构
5.面向对象设计的准则
(1)模块化
(2)抽象
(3)信息隐藏
(4)弱耦合
(5)强内聚
(6)可重用
第十章
3个子模型5个层次
启发式规则(3)
人机界面设计的问题(3)
第九章
面向对象方法4个要点:
1.认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。
2.把所有对象都划分成各种对象类,每个对象类都定义了一组数据和一组方法。
3.按照子类与父类的关系,把若干个对象类组成一个层次结构的系统。
4.对象彼此之间仅能通过传递消息互相联系。
面向对象方法学概括:
OO=对象+类+继承+消息传递
对象的特点
1.以数据为中心。
2.对象是主动地。
3.实现了数据封装
4.本质上具有封装
5.模块独立性块
3种模型之间的关系
1.针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。
2.状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。
3.功能模型中的处理对应于对象模型中的类所提供的服务。
4.数据流图中的数据存储,以及数据的原点/终点,通常是对象模型中的对象。
5.数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象
6.用例图中的行为者,可能是对象模型中的对象
7.功能模型中的处理可能产生动态模型中的事件。
8.对象模型描述了数据流图中的数据流,数据储存以及数据源点/终点的结构
第11章面向对象设计
一.面向对象设计的准则:
1.模块化
2.抽象
3.信息隐藏
4.弱耦合
5.强内聚
6.可重用
二.启发规则:
1.设计结果应该清晰易懂
2.一般-特殊结构的深度应适当
3.设计简单的类
4.使用简单的协议
5.使用简单的服务
6.把设计变动减至最小
第十二章面向对象实现
第十三章软件项目管理
一.估算软件规模:
代码行技术:
是比较简单的定量估算软件规模的方法.这种方法依据以往开发类似产品的经验和历史数据,估计实现一个功能所需要的源程序行数.当有以往开发类似产品的历史数据可供参考时,用这种方法估计出的数值还是比较准确的.把实现每个功能所需要的源程序行数累加起来,就可以得到实现整个软件所需要的源程序行数.
下式计算程序规模的估计值:
L=a+4m+b/6
二.工程网路
工程网络是制定进度计划时另一种常用的图形工具,它同样能描绘任务分解情况以及每项作业的开始时间和结束时间,此外,它还显示地描绘各个作业彼此之间的依赖关系.
在工程网络中用箭头表示作业,用圆圈表示事件.注意事件仅仅可以明确的时间点,它并不是消耗时间和资源.作业通常既消耗资源又持续一定时间.用开始时间和结束时间的编号标识一个作业,在工程网络中的一个事件,如果既有箭头进入又有箭头离开,则它既是某些作业的结束又是另一些作业的开始.还有一些虚线箭头,它们表示虚拟作业,也就是事实上并不存在的作业.引入虚拟作业是为了显式地表示作业之间的依赖关系.注意,虚拟作业既不消耗资源也不需要时间.