软件工程整理资料1Word文件下载.docx
《软件工程整理资料1Word文件下载.docx》由会员分享,可在线阅读,更多相关《软件工程整理资料1Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
(6)编码和单元测试:
写出正确的、易理解的、易维护的程序模块
(7)综合测试:
通过各种类型的测试和调试使软件达到预定的要求
(8)软件维护:
通过各种维护活动使系统持久地满足用户的需要
类维护活动:
改正性维护、适应性维护、完善性维护、预防性维护
3、软件过程模型
瀑布模型、快速原型模型、增量模型和螺旋模型、喷泉模型
①瀑布模型
定义:
传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。
瀑布模型的特点:
1.阶段间具有顺序性和依赖性;
2.推迟实现的观点;
3.质量保证的观点。
瀑布模型的成功在很大程序上是由于它基本上是一种文档驱动的模型。
瀑布模型的主要优点:
a.可强迫开发人员采用规范的技术方法;
b.严格地规定了每个阶段必须提交的文档;
c.每个阶段结束前必须正式进行严格的技术审查和管理复审。
瀑布模型的主要缺点:
在可运行的软件产品交付给用户之前,用户只能通过文档来了解未来的产品是什么样的。
开发人员和用户之间缺乏有效的沟通,很可能导致最终开发出的软件产品不能真正满足用户的需求。
②快速原型模型
所谓“快速原型”,是快速建立起来的、可在计算机上运行的程序,它所能完成的功能往往是最终的软件产品所能完成的功能的子集。
原型是软件开发人员与用户沟通的强有力工具,因此有助于所开发出的软件产品满足用户的真实需求。
快速原型模型的主要优点是:
A.使用这种软件过程开发出的软件产品通常能满足用户的真实需求;
B.软件产品的开发过程基本上是线性顺序过程。
③增量模型
增量模型也称为渐增模型
增量模型的主要优点:
A.能在较短时间内向用户提交可完成部分工作的产品;
B.逐步增加产品功能,从而使用户有较充裕的时间学习和适应新产品,减少一个全新的软件给客户组织带来的冲击。
④螺旋模型
螺旋模型的基本思想是,使用原型及其他方法尽量降低风险。
理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。
螺旋模型所描述的软件过程主要适用于内部开发的大型软件项目。
使用螺旋模型开发软件,要求软件开发人员具有丰富的风险评估知识和经验。
螺旋模型主要有下述优点:
A.有利于已有软件的重用;
B.有助于把软件质量作为软件开发的一个重要目标;
C.减少了过多测试或测试不足所带来的风险;
D.软件维护与软件开发没有本质区别。
⑤喷泉模型
迭代是软件开发过程中普遍存在的一种内在属性。
在面向对象范型中,软件开发过程各阶段之间的迭代或同一阶段内各个工作步骤之间的迭代,比在结构化范型中更常见。
喷泉模型,是典型的面向对象生命周期模型,它充分体现了面向对象软件开发过程迭代和平滑过渡的特性。
第二章
一、可行性分析的三个方面
Ø
1、技术可行性:
使用现有的技术是否能实现该系统吗?
2、经济可行性:
系统的经济效益能够超过它的开发成本吗?
3、操作可行性:
系统的操作方式在这个用户组织内行得通吗?
2、可行性研究报告的内容:
投资必要性、技术的可行性、财务可行性、组织可行性、经济可行性、社会可行性、风险因素及对策。
可行性分析的结果是可行性研究报告,内容包括:
(1)系统概述:
说明开发的系统名称,提出单位和开发单位。
(2)可行性研究的前提:
系统目标;
要求;
约束和限制;
可行性研究的基本准则等。
(3)对现有系统的分析:
处理流程,图示说明现有系统的处理流程和数据流程;
现有系统存在的问题。
(4)系统需求:
主要功能;
主要性能及其要求;
操作要求;
信息要求;
限制性要求。
(5)建议系统:
处理流程;
系统结构,功能,性能;
系统技术可行性;
投资和效益分析;
操作可行性;
法律可行性。
(6)其它可选方案:
与国内外同类型方案的比较;
提出一两个可行性方案供论证和探讨。
(7)制定下一阶段的预算。
(8)结论性意见:
由用户方、设计方和投资方共同签署意见。
Ch3需求分析
需求规格说明书:
通常用自然语言完整、准确、具体地描述系统的数据要求、功能需求、性能需求、可靠性和可用性需求、出错处需求、接口需求、约束、逆向需求、将来可能提出的要求。
组成包括:
(1)引言:
编写目的、背景说明、术语定义及参考资料等。
(2)概述主要功能、约束条件或特殊需求。
(3)数据流图与数据字典。
(4)用户接口、硬件接口及软件接口。
(5)性能需求、属性等。
(6)其它需求,如数据库、操作及故障处理等
Ch5总体设计
1、总体设计的两个阶段:
◆系统设计阶段:
确定系统的具体实现方案
◆结构设计阶段:
确定软件结构。
2、设计原理
模块化、抽象、逐步求精、模块独立(耦合和内聚)
模块:
是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。
1、按照模块的定义,过程、函数、子程序和宏等,都可作为模块。
面向对象方法学中的对象是模块,对象内的方法(或称为服务)也是模块。
模块是构成程序的基本构件。
2、模块化:
就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
3、模块化是软件的单个属性,它使程序能被理性地管理
5.2.2抽象
1、在现实世界中,事物、状态和过程之间总存在着某些共性,把这些共性集中、概括起来,而暂时忽略它们的差异,这就是抽象。
2、软件工程过程的每一步都是对软件解法的抽象层次的一次精化。
在系统工程时,软件划分为基于计算机的系统的一种元素;
在可行性研究阶段,软件作为系统的一个完整部件;
在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;
当由总体设计向详细设计过渡时,抽象的程度也就随之降低;
最后,当源程序写出来以后,也就达到了抽象的最低层。
逐步求精和模块化的概念,与抽象是紧密相关的。
5.2.3逐步求精
1、逐步求精:
是人类解决复杂问题时采用的基本方法,也是许多软件工程技术(例如,规格说明技术,设计和实现技术)的基础。
可以把逐步求精定义为:
“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
”
2、逐步求精之所以如此重要,是因为人类的认知过程遵守Miller法则:
一个人在任何时候都只能把注意力集中在(7±
2)个知识块上。
3、逐步求精方法的强大作用就在于,它能帮助软件工程师把精力集中在与当前开发阶段最相关的那些方面上,而忽略那些对整体解决方案来说虽然是必要的,然而目前还不需要考虑的细节,这些细节将留到以后再考虑。
4、求精实际上是细化过程。
5、抽象与求精是一对互补的概念
5.2.4模块独立
1、模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。
2、开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。
换句话说,希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。
3.衡量模块独立性的定性标准:
(1)耦合:
衡量不同模块彼此间互相依赖(连接)的紧密程度
(2)内聚:
衡量一个模块内部各个元素彼此结合的紧密程度
3.1耦合(低—高:
非直接耦合—数据耦合—标志耦合—控制耦合—外部耦合—公共耦合—内容耦合)
耦合是对一个软件结构内不同模块之间互连程度的度量。
耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
3.1.1模块化设计的原则和目标
(1)目标:
建立模块间耦合度尽可能松散的系统
(2)使用耦合的原则:
尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合
3.2内聚(强—弱:
功能内聚—顺序内聚—信息内聚—通信内聚—过程内聚—时间内聚—逻辑内聚—偶然内聚)
3.2.4使用内聚的原则:
重要的是设计时力争做到高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度降低模块间的耦合程度,从而获得较高的模块独立性。
Ch6详细设计
1、结构化程序设计
如果一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连接,而且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
1、经典的结构程序设计
只允许使用顺序、IF-THEN-ELSE型分支和DO-WHILE型循环着三种基本控制结构
2、扩展的结构程序设计还允许使用DO-CASE型多分支结构和DO-UNTIL型循环结构
3、修正的结构程序设计还允许使用EXIT(或BREAK)结构
2、过程设计工具(图形、图表和语言)
程序流程图、盒图、PAD图、判定树、判定表、PDL
6.2.1程序流程图
程序流程图又称为程序框图,它是历史最悠久、使用最广泛的描述过程设计的方法,从20世纪40年代末到70年代中期,程序流程图一直是软件设计的主要工具。
优点
对控制流程的描绘很直观,便于初学者掌握。
缺点
(1)程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。
(2)程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。
(3)程序流程图不易表示数据结构。
6.2.2盒图(N-S图)
Nassi和Shneiderman提出了盒图,又称为N-S图,它有下述特点:
(1)功能域(即,一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来。
(2)不可能任意转移控制。
(3)很容易确定局部和全程数据的作用域。
(4)很容易表现嵌套关系,也可以表示模块的层次结构。
6.2.3PAD图
PAD是问题分析图(problemanalysisdiagram)的英文缩写,它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。
图6.5给出PAD图的基本符号。
PAD图的主要优点如下:
(1)使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序。
(2)PAD图所描绘的程序结构十分清晰。
图中最左面的竖线是程序的主线,即第一层结构。
随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线。
PAD图中竖线的总条数就是程序的层次数。
(3)用PAD图表现程序逻辑,易读、易懂、易记。
PAD图是二维树形结构的图形,程序从图中最左竖线上端的结点开始执行,自上而下,从左向右顺序执行,遍历所有结点。
(4)容易将PAD图转换成高级语言源程序,种转换可用软件工具自动完成,从而可省去人工编码的工作,有利于提高软件可靠性和软件生产率。
(5)即可用于表示程序逻辑,也可用于描绘数据结构。
(6)PAD图的符号支持自顶向下、逐步求精方法的使用。
开始时设计者可以定义一个抽象的程序,随着设计工作的深入而使用def符号逐步增加细节,直至完成详细设计,
相当于下图程序
6.2.4判定