2014-软件工程6

合集下载

软件工程试题与答案 (6)

软件工程试题与答案 (6)

第一章软件工程概述一。

填空题1. 软件的发展过程, , ,。

2. 基于软件的工作方式,软件可以划分为 , , , .3。

在软件发展的第四阶段计算机体系结构迅速地从环境转变为环境 .4。

在计算机系统中,软件是,而硬件是。

5. 软件危机是在软件发展第阶段末期,随着第代计算机和诞而产生。

6。

文档一般可分为面向的文档,面向的文档,面向的文档和面向的文档.7. 软件生存期若分为三个大的阶段,, .8. 它是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码).9. 在软件的生存周期开发阶段要经三个步骤 , , 。

10. 瀑布模型是以文档为驱动、适合于的软件项目的模型.11。

螺旋模型将开发过程分为几个螺旋周期,在每个螺旋周期内为,,和四个步骤。

12。

软件开发的螺旋模型综合了瀑布模型和演化模型的优点,还增加了____。

采用螺旋模型时,软件开发沿着螺线自内向外旋转,每转一圈都要对____ 进行识别和分析,并采取相应的对策。

螺旋线第一圈的开始点可能是一个____ .从第二圈开始,一个新产品开发项目开始了,新产品的演化沿着螺旋线进行若干次迭代,一直运转到软件生命期结束。

13。

软件开发模型,,,, , .14. 软件工程面临的问题有 , , , .15。

面向对象方法学把客观世界的事物或实体都看成对象,把对象作为分析设计的元素,把所有对象都划分成对象类,类可以派生和 .16.基于软件的功能划分可以把软件划分为, ,和。

17.计算机系统发展的早期所形成的一系列错误概念和做法,已经严重地阻碍了计算机软件的开发,甚至有的根本无法维护,只能提前报废,造成大量人力、物力的浪费,从而导致软件危机.为了研究解决的方法,计算机科学技术领域中的一门新兴的学科逐步形成了,这就是。

18.软件工程是指导的一门工程学科。

采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。

软件工程第6章 软件编码设计

软件工程第6章  软件编码设计

10
(1)理论标准 1)理想的模块化机制、易于阅读和使用的控制结 构及数据结构 模块化、良好的控制结构和数据结构可以降低编码 工作的难度,增强程序的可理解性,提高程序的可测试 性和可维护性,从而减少软件生存周期中的总成本,并 缩短软件开发所需的时间。 2)完善、独立的编译机制
11
(2)实用标准 1)系统用户的要求 由于用户是软件的使用者,因此软件开发者应充分 考虑用户对开发工具的要求。特别是当用户要负责软件 的维护工作时,用户理所应当地会要求采用他们熟悉的 语言进行编程。 2)工程的规模 3)软件的运行环境 4)可以得到的软件开发工具
16
(3)语句的构造及书写 语句是构成程序的基本单位,语句的构造方式和书 写格式对程序的可读性具有非常重要的决定作用。 在一行内只写一条语句,并且采取适当的移行格式, 使程序的逻辑和功能变得更加明确。 程序编写首先应当考虑清晰性,不要刻意追求技巧 性,使程序编写得过于紧凑。
17
(4)输入/输出 由于输入和输出是用户与程序之间传递信息的渠道, 因此输入、输出的方式往往是用户衡量程序好坏的重要 指标。为了使程序的输入、输出能便于用户的使用,在 编写程序时应对输入和输出的设计格外注意。 1)输入 2)输出
23
良好的编码风格,应该以结构程序设计的原则为指 导,使用单输入口和单输出口的控制结构。倡导源程序 代码的文档化,程序内部良好的文档资料,有规律的数 据说明格式,简单清晰的语句构造和输入输出格式等, 都对程序的可读性有很大作用,也在相当大的程度上改 进了程序的可维护性。程序的输入输出应该充分考虑运 行工程学的要求,在满足数据可靠性的前提下,尽量做 到对用户友善。
19
(1)用于提高运行速度的指导原则 ①编写程序之前,先对需要使用的算术表达式和逻 辑表达式进行化简。 ②尽可能多地采用执行时间短的算术运算。 ③尽量避免使用多维数组、指针和其他复杂的数据 类型。 ④尽量采用整型算术表达式和布尔表达式。 ⑤尽可能减少循环体,特别是内循环中语句的个数。 ⑥尽量使同一表达式中的数据类型保持统一。 ⑦应当对所有的输入和输出安排适当的缓冲区,以 减少频繁通信所带来的额外开销。

软件工程第6章-课后作业参考(附答案)

软件工程第6章-课后作业参考(附答案)

软件⼯程第6章-课后作业参考(附答案)第六章作业题参考答案3.画出下列伪码程序的程序流程图和盒图: STARTIF p THENWHILE q DO f END DO ELSEBLOCK g nEND BLOCK END IF STOP 答:(1)流程图如图6-1所⽰:图6-1从伪码变成的程序流程图(2)该程序的盒图如图6-2所⽰:图6-2 从伪码变成的程序盒图4.下图给出的程序流程图代表⼀个⾮结构化的程序,请问:(1)为什么说它是⾮结构化的?(2)设计⼀个等价的结构化程序。

(3)在(2)题的设计中你使⽤附加的标志变量flag吗?若没⽤,请再设计⼀个使⽤flag 的程序;若⽤了,再设计⼀个不⽤flag 的程序。

答:(1)通常所说的结构化程序,是按照狭义的结构程序的定义衡量,符合定义规定的程序。

图⽰的程序的循环控制结构有两个出⼝,显然不符合狭义的结构程序的定义,因此是⾮结构化的程序。

(2)使⽤附加的标志变量flag,⾄少有两种⽅法可以把该程序改造为等价的结构化程序,图6-3描绘了等价的结构化程序的盒图。

(a)解法1(b)解法2图6-3 与该图等价的结构化程序(⽤flag)(3)不使⽤flag把该程序改造为等价的结构化程序的⽅法如图6-4所⽰。

图6-4 与该图等价的结构化程序(不⽤flag)8.画出下列伪码程序的流图,计算它的环形复杂度。

你觉得这个程序的逻辑有什么问题吗?C EXAMPLELOOP:DO WHILE X>0A=B+1IF A>10THEN X=AELSE Y=ZEND IFIF Y<5THEN PRINT X,YELSE IF Y=2THEN GOTO LOOPELSE C=3END IFEND IFG=H+REND DOIF F>0THEN PRINT GELSE PRINT KEND IFSTOP答:(1)该伪码的流程图如图6-8所⽰:图6-8 程序流程图根据该程序流程图,可得该程序流图如图6-9所⽰:图6-9 程序流图环形复杂度V(G)=流图中的区域数=流图中判定结点数⽬+1=6+1=7 (判定结点为:1、3、6、8、10、11)(2)该算法问题在于控制最外层循环的变量Z不仅没有经过初始化,并且在该循环内部没有任何有可能该变Z的语句。

《软件工程实用教程》第6_章_面向对象的软件设计

《软件工程实用教程》第6_章_面向对象的软件设计

第6 章 面向對象的軟體設計
例:
第6 章 面向對象的軟體設計
2.部署圖 部署圖描述了處理器、設備和軟體構件運行時 的體系結構。 ( 1 )結點:是某種計算資源的物理對象,包括電 腦、設備(如印表機、通信設備)等 (2) 連接:連接用一條直線表示,它指出結點之間 存在著某種通信路徑,並指出通過哪條通信路 徑可使這些結點間交換對象或發送消息
第6 章 面向對象的軟體設計
2.詳細設計 (1)細化、補充類的屬性和操作 (2)設計類操作的實現演算法 (3)優化數據訪問路徑 (4)實現外部互動式的控制 (5)調整類結構,增加繼承性 (6)設計類之間的關聯的實現方式 (7)確定對象屬性的精確表示 (8)把類和關聯打包歸納到模組中
第6 章 面向對象的軟體設計
第6 章 面向對象的軟體設計
3)依賴倒置原則:指的是依賴關係應該是儘量依賴介面 (或抽象類),而不是依賴於具體類。在面向對象 的設計中,高層的類往往與領域的業務有關,這些 類只依賴於一些抽象的類或介面,當具體的實現細 節改變時,不會對高層的類產生影響。 4)介面分離原則:指的是在設計時採用多個與特定客戶 類有關的介面比採用一個通用的介面要好。即一個 類要給多個客戶類使用,那麼可以為每個客戶類創 建一個介面,然後這個類實現所有這些介面,而不 要只創建一個介面,其中包含了所有客戶類需要的 方法,然後這個類實現這個介面。
第6 章 面向對象的軟體設計
2.設計基於類的構件 (1)基本設計原則 2)Liskov替換原則:指的是子類可以替 換父類出現在父類能出現的任何地方。 例如,類ClassA要使用ClassB,ClassC 是ClassB的子類。如果在運行時,用 ClassC代替ClassB,則ClassA仍然可以 使用原來ClassB中提供的方法,而不需 要做任何改動。

软件工程的6个阶段

软件工程的6个阶段

软件工程的6个阶段软件工程的6个阶段1. 需求分析阶段在软件工程的开发过程中,需求分析阶段是项目的第一个关键阶段。

它的目的是识别并记录用户的需求,确保软件能够满足用户的期望。

在这个阶段,软件工程师与用户密切合作,通过访谈、问卷调查等方式获取用户需求,并将其准确记录下来。

2. 系统设计阶段系统设计阶段是根据需求分析阶段的结果,创建系统的总体架构和详细设计方案的阶段。

在这个阶段,软件工程师将系统拆解成多个子系统或模块,并明确各个模块之间的关系和功能。

设计文档将包括系统的整体结构、模块的功能描述、数据结构和算法设计等内容。

3. 编码阶段编码阶段是将系统设计阶段的设计方案转化为实际的代码实现的阶段。

在这个阶段,软件工程师根据设计文档编写代码,并使用相应的编程语言和开发工具进行开发。

编码阶段要求开发人员具备良好的编码规范和团队合作能力,以确保代码质量和项目进度的控制。

4. 阶段阶段是在完成编码后对软件进行全面的阶段。

在这个阶段,软件工程师将分别进行单元、集成和系统,以确保软件的各个功能和模块能够正常运行,并符合用户需求和设计要求。

阶段还包括对软件性能和安全性等方面的。

5. 部署和维护阶段部署和维护阶段是将软件部署到实际环境中并进行维护的阶段。

在这个阶段,软件工程师将软件安装到用户的计算机或服务器上,并对软件进行配置和优化。

,软件工程师还将负责监控和维护软件,确保其能够长期稳定地运行,并及时响应用户的反馈和需求。

6. 阶段软件迭代是指软件工程中通过分阶段、重复和持续的开发过程,逐步完善和改进软件产品的过程。

它是软件工程发展和创新的重要方式。

通过不断地迭代,软件工程师可以及时发现和纠正问题,改进软件的功能和性能,并提供更好的用户体验。

以上就是软件工程的六个阶段:需求分析阶段、系统设计阶段、编码阶段、阶段、部署和维护阶段以及阶段。

每个阶段在软件开发过程中都起到重要的作用,缺一不可,只有充分理解并且正确地执行每个阶段的任务,才能保证软件项目的顺利进行和提高软件开发的效率和质量。

软件工程导论第6章

软件工程导论第6章

70年代初N.Wirth在Pascal语言中设置支持“顺序 结构”、“IF-THEN-ELSE选择结构”、“DO-WHILE 重复结构”或“DO-UNTIL重复结构”三种基本控制 结构语句。
25
3种基本控制结构
(1) 顺序型
A B
(2) 选择型
F P A B T
(2) 多情况选择型(case)
T T
P=1 F P=2 F P=n F

A1 A2
T
An
(3) 先判定型循环
后判定型循环
(do-while)
F
(do-until)
P T S
S P F
T
例1、某模块有两个输入a和b,一 个输出c,当满足条件(a>0)and(b<2) 时,c=a+b,否则c=a-b。画出该模 块的程序流程图。
a b
第6章 详细设计
6.1 结构程序设计 6.2 人机界面设计 6.3 过程设计的工具 6.4 面向数据结构的设计方法 6.5 程序复杂程度的定量度量 6.6 小结 习题
1
详细设计阶段的根本目标:确定应该怎样具体地 实现所要求的系统。 为软件结构图中的每一个模块确定使用的算法和 块内数据结构,并用某种选定的表达工具给出清晰 的描述。
100 110
120
130 140
Eq:等于 ne:不等于 gt:大于 lt:小于 ge:大于等于 le:小于等于
例:打印A、B、C三数中最小者的程序 if (A.LT.B .AND. A.LT.C)then write(6,*) A else if (A.GE.B .AND. B.LT.C) then write(6,*) B else write(6,*) C endif endif

软件工程导论(第6版)知识点总结、复习课

软件工程导论(第6版)知识点总结、复习课

软件工程导论(第6版)知识点总结、复习课复习课--------酷爱YC第一章1、什么是软件危机,什么是软件工程软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。

它包括两方面:(1)如何开发软件,以满足对软件日益增长的需求;(2)如何维护数量不断膨胀的已有软件。

软件工程:采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件,并有效地维护它。

2、完整的软件配置由哪些内容组成软件配置主要包括程序,文档和数据等成分。

3、软件生命周期分为哪3个时期和8个阶段,每个阶段的任务(工作)分别是什么,重要性如何概括地说,软件生命周期由软件定义、软件开发和运行维护3个时期组成1、软件定义(系统分析)。

软件定义时期的任务是:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。

这个时期的工作通常又称为系统分析,由系统分析员负责完成。

软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。

(1) 问题定义,确定系统要解决的问题是什么。

成果:关于问题性质、工程目标和工程规模的报告。

(2) 可行性研究,确定问题是否有可用的、能行得通的解(包括:技术、经济、操作、社会等方面的可行性)。

这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。

成果:可行性研究报告。

(3) 需求分析,确定软件系统的必须实现的功能、必须达到的性能、必须满足的运行环境要求。

系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。

通常用数据流图、数据字典和简要的算法表示系统的逻辑模型。

在需求分析阶段确定的系统逻辑模型是以后设计和实现目标系统的基础,因此必须准确完整地体现用户的要求。

软件工程_6_详细设计.pptx

软件工程_6_详细设计.pptx

3. 出错信息处理
交互式系统的出错信息或警告信息,应该具有下 述属性:
(1) 信息应该使用用户可以理解的术语描述问题; (2) 信息应该提供有助于从错误中恢复的建设性 意见; (3) 信息应该指出错误可能导致哪些负面后果(例 如,破坏数据文件); (4) 信息应该伴随着听觉上或视觉上的提示,强 化出现异常; (5) 信息不能带有指责用户的内容。 当确实出现了问题的时候,有效的出错信息能提 高交互式系统的质量,减轻用户的挫折感。
直接影响用户对软件产品的评价,从而影响软 件产品的竞争力和寿命。
人机界面目前所占的工作量越来越大。
6.2.1 设计问题
在设计人机界面常会遇到下述4个问题: 系统响应时间 用户帮助设施 出错信息处理 命令交互
上述问题,最好在设计初期作为重要的设计问题 来考虑,这时修改比较容易,代价也低。
1. 系统响应时间
第6章 详细设计
6.1 结构程序设计 6.2 人机界面设计 6.3 过程设计的工具 6.4 面向数据结构的设计方法 6.5 程序复杂程度的定量度量 6.6 小结及作业
6.1 结构程序设计
结构程序设计的经典定义:“如果一个程序的 代码块仅仅通过顺序、选择和循环这3种基本控 制结构进行连接,并且每个代码块只有一个入口 和一个出口,则称这个程序是结构化的。”
6.3.2 盒图(N-S图)
6.3.2 盒图(N-S图)
出于要有一种不允许违背结构程序设计精神的 图 形 工 具 的 考 虑 , Nassi 和 Shneiderman 提 出 了 盒 图,又称为N-S图。它有下述特点:
(1) 功能域(即,一个特定控制结构的作用域) 明确,可以从盒图上一眼就看出来。
2. 用户帮助设施
几乎交互式系统的每个用户都需要帮助,大多数 现代软件都提供联机帮助设施,这使得用户无须离 开用户界面就能解决自己的问题。

2014年(软件工程)

2014年(软件工程)

软件工程
一、学科简介
软件工程专业2011年获批一级硕士学位授权点。

目前依托“国家级特色专业”—计算机科学与技术专业进行教学,现有教师39人,其中教授9人,副教授15人,校教学名师3人。

拥有省级实验教学示范中心1个,省级优秀教学团队1个,省级精品课2门,省级优秀课程6门;先后获各级教学成果奖20余项,各级科研成果奖30余项,编著出版教材11部,其中4部获吉林省优秀教材奖。

本学科设有虚拟现实、智能用电、嵌入式系统、网络安全等九个实验室、及智能信息处理等十个研究室,配备了价值1000余万元的实验设备,先后和多家企业合作,为培养研究生的创新能力和实践能力提供了保障。

本学科点依托先天的电力行业背景,结合地区经济发展和电力系统建设实际,以多学科交叉和融合为着力点,通过承担各类课题和项目,努力解决国家信息化建设,特别是电力行业信息化建设中的科学和技术问题,在电力行业软件工程理论与方法、电力软件开发过程与环境方面逐渐显示出较明显的优势,如在电力仿真建模与系统可视化、电力智能安全与软件系统等研究都处于国内先进水平。

二、研究方向
1.智能电网信息技术
2. 虚拟现实与多媒体技术
3、大数据及智能信息处理
4. 图像处理与模式识别
5. 计算机理论、模型及算法
三、考试科目
①101思想政治理论
②201英语一或203日语
③302数学二
④852数据结构或855程序设计方法。

软件工程第6章面向数据流的设计方法

软件工程第6章面向数据流的设计方法

21
变换分析
输入流 变换流 输出流
A C
B E D F G H
主控模块 输入流 控制模块
变换流 控制模块
输出流 控制模块
图6-5 一级分解
22
变换分析
图6-5展示的是一个简单三叉结构,实际处 理大型系统的复杂数据流时,可能需要多 个模块对应图6-5中一个模块的功能。“一 级分解”总的原则是,在完成控制功能并 保持低耦合度、高内聚度的前提下尽可能 地减少模块的数量。 “传感器监测子系统”一级分解如图6-6所 示,其中控制模块的名字概括了所有下属 模块的功能。
E
输出流控制模块 G
A
C
F
主控模块
H
输入流控制模块 B A D C
E F
G H
图6-8 结构的优化
31
监控传感器执行者
警报输出控制器 获得响应信息 建立警报条件
产生显示 读传感器
生成警报信号
建立与电话网络的 连接
产生脉冲
32
变换分析
上述七个设计步骤的目标是给出软件的 一个整体描述。 一旦有了这样一个描述,设计人员即可 从整体角度评价和精化软件的总体结构, 此时修改所需耗费不多,却能大大提高 软件质量。
39
无效口令
图6-2-1 用户交互子系统的二级数据流图
事务分析
事务分析法可概括为七个步骤:
步骤一、复审基本系统模型; 步骤二、复审并精化软件数据流图; 步骤三、确定数据流图的特征; 步骤四、指出事务中心,确定接收部分和发送部分 的流界; 步骤五、映射出系统上层模块结构; 步骤六、分解并精化事务结构以及每条动作路径所 对应的结构。根据流经每一动作路径的数据流特征, 参考前面所述“变换设计” 相关步骤可以逐一导出 这些子结构.

软件工程第六版课后习题答案

软件工程第六版课后习题答案

第一章一、什么是软件危机?它有哪些典型表现?为什么会出现软件危机?软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。

它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。

软件危机的典型表现:(1) 对软件开发成本和进度的估计常常很不准确。

常常出现实际成本比估算成本高出一个数量级、实际进度比计划进度拖延几个月甚至几年的现象。

而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量。

这些都降低了开发商的信誉,引起用户不满。

(2) 用户对已完成的软件不满意的现象时有发生。

(3) 软件产品的质量往往是靠不住的。

(4) 软件常常是不可维护的。

(5) 软件通常没有适当的文档资料。

文档资料不全或不合格,必将给软件开发和维护工作带来许多难以想象的困难和难以解决的问题。

(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。

(7) 开发生产率提高的速度远跟不上计算机应用普及的需求。

软件危机出现的原因:(1) 来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。

(2) 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。

(3) 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。

二、假设自己是一家软件公司的总工程师,当把图1.1给手下的软件工程师们观看,告诉他们及时发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清楚它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他?答:在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”是在引入变动,当然付出的代价更高。

计算机软件工程第六章 详细设计

计算机软件工程第六章 详细设计

PAD图的基本符号
SOFTWARE ENGINEERING
PAD图的基本符号
输入框 输出框 处理框 选择框
重复框(先判 定,再重复) 或 子程序框
重复框(先执行, 后判定,再重复)
定义框
使用PAD图提供的定义功能来逐步求精的例子
• 作业:判定一个数是不是素数的PAD图
SOFTWARE ENGINEERING
SOFTWARE ENGINEERING
盒图的基本符号
SOFTWARE ENGINEERING
§6.2 详细设计的工具
6.2.4 PAD图(Problem Analysis Diagram) 用二维树形结构的图来表示程序的控制流。 优点: ①设计出的程序是结构化程序; ②描绘程序结构清晰; ③表示程序逻辑,易读、易懂、易记;(自上而下, 从左向右顺序执行,遍历所有结点); ④易转换成 语言源程序,可用软件工具自动完成; ⑤也可用于描绘数据结构; ⑥支持自顶向下、逐步求精方法的使用。
例题 根据伪码画出程序流程图、盒图、 PAD图
Start If p1 then while q2 do x end do Else block y z end block End if stop
SOFTWARE ENGINEERING
作业:根据伪码画出程序流程图、盒图、PAD图
Begin Input(a,b,c) i=0 While i<=6 do Begin If a>6 or b>=0 Then c=c+a Else b=c+a End if i=i+1 End End do Print(a,b,c) End
PAD图(问题分析图)
(4)PAD是二维树形结构的图形,程序从图中 最左竖线上端的结点开始执行,自上而下,从 左向右按顺序执行,遍历所有结点; (5)容易将PAD转换成高级语言源程序,该转 换可由软件自动完成,有利于提高软件可靠性 和软件生产; (6)既可用于表示程序逻辑,也可用于描绘数 据结构; (7)PAD的元素支持自顶向下、逐步求精方法 的使用。

软件工程课本讲解第6章软件维护

软件工程课本讲解第6章软件维护
例如,开发每一行源代码耗资25美 元,维护每一行源代码需要耗资 1000美元。
维护工作量包括生产性活动(如分 析和评价、设计修改和实现)和 “轮转”活动(如力图理解代码在 做什么、试图判明数据结构、接口 特性、性能界限等)。
21
维护工作量的模型
MpKced
M是维护中消耗的总工作量 p是上面描述的生产性工作量 K是一个经验常数 c是因缺乏好的设计和文档而导致
复杂性的度量 d是对软件熟悉程度的度量。
22
模型指明,如果使用了不好的软件 开发方法(未按软件工程要求做), 原来参加开发的人员或小组不能参 加维护,则工作量(及成本)将按 指数级增加。
23
6.2 软件维护实施活动
为了有效地进行软件维护,应事先 就开始做组织工作。 首先建立维护的机构 申明提出维护申请报告的过程及 评价的过程 为每一个维护申请规定标准的处 理步骤 建立维护活动的登记制度以及规 定评价和评审的标准。
3
一、软件维护的定义
在软件运行/维护阶段对软件产品进行的修改就是 所谓的维护。
软件维护是软件生存周期的最后一个阶段,不属于系统开发的过程。
问题


维护 满足用户对已开发产品的性能与运行环境不断提高的要求,进而
目的 达到延长软件寿命的目的。
改正性 对程序使用期间发现的程序错误进行诊断和改正的过程;
改正性 17—21% 适应性 18—25%
完善性 50—66% 预防性 4%左右
软件的易维护性是软件开发过程中每个步骤的一个关键目标。维护费用占软件总支
出的20-30%到70-80%。而无形的代价更是无法估计的。
4
改正性维护
在软件交付使用后,因开发时测试 的不彻底、不完全,必然会有部分 隐藏的错误遗留到运行阶段。

软件工程的6个阶段

软件工程的6个阶段

软件工程的6个阶段软件工程的6个阶段软件工程是指采用特定的工程方法和原理,通过系统性的、规范化的方法进行软件的开发、运行和维护的一门学科。

在软件开发过程中,一般会经历六个阶段,包括需求分析、系统设计、编码、测试、发布和维护。

本文将详细介绍这六个阶段的内容和各自的重要性。

1. 需求分析阶段需求分析是软件开发的第一步,它的目的是明确软件系统的需求和目标。

在这个阶段,与用户进行充分的沟通和交流,了解用户的需求和期望。

通过收集、整理和分析需求,确定软件系统的功能、性能、界面设计等方面的要求,并将其转化为易于理解和实现的形式,形成需求文档。

2. 系统设计阶段系统设计是在需求分析的基础上,进行整体设计的阶段。

在这个阶段,首先对软件系统进行结构设计,确定软件的模块划分和模块之间的关系。

然后进行数据设计,包括数据库的设计和数据流的设计。

最后进行界面设计,设计软件的用户界面。

系统设计需要考虑软件的灵活性、可维护性和可扩展性等方面的因素。

3. 编码阶段编码阶段是根据需求文档和设计文档,将软件的功能以具体的编程语言实现的过程。

在这个阶段,程序员需要将系统设计转化为实际的代码。

编码过程中需要注意代码的规范性、可读性和可维护性。

为了保证代码的质量,编码阶段通常还需要进行代码的测试和调试。

4. 测试阶段测试是软件开发过程中不可或缺的一个阶段,它的目的是确保软件的质量和稳定性。

在测试阶段,根据需求文档和设计文档,编写测试用例和测试脚本,对软件的各个功能进行测试。

测试过程中需要发现和修复bug,并确保软件在各种情况下都能正常运行。

测试阶段通常包括单元测试、集成测试和系统测试等不同层次的测试。

5. 发布阶段发布阶段是将经过测试的软件部署到最终的用户环境中的过程。

在发布阶段,需要将软件打包、安装和配置,确保用户能够方便地使用软件。

同时,还需要编写用户手册和技术文档,帮助用户了解和使用软件。

发布后,还需要进行用户反馈和问题处理,确保软件的稳定性和用户满意度。

软件工程的6个阶段

软件工程的6个阶段

软件工程的6个阶段软件工程的6个阶段概述软件工程是一门将工程化思维应用于软件开发的学科。

在软件开发过程中,有多个阶段需要经历,每个阶段都有其特定的任务和目标。

本文将介绍软件工程的6个阶段,包括需求分析、设计、编码、测试、部署和维护。

1. 需求分析阶段在软件开发的第一个阶段,需求分析阶段,软件工程师与用户进行沟通,了解用户的需求和期望。

这个阶段的主要目标是准确理解用户的需求,并将其转化为软件需求规格说明文档。

这个文档描述了软件系统的功能需求、性能需求、界面需求等等。

需求分析阶段有以下重要任务:- 确定用户需求和目标- 确定功能需求和非功能需求- 编写软件需求规格说明文档2. 设计阶段在需求分析阶段完成之后,进入设计阶段。

在这个阶段,软件工程师根据需求规格说明文档,进行软件架构设计、模块设计和数据库设计。

设计阶段的主要目标是确定软件系统的整体结构和组成部分。

设计阶段有以下重要任务:- 进行软件架构设计- 进行模块设计- 进行数据库设计3. 编码阶段在设计阶段完成之后,软件工程师开始编写源代码。

这个阶段需要根据设计文档和编码规范,将设计的概念转化为实际可执行的代码。

编码阶段的目标是实现软件系统的功能和逻辑。

编码阶段有以下重要任务:- 根据设计文档编写源代码- 进行单元测试- 进行代码审查4. 测试阶段编码阶段完成后,进入测试阶段。

在这个阶段,软件工程师会进行各种类型的测试,包括单元测试、集成测试和系统测试。

测试阶段的目标是验证软件系统的功能、性能和可靠性。

测试阶段有以下重要任务:- 进行单元测试、集成测试和系统测试- 修复和调试出现的问题- 验证软件系统是否满足需求规格说明文档中的要求5. 部署阶段在测试阶段通过后,软件工程师将软件系统部署到目标环境中。

这个阶段需要进行系统的安装、配置和用户培训。

部署阶段的目标是确保软件系统在目标环境中正常运行。

部署阶段有以下重要任务:- 进行系统安装和配置- 进行用户培训- 验证软件系统在目标环境中的运行情况6. 维护阶段软件系统部署后,进入维护阶段。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– 1)内容耦合(Content coupling)
• 一个模块直接进入另一个模块中存取其数据或 使用其服务 • 最不好的一种耦合
34/360
6.4.2 耦合(3/6)
• 耦合的分类
– 2)公共耦合(Common coupling)
• 两个模块间通过一个公共环境进行数据交换 • 较差的耦合,应该避免使用
44/360
软件复用的内容
• (1)项目计划:软件项目计划的基本结构和许多内 容,如SQA计划,均可以跨项目复用。 • (2)成本估计:由于不同项目中常包含类似的功 能,所以有可能在极少修改或不修改的情况下,复 用对该功能的成本估计。 • (3)体系结构:即使应用领域千差万别,但程序和 数据的体系结构很少有截然不同的情形。因此,有 可能创建一组类属的体系结构模板,如事务处理结 构,将这些模板作为可复用涉及的框架。 • (4)需求模型和规格说明:数据流图、类模型等均 可以复用。 • (5)设计:系统和对象设计等是常见的复用成份。
6.1 设计的概念(4/7)
• 软件构架
– 反映系统整体的组织结构和基本特征
• 软件的层次结构 • 模块相互作用的方式 • 全局的、重要的数据变量和数据结构 • 数据库的逻辑结构 • 接口
5/360
6.1 设计的概念(5/7)
• 软件构架
– 对复杂的系统进行抽象,为系统设计规划蓝 图,是关于系统构造及系统各构件工作机制 的相对精简、却能清晰反映核心问题的模 型,体现了项目早期的设计决策,可以作为 相关涉众对系统理解和交流以及进行项目管 理的基础,能够帮助开发人员进一步细化和 实施系统 – 一个好的软件构架已经成为完成高质量软件 的重要保证,它在软件开发中起到
• 内聚的分类
– 8)层内聚(Layer Cohesion)
• 将相关服务的功能放到一起,成为一层,而将 其它内容排出在外 • 替换低层时可以用等价层(实现原层所有的 API)而不必修改高层,替换高层模块对低层 模块没有影响(低层服务不访问高层服务) • 层内聚被广泛地应用在软件的分层架构上
8/360
6.2 分治(1/6)
• 分治思想
– 架构设计->将系统分解为一组子系统或模 块,以及子系统或模块之间的接口。 – 详细设计->子系统或模块被再次细分为子 模块
• 传统软件工程中的过程、函数 • 面向对象软件工程中的包、类、接口和方法等
9/360
6.2 分治(2/6)
• 分治的优点
– 1)缩小问题空间,减少问题复杂度和工作量
27/360
6.4.1 内聚(6/10)
• 内聚的分类
– 6)实用程序内聚(Utility Cohesion)
• 部件常常是一些相关的、可重用的实用程序 • 内聚很弱
28/360
6.4.1 内聚(7/10)
• 内聚的分类
– 7)偶然内聚(Coincidental Cohesion)
• 模块内部的各部件之间没有任何关系 • 最不好的一种内聚类型
20/360
6.3 抽象(7/7)
• 面向对象软件工程中的抽象
– 接口
21/360
6.4 内聚和耦合(1/18)
• 内聚
– 是一个模块内部各部件之间联系紧密程度的 度量 – 强调分解时将相关的内容放到一起 – 一个模块内的各个部件联系越紧越好
• 耦合
– 是模块间相互联系强弱的度量 – 耦合的强弱取决于模块间传递数据的方式、 接口复杂情况以及传递数据的类型 – 各模块之间的耦合越松散越好
• 抽象思想
– 为了降低复杂度,应该隐藏细节或推迟考虑 细节
• 抽象的优点
– 有利于认识事物的普遍特征和基本原理 – 帮助设计人员制定出模块的“框架” – 有利于软件的复用 – 提高系统的的可扩展性
15/360
6.3 抽象(2/7)
• 基于抽象的设计原则
– 1)里氏替换原则(Liskov Principle)
• 内聚的分类
– 4)过程内聚(Procedural Cohesion)
• 各部件之间只有控制联系,而没有数据联系 • 较弱的内聚
26/360
6.4.1 内聚(5/10)
• 内聚的分类
– 5)时间内聚(Temporal Cohesion)
• 所有部件之间既无数据联系,也无控制联系, 但是部件之间具有时间关系,即把在执行过程 中同一阶段内完成执行任务的部件放到一起, 而排除其它部件 • 内聚更弱
– 2)开闭原则(Open-Closed Principle)
• 即一个软件实体应当对扩展开放,对修改关闭
17/360
6.3 抽象(4/7)
• 基于抽象的设计原则
– 3) 依赖倒转原则(Dependence Inversion Priciple)
• 要依赖于抽象,不要依赖于具体类
18/360
6.3 抽象(5/7)
• 子类可以替换父类,可以出现在父类能出现的 任何地方 • 如果对于每一个类型为T1的对象o1,都有类型 为T2的对象o2,使得以T1定义的所有程序P在所 有的对象o1都替换成 o2时,程序P的行为没有 变化,那么类型T2是类型T1的子类型。
16/360
6.3 抽象(3/7)
• 基于抽象的设计原则
– Biggerstaff和Ritcher:
• 在新的开发项目中使用以前已获得的概念和对象
– Tracz:
• 特别为复用目的而设计的软件的过程
– Freeman:
• 是一种通过使用以前开发工作的某些东西来生产 东西 (或帮助生产)一个系统的过程,其关键问题是 过程 复用什么、什么是导致成功复用的过程
41/360
• 软件复用程度的相关数据
– 美国电报电信公司开发的电信支持系统起软 件复用率达到40%~92% – 摩托罗拉公司在为编译器编写测试包时,复 用率高达85% – 1984年惠普HP公司就开发了可复用的组 件;1987年建立了自己的软件复用库;软 件复用率达到10%~50 – 1991年的统计报告显示:日本软件公司其 软件复用率达到50%
30/360
6.4.1 内聚(9/10)
• 内聚的分类
– 8)层内聚
31/360
6.4.1 内聚(10/10)
• 相互嵌套的内聚模块
32/360
6.4.2 耦合(1/6)
• 解耦的原因
– 牵一发而动全身 – 很难快速地理解紧耦合的模块 – 独立性较差
33/360
6.4.2 耦合(2/6)
• 耦合的分类
22/360
6.4.1 内聚(1/10)
• 内聚的分类
– 1)功能内聚(Functional Cohesion)
• 所有部件处理同一组数据,共同完成单一的功能 • 易于理解、易于诊断、易于维护、易于替换、易 于复用
23/360
6.4.1 内聚(2/10)
• 内聚的分类
– 2)顺序内聚(Sequential Cohesion)
35/360
6.4.2 耦合(4/6)
• 耦合的分类
– 3)外部耦合(External coupling)
• 模块对外部系统(如软件操作系统、数据库、硬 件设备,以及可复用的组件库等)有依赖关系 • 有时无法避免,应该尽量减少
– 4)控制耦合(Control coupling)
• 两个模块之间通过接口的参数表交换开关数据, 旨在控制另一个模块的执行逻辑 • 较差
42/360
软件工程的一个新的发展方向-复用 • 应用系统的开发不再采用一切从“零”开 始的模式,可以充分利用过去应用系统 开发中积累的知识和经验 • 优点:
– 提升软件开发速度和效率 – 缩短开发周期 – 提升软件产品质量 – 降低开发成本
43/360
6.5.1 复用的概念 (1/4)
• 复用的定义
• 传统软件工程中的抽象
– 信息隐蔽
• 指一个模块内的数据和模块的实现细节对于该 模块的客户即调用者模块有不可见的性质
– 数据局部化 – 缺点
• 仅对模块细节的封装,没有继承的概念,虽然 可以“到处复用”,却也需要“到处修改”
19/360
6.3 抽象(6/7)
• 面向对象软件工程中的抽象
– 继承传统,发展深化 – 抽象类
• 内聚谱系和耦合谱系
39/360
6.5 复用(1/20)
• 提高软件生产率的办法
– 改进过程 – 改善需求分析方法 – 改进设计方法 – 改进工具 –…… – 然而……
复用的概 念
复用技术
案例
– 复用——最有效率的方法之一
40/360
优势展望
• 软件行业相关资料(摘录) • 软件复用技术:
– 软件产品开发周期缩短为原来的1/2~4/5 – 软件产品的缺陷密度减少至原来的 10%~50% – 软件开发费用能减少15%~75% – 维护费用也大大降低
• 各部件之间既有数据联系又有控制联系 • 较为理想
24/360
6.4.1 内聚(3/10)
• 内聚的分类
– 3)通信内聚(Communicational Cohesion)
• 所有的部件都访问同一组数据,各部件之间只 有数据关系,没有控制关系 • 较为理想
25/360
6.4.1 内聚(4/10)
6/360
6.1 设计的概念(6/7)
• 软件体系结构和其它开发任务的关系
7/360
6.1 设计的概念(7/7)
• 详细设计
– 在软件构架的基础上进一步确定如何实现目 标系统,具体包括系统的模块(如类及其方 法)逻辑的详细设计、系统数据结构的设 计、系统数据库结构的设计、系统人-机接 口的设计等
2/360
6.1 设计的概念(2/7)
• 软件构架
相关文档
最新文档