软件工程论

第一章

1、软件是计算机系统中与硬件相互依存的另一部分。它包括程序、数据及其相关文档的完整集合。其中相关文档分为面向用户的文档和面向开发者的文档。

2、软件特点: 软件是一种逻辑实体,而不是具体的物理实体。软件的生产与硬件不同 ,无明显制造过程 。在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。定制的且本身是复杂的(逻辑结构复杂,解决问题复杂,相当多的软件都涉及到社会因素)开发与运行受制于计算机硬件,有依赖性至今尚未完全摆脱手工的开发方式

软件的成本相当昂贵。

3、软件危机:计算机软件的开发和维护过程中所遇到的一系列严重问题。(正常、不正常运行软件都具有这种问题)   

4、软件危机的典型表现:1)对软件开发成本和进度的估计常常很不准确;2)用户对完成的软件系统不满意的现象经常发生;3)软件产品的质量往往靠不住;4)软件常常是不可维护的;5)软件通常没有适当的文档资料;6)软件成本在计算机系统总成本中所占的比例逐年上升;7)软件开发生产率提高的速度跟不上计算机应用的发展趋势。

5、产生软件危机的原因:1)软件本身特点造成;2)软件开发与维护的方法不正确。

6、解决软件危机的途径:1)技术方法。推广使用在实践中总结出来的开发软件的成功技术和方法,并研究探索更有效的技术和方法;2)开发工具。开发和使用更好的软件工具;3)组织管理。良好的组织管理措施。

7、软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。软件工程是把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程;

8、软件工程的本质特性:1)软件工程关注于大型程序的构造;2)软件工程的中心课题是控制复杂性;3)软件经常变化;4)开发软件的效率非常重要;5)和谐地合作是软件开发的关键;6)软件必须有效地支持它的用户;7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。

9、软件工程的基本原理:1)用分阶段的生命周期计划严格管理;2)坚持进行阶段评审;3)实行严格的产品控制;4)采用现代程序设计技术;5)结果能清楚地审查;6)开发小组的人员应该少而精;7)承认不断改进软件工程实践的必要性。

10、通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。3要素:方法、工具和过程。

11、传统方法学:也称为生命周期方法学或结构化范型。结构化方法有:1)结构化设计方法(SD);2)结构化分析方法(SA); 3)结构化分析与设计技术(SADT);4)JACKSON方法;5)WARNIER方法。

12、 面向对象方法学:把数据和对数据的操作紧密结合起来的方法,模拟人类认识世界解决问题的方法和过程。面向对象的方法=对象(属性与服务的封装)+分类+继承+通过消息的通讯

13、软件生命周期:三个时期八个阶段:软件生命周期由软件定义(问题定义,可行性研究,需求分析)、软件开发(概要设计,详细设计,/(系统设计)编码和单元测试,综合测试/(系统实现))和运行维护(运行维护)三个时期组成。

14. 瀑布模型的特点:(1)阶段间具有顺序性和依赖性(2)推迟实现的观点(3)质量保证的观点

15.快速原型模型的特点:(1)快速模型是不带反馈环的(2)本质是快速

16.螺旋模型的基本思想:使用原型及其他方法来尽量降低风险

第二章

1、 可行性研究的目的是:用最小的代价在尽可能短的时间内确定问题是否有解,以及是否值得去解。

2、可行性研究的内容(任务):1)技术可行性;2)经济可行性;3)操作可行性;4)社会可行性;

3、可行性研究的步骤:1)复查系统规模和目标;2)研究目前正在使用的系统;3)导出新系统的高层逻辑模型(数据流图、数据字典);4)制定并推荐技术方案; 5)编写可行性分析报告;6)审查论证。

5、数据流图 (DFD) :是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。数据流图有四种基本符号:(1)正方形表示数据的源点或者终点(2)圆角矩形代表变换数据的处理(3)开口矩形代表数据存储(4)箭头表示数据流,即特定数据的流动方向

数据流图的用途:(1)利用它作为交流信息的工具(2)作为分析和设计的工具

6、数据字典:对数据流图中包含的所有元素的定义的集合;即对数据流图中出现的所有名字(数据流、文件、数据单项、基本加工)进行定义。

7、数据字典的内容: 1)数据流;2)数据元素(数据流分量);3)数据存储;4)处理。

8、数据元素字典定义的基本内容有:A.数据元素编号、名称及其含义;B.数据类型和长度;C.合理取值;D.其他内容,如它与其它数据的逻辑关系等。

9、数据流字典定义的基本内容有:A.数据流编号及名称;B.数据流来源;C.数据流去处;D.数据流的组成; E.流通量;F.峰值。

10、数据存储字典定义的基本内容有:A.数据存储编号及名称;B.数据存储的组成;C.其它要求。

11、数据处理字典定义的基本内容有:A.数据处理编号及名称;B.简单描述;C.输入/输出;D.功能描述;E.有关数据存储

第三章

1、 需求分析的任务:1)确定对系统的综合要求;2)分析系统的数据要求;3)导出系统的逻辑模型;4)修正系统开发计划。

2、 与用户沟通获取需求的方法:1)访谈;2)面向数据流自顶向下求精;3)简易的应用规格说明技术;4)快速建立软件原型 。

3、 所谓模型:就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。通常,模型由一组图形符号和组织这些图形符号的规则组成。1)实体联系图:建立数据模型,描述数据对象及数据对象之间的关系;2)数据流图:建立功能模型的基础;3)状态转换图:描绘系统的状态和状态间转换的方式。

4、 联系的类型:1)一对一联系(1:1)2)一对多联系(1:N)

3)多对多联系(M:N)

5、 层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。 Warnier图也用树形结构描绘信息,但是这种图形工具比层次方框图提供了更丰富的描绘手段。IPO图是输入/处理/输出图。

6、 验证软件需求:验证软件需求的正确性;验证软件需求的方法;用于需求分析的软件工具;

7. 需求分析要建立功能模型、数据模型、行为模型这三种模型)


8.Warnier图的定义:用他可以表明信息的逻辑组织,也就是说,他可以指出一类信息或一个信息元素是重复出现的,也可以表示特定信息在某一类信息中是有条件的出现的。

9.IPO图的定义:IPO图是输入,处理,输出图的简称,它是由美国IBM公司发展完善起来的一种图形工具,能够方便地描绘输入数据,对数据的处理和输出数据之间的关系。

第五章

1.总体设计的目的:总体设计又叫概要设计或初步设计,其基本目的就是回答“概括地说,系统应该如何实现”这个问题。

2.总体设计由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案(划分出组成系统的物理元素:程序、文件、数据库、文档和人工过程等,但是每个物理元素仍属于黑盒子级,这些黑盒子的具体内容将在详细设计阶段进行)(1)设想供选择的方案(2)选取合理的方案(3)推荐最佳方案。结构设计阶段,确定软件结构(也就是要确定系统中每个程序由哪些模块组成的,这些模块相互之间的关系是什么样的)(1)功能分解(2)设计软件结构(3)设计数据库

3.典型的总体设计过程包括下述9个步骤:(1)设想供选择的方案(2)选取合理的方案(3)推荐最佳方案(4)功能分解(5)设计软件结构(6)设计数据库(7)制定测试计划(8)书写文档 (9) 审查和复审

4.模块:是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。

5.抽象:现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。抽象就是抽出事物本质特性而暂时不考虑细节。

6.逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础。

7.信息隐藏:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。

8.局部化:局部化的概念和信息隐藏概念是密切相关的。所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近。显然,局部化有助于实现信息隐藏。

9.模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。开发具有独立功能而且和其它模块之间没有过多的相互作用的模块,就可以做到模块独立。换句话说,希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。

10.模块独立程度的两个定性标准度量:耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。耦合要低,即每个模块和其他模块之间的关系要简单;内聚衡量一个模块内部各个元素彼此结合的紧密程度。内聚要高,每个模块完成一个相对独立的特定子功能。

11.耦合:是对一个软件结构内不同模块之间互连程度的度量。

要求:在软件设计中应该追求尽可能松散耦合的系统。

可以研究、测试或维护任何一个模块,而不需要对系统的其他模块有很多了解;

模块间联系简单,发生在一处的错误传播到整个系统的可能性就很小;

模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。

12.耦合程度的度量:

(1) 非直接耦合/完全独立(no direct coupling)如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们完全独立。(2) 数据耦合(data coupling)

如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。(3) 特征耦合(stamp coupling)当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。(4) 控制耦合(control coupling):如果两个模块彼此间传递的信息中有控制信息,这种耦合称为控制耦合。(5)公共环境耦合(common coupling):当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等等。

13. 内聚:标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。

14. (1) 偶然内聚:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。(2) 逻辑内聚:如果一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。(3) 时间内聚:如果一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。4) 过程内聚:如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。(5) 通信内聚:如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。即在同一个数据结构上操作。(6) 顺序内聚:如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行,则称为顺序内聚。(7) 功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。

15. 启发规则:1. 改进软件结构提高模块独立性。通过模块分解或合并,降低耦合提高内聚。

从两个方面改进: (1)模块功能完善化。一个完整的模块包含:执行规定的功能的部分,出错处理的部分,返回一个“结束标志”。(2)消除重复功能,改善软件结构。完全相似,局部相似。2. 模块规模应该适中。(1)经验表明,一个模块的规模不应过大,最好能写在一页纸内。通常规定50~100行语句,最多不超过500行。数字只能作为参考,根本问题是要保证模块的独立性。(2)过大的模块往往是由于分解不充分,但是进一步分解必须符合问题结构,一般说来,分解后不应该降低模块独立性。(3)过小的模块开销大于有效操作,而且模块数目过多将使系统接口复杂。3. 深度、宽度、扇出和扇入都应适当(1)深度:软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。(2)宽度:软件结构内同一个层次上的模块总数的最大值。(3)扇出:一个模块直接控制(调用)的模块数目。(4)扇入:有多少个上级模块直接调用它。4. 模块的作用域应该在控制域之内。5. 力争降低模块接口的复杂程度。6. 设计单入口单出口的模块。

16. 描绘软件结构的图形工具1.层次图用来描绘软件的层次结构。很适于在自顶向下设计软件的过程中使用。2.HIPO图是美国IBM公司发明的“层次图+输入/处理/输出图”的英文缩写。层次图和层次方框图的区别:

      层次图

      层次方框图

作用描绘软件结构    描绘数据结构

矩形框模块

      数据元素

连线调用关系

      组成关系

17. 结构图和层次图类似,也是描绘软件结构的图形工具,是进行软件结构设计的另一个有力工具。描述了程序的模块结构,表示了一个系统的层次分解关系,反映了块间联系和块内联系等特征及控制信息的传递关系 。

18. 变换设计:把具有变换流特点的数据流图按预先确定的模式映射成软件结构。设计步骤:(1) 复查基本系统模型(2) 复查并精化数据流图(3) 确定数据流图具有变换特性还是事务特性(4) 确定输入流和输出流的边界,从而孤立出变换中心(5) 完成“第一级分解”。(6) 完成“第二级分解”(7) 运用模块设计和优化准则对第一次分割得到的软件结构进一步精化。

19. 事务设计步骤和变换设计步骤大部分相同或类似,主要差别仅在于由数据流图到软件结构的映射方法不同:(1)由事务流映射成的软件结构包括一个接收分支和一个发送分支;(2)映射出接收分支结构的方法和变换分析映射出输入结构的很相像,即从事务中心的边界开始,把沿着接收流通路的处理映射成模块;

(3)发送分支的结构包含一个调度模块,它控制下层的所有活动模块;然后把数据流图中的每个活动流通路映射成与它的流特征相对应的结构。

第六章

结构程序设计的定义:如果一个程序的代码块仅仅通过顺序,选择和循环着3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。

第七章

1、 程序设计语言分类:(1)机器语言;(2)汇编语言,如FORTRAN,BASIC;(3)面向过程语言,如C,C++;(4)面向对象语言,如ADA.

2、 如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试称黑盒测试。

3、 如果知道软件内部工作过程,可以通过测试来检验软件内部动作是否按照规格说明书的规定正常进行,这种测试称为白盒测试。

4、 软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需求而修改软件的过程。

5、 软件维护的分类:改正性维护;适应性维护;完善性维护;预防性维护。

6、 软件可靠性的定义:软件可靠性是程序在给定好时间的时间间隔内,按照规格说明书的规定成功的运行的概率。

7、 软件可用性的定义:软件可用性是程序在给定的时间点,按照规格说明书的规定,成功的运行的概率。

第八章

1.软件维护的定义:软件维护就是在软件已经交付使用以后,为了改正错误或满足新的需要而修改软件的过程。

2.软件维护的分类:(1)改正性维护(2)适应性维护(3)完善性维护(4)预防性维护

3.软件工程的主要目的:就是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。

4.软件维护的特点:(1)非结构化维护(2)结构化维护

5.软件维护的过程:(1)维护组织(2)维护报告(3)维护的事件流(4)保存维护记录(5)评价维护活动

6.决定软件可维护性的最终因素是:软件设计阶段所采用的方法以及软件文档资料的好坏。

7.软件再工程过程的六类活动:(1)库存目录分析(2)文档重构(3)逆向工程(4)代码重构(5)数据重构(6)正向工程

8.逆向工程的定义:是一个恢复设计结果的过程,逆向工程工具从现存的程序代码中抽取有关数据,体系结构和处理过程的设计信息。

9.正向工程的定义:正向工程也称为革新或者改造;正向工程过程应用软件工程的原理,概念,技术和方法来重新开发某个现有的应用系统。

第十三章

1. 估算软件规模分为:(1)代码行技术(2)功能点技术

2. 代码行技术的优点:代码是所有软件开发项目都有的“产品“,而且很容易计算代码行数

3. 代码行技术的缺点是:源程序仅是软件配置的一个成分,用它的规模代表整个软件的规模似乎不太合理;用不同语言实现同一个软件所需要的代码行数并不相同;这种方法不适用于非过程语言。

4. 所谓管理就是:通过计划,组织和控制等一系列活动,合理的配置和使用各种资源,以达到既定目标。

5. 民主制的优点:(1)组员们对发现程序错误持积极的态度,这种有助于更快速地发现错误,从而导致高质量的代码;(2)组员们享有充分民主,小组有高度凝聚力,组内学术空气浓厚,有利于攻克技术难关。

6. 民主制的缺点:由于没有明确的权威指导开发工程的进行,组员间将缺乏必要的协调,最终可能导致工程失败。

7. 主程序员组的优点:(1)专业化(2)层次性

8. 现代程序员组的优点:是小组成员都对发现程序错误积极,主动的态度

9. 软件质量的定义:就是软件与明确的和隐含的定义的需求相一致的程度,更具体地说,软件质量是软件与明确的叙述的功能和性能需求,文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。

10. 上述定义强调了三个要点:(1)软件需求是度量软件质量的基础,与需求不一致就是质量不高(2)指定的开发标准定义了一组指导软件开发的准则,如果没有遵守这些准则,肯定会导致软件质量不高(3)有一组没有显式地描述的隐含需求。

11. 软件质量的主要影响因素:这些因素是从管理角度对软件质量的度量,可以把这些质量分为3组:产品运行;产品修改;产品转移。

12. 软件质量保证措施:基于非执行的测试;基于执行的测试盒程序正确性证明

13. 软件配置管理的定义:是在软件的整个生命周期内管理变化的一组活动,具体地说,这组活动用来:(1)标识变化(2)控制变化(3)确保适当的实现了变化(4)向需要知道这类信息的人报告变化。

14. 软件配置项的定义:(1)计算机程序(2)描述计算机程序的文档(3)数据;这些项就是软件配置项。

15. 基线的定义:已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。;简而言之就是通过了正式复审的软件配置项。

16. 创建一个项目需要如下基线:(1)需求基线(2)设计基线(3)测试基线(4)发布基线

17. 能力成熟度模型(CMM)。的基本思想:由于问题是由人们管理软件工程的方法不当引起的,所以新软件技术的运用并不会提高软件的生产率和质量。

18. 能力成熟度的5个等级:从高到低依次是:初始级(1级);可重复级(2级);已定义级(3级);已管理级(4级);优化级(5级)。

你可能感兴趣的:(软件工程论)