第12章软件工程原理与应用

合集下载

软件工程第12章

软件工程第12章
1)软件质量和可靠性确实令人满意;
2)测试不全面,很可能还潜伏着严重错 误;
如果测试过程没有发现任何错误,则很 有可能是测试配置不合理。
12.1.4 软件测试的常用方法
1.静态测试
静态测试是采用人工检测和计算机辅助静态分 析的方法对程序进行检测。
人工检测是指靠人工走查程序或评审软件。这 种走查与评审主要针对编码的质量和软件开发 各个阶段的文档,特别是总体设计和详细设计 阶段的错误。能发现30%~70%的逻辑设计和 编码错误。
第12章 软件测试
软件测试是对软件规格说明、软件设计 和编码的最全面也是最后的审查。 通过软件测试,可以发现软件中绝大部 分潜伏的错误,从而可以大大提高软件 产品的正确性、可靠性,进而可显著提 高产品质量。 统计表明,软件测试工作往往占软件开 发总工作量的40%以上。甚至3~5倍以上。
第12章 软件测试
12.1.1 软件测试的目标与原则
测试用例——为了进行有效的测试而设计的输 入数据和预期的输出结果数据。 Myers在其软件测试著作中对软件测试的目标 提出以下观点: ①软件测试是为了发现错误而运行程序的过程; ②一个好的测试用例能够发现至今尚未发现的
错误; ③一个成功的测试是发现了至今尚未发现的错
白盒测试。
12.1.4 软件测试的常用方法
黑盒测试,又称为功能测试——把被测 的程序模块看成一个黑匣子,即完全不 考虑程序的内部结构和处理过程,测试 仅在程序的接口上进行。
白盒测试——把被测的程序看成一个透 明的白匣子,即完全了解程序的内部结 构和详细的处理过程,测试是在程序的 内部结构上进行。即要求针对每一条逻 辑路径都要设计测试用例,检查每一个 分支和每一次循环的情况。
本章将介绍: 软件测试的基本知识; 软件测试的常用方法和技术; 软件测试的过程; 软件的调试与排错技术; 软件测试的工具。

软件工程各章名词解释

软件工程各章名词解释

名词解释一个三分 五个十五分第一章 绪论1. 软件2. 文档3. 软件工程4. 软件工程过程5. 软件生存周期6. 软件生存周期模型第二章 软件可行性研究与项目开发计划1. 投资回收2. 纯收人第三章 软件需求分析1. 需求分析2. 数据流3. 数据字典4. 加工5. 数据流图第四章 软件概要设计1. 模块2. 模块化3. 抽象4. 信息隐蔽5. 模块独立性6. 耦合性7. 无直接耦合8. 数据耦合9. 标记耦合10. 控制耦合11. 公共耦合12. 内容耦合13. 内聚性14. 偶然内聚15. 逻辑内聚16. 时间内聚17. 通信内聚18. 顺序内聚19. 功能内聚第五章 软件详细设计1. PAD2. 过程设计语言(PDL)第六章 软件编码1. 程序设计风格2. 程序可移植性第七章 软件测试1. 语句覆盖2. 判定覆盖3. 条件覆盖4. 判定/条件覆盖5. 条件组合覆盖6. 路径覆盖7. 环路复杂性8. 黑盒测试9. 白盒测试10. 驱动模块11. 桩模块12. 单元测试13. 集成测试14. 确认测试15. 调试第八章 软件维护1. 维护2. 校正性维护3. 适应性维护4. 完善性维护5. 预防性维护6. 软件可维护性第九章 软件开发的增量模型1. 原型第十章 面向对象的方法1. 对象2. 类3. 消息4. 方法5. 继承性6. 单重继承7. 多重继承8. 多态性9. 抽象10. 信息隐藏11. 链12. 关联第十一章 软件质量与质量保证1. 软件可靠性2. 效率3. 可维护性4. 可移植性5. 可互操作性6. 适应性7. 可重用性8. 软件设计质量9. 软件程序质量10. 冗余第十二章 软件工程管理1. 软件配置管理2. 软件配置项3. 基线4. 文档第十三章 软件开发环境1. 软件开发环境2. 软件工具3. CASE4. CASE生存期5. CASE工作台软件工程自考名词解释答案第一章 绪论1. 计算机程序及其说明程序的各种文档.2. 文档是有关计算机程序功能,设计,编制,使用的方案或图形资料.3. 用科学知识和技术原理来定义,开发,维护软件的一门学科.4. 软件工程过程规定了获取,供应,开发,操作和维护软件时,要实施的过程,活动和任务.5. 软件生存周期是指一个软件从得出开发要求开始直到该软件报废为止的整个时期.6. 软件生存周期模型是描述软件开发过程中各种活动如何执行的模型.第二章 软件可行性研究与项目开发计划1. 投资回收期就是使累计的经济效益等于最初的投资费用所需的时间.2. 在整个生存周期之内的累计经济效益(折合成现在值)与投资之差.第三章 软件需求分析1. 需求分析是指开发人员要准确理解用户的要求,进行细致的调查分析,将用户非不甘落后将用户非不甘落后 需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式功能规约(需求规格说明)的过程.2. 数据流是数据在系统内传播的路径,因此由一组成分固定的数据项组成.3. 数据字典(Data Dic onary, 简称DD)就是用来定义数据流图中的各个成分的具体含义的,它以一种准确的,无二义性的说明方式为系统的分析,设计及维护提供了有关元素的一致的定义和详细的描述.4. 加工又称为数据处理,是对数据流进行某些操作或变换.5. 数据流图,简称DFD,是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程.第四章 软件概要设计1. 模块在程序中是数据说明,可执行语句等程序对象的集合,或者是单独命名和编址的元素,在软件的体系结构中,模块是可组合,分解和更换的单元.2. 模块化是指解决一个复杂问题自顶向下逐层把软件系统划分成若干模块的过程.每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个要求的功能.3. 抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素.4. 信息隐蔽指在设计和确定模块时,使得一个模块内包含信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的.5. 模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单.6. 耦合性也称块间联系.指软件系统结构中各模块间相互联系紧密程序的一种度量.7. 无直接耦合指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息.8. 数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递.9. 标记耦合指两个模块之间传递的是数据结构,如高级语言的数组名,记录名,文件名等这些名字即为标记,其实传递的是这个数据结构的地址.10. 控制耦合指一个模块调用另一个模块时,传递的是控制变量(如开关,标志等),被调模块通过该控制变量的值有选择地执行块内某一功能.11. 公共耦合指通过一个公共数据环境相互作用的那些模块间的耦合.公共数据环境可是是全程变量或数据结构,共享的通信,内存的公共覆盖区及任何存储介质上的文件,物理设备等(也有将共享外部设备分类为外部耦合).12. 当一个模块直接使用另一个模块的内部数据,或通过非正常口转入另一个模块内部,这种模块之间的耦合为内容耦合.13. 内聚块又称块内联系指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量.14. 偶然内聚指一个模块内的各处理元素之间没有任何联系.15. 逻辑内聚指模块内执行个逻辑上相似的功能,通过参数确定该模块完成哪一个功能.16. 把需要同时执行的动作组合在一起形成的模块为时间内聚模块.17. 通信内聚指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据.18. 顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入.19. 功能内聚指模块内所有元素共同完成一个功能,缺一不可.因此模块不能再分割.第五章 软件详细设计1. PAD图指问题分析图(Problem Analysis Diagram),是一咱算法描述工具,它是一种由左往右展开的二维树型结构.PAD图的控制流程为自上而下,从左到右地执行.2. 过程设计语言(Process Design Language,简称PDL),也称程序描述语言(Program Descrip on Language),又称为伪码.它是一种用于描述模块自法设计和处理细节的语言.第六章 软件编码1. 程序设计风格指一个人编制程序时所表现出来的特点,习惯逻辑思路等.2. 指程序从一个计算机环境移值到另一个计算机环境的容易程序.第七章 软件测试1. 语句覆盖是指设计足够的测试用例,使被测程序中每个语句至少执行一次.2. 判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次”真”和”假”值,从而使程序的每一个分支至少都通过一次.3. 条件覆盖指设计足够的测试用例,使得判定表达工中每个条件的各种可能的值出现一次.4. 判定/条件覆盖标准指设计足够的测试用例,使得判定表达式中的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次.5. 条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次.6. 路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径.7. McCabe定义程序图的环路为程序图中区域的个数.区域个数为边和结点圈定的封闭区域数加上图形外的区域数1.8. 黑盒测试是功能测试又称为功能测试或数据驱动测试.9. 白盒测试是对程序中尽可能多和逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致.10. 驱动模块是用来模拟被测模块的上级调用模块的模块,功能要比真正的上级模块简单得多,它只完成接受测试数据,以上级模块调用被测模块的格式驱动被模块,接收被测模块的测试结果并输出.11. 桩模块用来代替被测试模块所调用的模块它的作用是返回被测模块所需的信息.12. 单元测试指对源程序中每一个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误.13. 集成测试是指在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统进行测试,故也称组装测试或联合测试.14. 确认测试又称有效性测试.是为了检查软件的功能与性能是否与需求规格说明书中确定的指标相符合所进行的测试.15. 调试是为了确定错误的原因和位置,并改正错误所进行的工作,因此调试也称为纠错.第八章 软件维护1. 在软件运行/维护阶段对软件产品所进行的修改就是维护.2. 为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护.3. 随着计算机的飞速发展,计算机硬件,软件及数据环境在不断发生变化,为了使应用软件适应这种变化而修改软件的过程称为适应性维护.4. 在犯罪分子件运行时期中,用户往往会对软件提出新的功能要求与性能要求.这种增加软件功能,增强软件性能,提高软件运行效率而进行的维护活动称为完善性维护.5. 为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护.6. 软件可维护性是指软件能够被理解,校正,适应及增强功能的容易程度.第九章 软件开发的增量模型1. 软件开发中的原型是软件的一个早期可运行的版本,它反映了最终系统的重要特性.第十章 面向对象的方法1. 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则,计划或事件.2. 具有相同或相似性质的对象的抽象就是类具有相同或相似性质的对象的抽象就是类3. 对象之间进行通信的构造叫做消息.4. 类中操作的实现过程叫做方法,一个方法有方法名,参数,方法体.5. 继承性是子类自动共享父类数据结构和方法的机制这是类之间的一种关系.6. 在类层次中,子类只继承一个父类的数据结构和方法,称为单重继承.7. 在类层次中,子类继承了多个父亲的数据结构和方法,称为多重继承.8. 多态性是指相同的操作或函数,过程可作用于多用户种类型的对象上并获得不同结果.不同的对象收到同一消息可以产生不同的结果,这种现象称为多态性.9. 抽象是指强调实体的本质,内在的属性,忽略一些无关紧要的属性.10. 信息隐蔽是指所有软件部件内部都有明确的范围以及清楚的外部边界每个软件部件都有友好的界面接口,软件部件的内部实现与外部可访问性分离.11. 链表示对象间的物理与概念联结.12. 关联表示类之间的一种关系,就是一些可能的链的集合.第十一章 软件质量与质量保证1. 软件按照设计要求,在规定时间和条件下不出故障,持续运行的程度.2. 为了完成预定功能,软件系统所需的计算机资源和程序代码数量的程度.3. 找到并改正程序中的一个错误所需代价的程度.4. 将一个软件系统从一个计算机系统或环境移植到另一个计算机系统或环境中运行时所需的工作量.5. 将一个系统耦合到另一个系统所需的工作量.6. 修改或改进一个已投入运行的软件所需工作量的程度.7. 一个软件能再次用于其他相关应用的程度.8. 设计的规格说明书要符合用户的要求.9. 程序要按照设计规格说明所规定的情况正确执行.10. 冗余是指实现系统规定功能是多余的那部分资源,包括硬件,软件,信息和时间.第十二章 软件工程管理1. 软件配置管理,简称SCM,是一组管理整个软件生存期各阶段中变更的活动是一组管理整个软件生存期各阶段中变更的活动2. 软件配置项是软件工程中产生的信息项,它是配置管理的基本单位.3. 基线是软件生存期中各开发阶段的一个特定点,它的作用是把开发各阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,以便于检查与肯定阶段成果.4. 文档是指某种数据媒体和其中所记录的数据.在软件工程中,文档用来表示对需求,工程或结果进行描述,定义,规定,报告或认证的任何书面或图示的信息.它们描述和规定了软件设计和实现的细节,说明使用软件的操作命令.第十三章 软件开发环境1. 软件开发环境是相关的一组软件工具集合,它支持一定的软件开发方法或按照一定的软件开发模型组织而成.2. 软件工具是指为支持计算机软件的开发,维护,模拟,移植或管理而研制的程序系统.3. CASE是一组工具和方法的集合,可以辅助软件开发生命周期各阶段进行软件开发.4. 一个组织中的CASE系统从被始需求到完全废弃这一生存期.5. 一个CASE工作台是一组工具集,支持像设计,实现或测试等特定的软件开发阶段.。

自学考试软件工程第12章自测题及参考答案

自学考试软件工程第12章自测题及参考答案

第12章自测题及参考答案一、名词解释1.软件项目计划2.人力资源3.硬件资源4.软件资源5.专家估算6.类推估算7.算式估算8.COCOMO估算9.工程网络图10.软件配置管理11.软件配置项12.基线13.版本控制14.变更控制二、填空题1.软件工程包括软件开发技术和______两大部分内容。

2.软件工程管理不同于其他工程管理,它对保证高质量的______产品更具有极为重要的意义。

3.软件工程管理的具体内容包括对开发人员、组织机构、用户、______等方面的管理。

4.在一个软件项目的开发过程中要自始至终得到______的密切合作与支持。

5.软件项目计划的第一项活动是确定______。

6.主程序员组织机构的制度突出了主程序员的领导,责任集中在少数人身上,有利于提高______。

7.在一个大系统的开发过程中,由于______失误造成的后果要比程序错误造成的后果更为严重。

8.软件开发人员一般分为:______、系统分析员、高级程序员、初级程序员、资料员和其他辅助人员。

9.在软件项目管理过程中,一个关键的活动是______。

10.目前软件工程规范可分为三级:国家标准与国际标准、行业标准与工业标准和______。

11.成本估算方法中,有自顶向下估算方法、自底向上估算方法和______方法。

12.差别估算的缺点是不容易明确“差别”的界限,但它的优点是可以提高______。

13.基线的作用是把各阶段的开发工作划分得更加明确,便于检查与确认阶段成果。

因此,基线可以作为项目的一个______。

14.在软件开发和维护过程中,一个软件往往有许多版本,版本控制工具用来存储、更新、恢复和管理一个软件的______。

三、选择题1.软件工程管理是对软件项目的开发管理,即对整个软件( )的一切活动的管理。

A.软件项目B.生存期C.软件开发计划D.软件开发2.单元测试是发现编码错误,集成错误是发现接口错误,确认错误是发现功能错误,系统测试是发现( )错误。

软件工程:理论与实践(第2版)

软件工程:理论与实践(第2版)

读书笔记
如果是初学者,不建议阅读此书,干巴巴得容易让人丧失兴趣,建议阅读《构建之法》。
目录分析
第1章软件与软 件工程
第2章软件过程
1.1软件 1.2软件危机 1.3软件工程 1.4软件开发方法 1.5软件工程工具 1.6 “小型网上书店系统”案例介绍 习题
2.1软件过程概述 2.2软件生命周期 2.3软件开发模型 2.4软件开发模型实例 习题
软件工程:理论与实践(第2 版)
读书笔记模板
01 思维导图
03 读书笔记 05 作者介绍
目录
02 内容摘要 04 目录分析 06 精彩摘录
思维导图
本书关键字分析思维导图
第版
内容
第章
面向对象
过程
实例
面向对象
软件
软件
工程 软件
案例
理论
习题
过程
系统
实验
ห้องสมุดไป่ตู้
书店
工程
内容摘要
本书按照典型的软件开发过程来组织内容,旨在培养读者具备软件工程思想及实际软件开发的能力。本书共 分为12章,内容涉及软件与软件工程、软件过程、可行性研究与项目开发计划、结构化分析、结构化设计、面向 对象方法与UML、面向对象分析、软件体系结构与设计模式、面向对象设计、软件实现、软件测试、软件维护与 软件工程管理。本书理论与实践相结合,内容翔实,可操作性强。本书是高等院校计算机科学、软件工程及相关 专业“软件工程”课程的理想教材。
第6部分软件维护与软件工程管 理
12.1软件维护 12.2软件估算 12.3软件开发进度计划 12.4软件开发人员组织 12.5软件开发风险管理 12.6软件质量保证 12.7软件配置管理概述 12.8软件工程标准与软件文档 12.9软件过程能力成熟度模型

软件工程课后习题答案2-12章

软件工程课后习题答案2-12章

D3生理信息 定时的生理信号
F2生理信号 P1 接收信号 F2生理信号 定时的 生理信号
F6日志 E3 时钟 F3日前、时间 P4 定时取样 生理信号 F6日志 E1 护士 F1要求报告 P6 产生病情报告 D1患者日志




患者生理信 号获取
生理信号












患者监护系 统
危 日志 机信息
安排航班
预 定 信 息
机票 信息
交款
打印取票单 据
打印及发放 机票

航班
通 效 知
设置航班
录入预定信 息
录入取票凭 证
核对取票凭 证
P2 分析信号 E2 病人 F2生理信号
危及病人信息 F2生理信号 D2患者安全范围 P7制定安 全范围 P5 更新日志
P3 产生警告信息 F4警告信息 E1 护士
F5安全范围
监护处理
志 日 定时生理信号
号 生理信
监护信息输 出



制定生理信 号安全范围
接收信号
定时取样 生理信号
时间
分析信号
更新日志
报警
危机信




信息 危机

信 理 生 时 定 号 信 理
日 志
取得时间

病情报告
• P104:4 • 美国某大学有200名教师,校方与教师工会刚刚签订一项协议。 按照协议,所有年工资超过$26000(含$26000 )的教师工 资将保持不变,年工资少于$26000的教师将增加工资,所增 加工资数额按下述方法计算:给每位教师所赡养的人(包括 教师本人)每年补助$100,此外,教师有一年工龄每年再多 补助¥50,但是,增加后的年工资总额不能多于$26000。 • 教师工资档案存储在行政办公室的磁带上,档案中有目前的 年工资、赡养的人数、雇佣日期等信息。需要写一个程序计 算并印出每名教师的原工资和调整后的新工资。 • 要求:(1)画出此系统的数据流图;(2)写出需求说明; • (3)设计上述的工资调整程序(要求用HIPO图描绘设计结果), 设计时分别采用两种算法,并比较两种算法的优缺点: – (a)搜索工资档案数据,找出年工资少于$26000的人, 计算新工资,校核是否超过$26000,存储新工资,印出新 旧工资对照表; – (b)把工资档案数据按工资从最低到最高的次序排序,当 工资数额超过$26000时即停止排序,计算新工资,校核是 否超过限额,存储新工资,印出结果。 • (4)你所画出的数据流图适应用那种算法?

第十二章 异常处理

第十二章 异常处理
为了加强程序的可读性,使函数的用户能方便地知识所使用的 函数会抛掷哪些异常,可以在函数的声明中列出这个函数可以 抛掷的所有可能的异常类型
例如: void fun() throw(A,B,C,D);
若无异常接口声明,则此函数可以抛 掷任何类型的异常。 不抛掷任何类型异常的函数声明如下:
void fun() throw();
异常处理的实现机制
C++语言提供对处理异常情况的内部支 持。Try、throw和catch语句就是C++ 语言中用于实现异常处理的机制 程序可以向更高的执行上下文传递意想 不到的事件,从而使程序能更好地从这 些异常事件中恢复过来
异常处理的实现机制
异常处理的语法 抛掷异常的程序段
...... throw ......
class Demo { public: Demo(); ~Demo(); }; Demo::Demo() { cout<<"构造 Demo."<<endl; } Demo::~Demo() { cout<<"析构 Demo."<<endl; }
13
void MyFunc() { Demo D; cout<<"在MyFunc()中抛掷Expt类异常。"<<endl; throw Expt(); } int main() { cout<<"在main函数中。"<<endl; try { cout<<"在try块中,调用MyFunc()。" <<endl; MyFunc(); }
异常处理的实现机制

《软件工程实用教程》第12章_软件开发工具与环境

《软件工程实用教程》第12章_软件开发工具与环境

第12章 軟體開發工具與環境
一個集成化的CASE環境應當滿足下列需求: 1. 提供環境中所有工具間共用資訊的機制; 2. 資訊項改動時,能夠自動跟蹤到與之相關的資訊項; 3. 為所有軟體工程資訊提供版本控制及全局性配置管 理; 4. 允許直接的,以非順序方式訪問環境中的任何工具; 5. 支持軟體工程活動的過程性描述的自動建立; 6. 保證人-機介面的一致性和友好性; 7. 支持軟體開發人員間的通信; 8. 收集可用於改進產品和開發過程的管理和技術兩方 面的量度。
第12章 軟體開發工具與環境
10. 維護工具:軟體維護通常作為軟體的補充開 發過程。因此,在維護過程中不僅可能要用 到軟體開發階段用到的所有工具,還要有理 解工具,再生工程工具和逆向工程工具等。
第12章 軟體開發工具與環境
12.3 軟體開發工具 1. 業務系統規劃工具:通過將企業的策略性資訊需求 模型化,提供一個可導出特定資訊系統的“元模 型”,這樣可使業務資訊運行於企業的各個部門。 2. 專案管理工具:借助這類工具,專案管理者可以有 效的估算軟體專案所需的工作量,成本,開發週期 和風險評估等,可以定義一個功能分解結構 WBS,並 制定可行的專案開發計畫;基於需求跟蹤專案的開 發情況;採集量度數據,以評價軟體開發效率和產 品品質。 3. 支持工具:這類工具用於支持軟體工程過程,具體 包括文檔編制工具,品質保證工具,資料庫管理工 具和軟體配置管理工具等。
第12章 軟體開發工具與環境
1. 分析和設計工具:這類工具用於建立待開發系統模 型和模型品質評價,通過對模型的一致性和有效性 檢查,以保證分析與設計的完整性。 2. 編程工具:這類工碼生成器,解釋器及調試器等, 從工具輸出來看,4GL也屬於這一類。 3. 測試和分析工具:常用的測試與分析工具包括靜態 分析工具與動態測試工具。 4. 原型工具:隨著軟體構件重用研究的深入,更增強 了這種開發模式的實用價值。但原型的構造離不開 經驗資訊,如用於用戶介面設計的原型工具可利用 圖形包快速構造出應用系統介面,供用戶評價,以 確定最終產品的介面模式。

清华软件工程:第12章 Web工程

清华软件工程:第12章 Web工程
复旦大学计算机科学与工程系 软件工程课程 15/46
部署

Web 工程过程-改善框架 工程过程-
改善框架
– Web工程过程模型必须具有一定的适应性.一些情 况下,一个框架活动会非正式地实施.其他的时候, 一系列不同的任务将会被定义并被团队成员去执行. 每种情况中,团队有责任在分配好的时间内完成高 质量的WebApp增量.需要着重指出的是和Web工 程框架活动相关联的一些任务可以被修改,消除, 或基于问题,产品,工程及Web工程团队人员的特 征进行扩展.
复旦大学计算机科学与工程系 软件工程课程 23/46
Web的分析类别 Web的分析类别
功能分析:与交互分析类似,交互分析主要涉 功能分析:与交互分析类似, 工程操作. 及Web工程操作.用户可见的功能包括任何可 工程操作 以直接由用户操作的功能 配置分析:主要对工程所涉及的环境和基础设 配置分析: 施进行详细的描述, 施进行详细的描述,其中基础设施主要包括构 件基础设施和数据库将被用于生成内容的程度 导航关系分析:主要分析各个页面之间的关系. 导航关系分析:主要分析各个页面之间的关系. 可以通过对用户的分析和对页面单元的分析来 进行
复旦大学计算机科学与工程系 软件工程课程
16/46
Web工程中有用的规则 Web工程中有用的规则
如果去做一些企业级的 如果去做一些企业级的WebApp,下面的 , 一些基本的规则应比较适用
– 即使WebApp的细节是模糊的,也要花一些 时间去理解商业需求和产品目标 – 用基于用况的方法去描述用户如何与 WebApp交互
复旦大学计算机科学与工程系 软件工程课程 5/46
基于Web系统和应用的属性 基于Web系统和应用的属性
绝大多数 绝大多数WebApp中都要考虑下列属性 中都要考虑下列属性

软件工程教学大纲(正式版)

软件工程教学大纲(正式版)

《软件工程导论》课程教学大纲一、课程基本信息课程编号:英文名称名:Software Engineering总学时:54学时学分:3课程类别:专业必修课适用专业:全校本(专)计算机科学与技术先修课程:数据结构,大学数学,离散数学,计算机算法设计。

二、课程性质与目的、要求《软件工程》是计算机专业的一门工程性基础课程,在软件工程学科人才培养体系中占有重要的地位。

软件开发是建立计算机应用系统的重要环节,人们通过软件工程学把软件开发纳入工程化的轨道,而软件工程学是用以指导软件人员进行软件的开发、维护和管理的科学。

《软件工程》已成为高等学校计算机软件教学体系中的一门核心课程,本课程以IEEE最新发布的软件工程知识体系为基础构建内容框架,注重贯穿软件开发整个过程的系统性认识和实践性应用,以当前流行的统一开发过程、面向对象技术和UML 语言作为核心,密切结合软件开发的先进技术、最佳实践和企业案例,力求从“可实践”软件工程的角度描述需求分析、软件设计、软件测试以及软件开发管理,使学生在理解和实践的基础上掌握当前软件工程的方法、技术和工具。

通过本课程的学习,要求学生能掌握软件工程的基本概念、基本原理、开发软件项目的工程化的方法和技术及在开发过程中应遵循的流程、准则、标准和规范等;学生应能掌握开发高质量软件的方法,以及有效地策划和管理软件开发活动,为学生参加大型软件开发项目打下坚实的理论基础。

本课程注重培养学生理论应用于实践的能力,课堂上教师向学生讲述软件工程中的相关原理和概念,并通过课程设计,培养学生对整个软件开发过程的能力,让学生能切实体会到软件工程在实践中的指导作用,并按软件工程的要求完成规范的各项软件开发文档。

本课程对提高学生的软件开发能力和项目管理能力有重要的现实意义。

三、教学内容及学时分配本课程的教学内容共分十三章。

第1章软件工程学概述(2课时)学习目的与要求:通过本章的学习,了解和掌握软件工程的基本概念(如软件和软件工程的定义、等),软件危机的表现形式、产生的原因及消除的途径,软件工程的基本原理、方法学,软件的生存期,几种主要的软件开发模型等。

软件工程实用教程(2版)-12章-习题与参考答案-2012-5-28

软件工程实用教程(2版)-12章-习题与参考答案-2012-5-28

软件工程实用教程《软件工程实用教程》习题与参考答案第12章软件开发工具与环境1.什么是软件开发环境?它的基本分类是什么?答案要点:软件开发环境应是能支持整个软件生存期阶段的开发活动,并能支持各种处理模型的软件方法学,同时实现这些开发方法的自动化。

按解决的问题分类:程序设计级、系统合成级与项目管理级。

按现有软件开发环境的演化趋向分类:以语言为中心的环境、面向结构的环境、工具箱环境与基于方法的环境。

按集成化程度分类:分成三代。

2.什么是计算机辅助软件工程?答案要点:在软件工程活动中,软件工程师和管理员按照软件工程的方法和原则,借助于计算机及其软件工具的帮助,开发、维护、管理软件产品的过程,称为计算机辅助软件工程(Computer-Aided Software Engineering,简称CASE)。

3.列出常见的软件开发工具?根据本章的分类方法组织它们?答案要点:软件开发工具种类繁多,按功能可将软件开发工具分为8类:●业务系统规划工具:IBM Rational Rose是基于UML的可视化建模工具;Microsoft Visio。

●项目管理工具:Microsoft Office Project 2007、Visual SourceSafe●支持工具:IBM Rational Build Forge是对分布式开发环境进行自动构建和发布管理类工具;Microsoft V isual SourceSafe 、IBM Rational ClearCase 配置管理工具。

●分析和设计工具:Power designer、IBM Rational Rose可视化建模工具。

●编程工具:Delphi、Visual Basic、C++ Builder等编程语言的编辑器和代码生成器,解释器及调试器等。

●测试和分析工具:静态测试工具有:Telelogic公司的Logiscope软件;PR公司的PRQA软件。

态测试工具的代表有:Compuware公司的DevPartner软件;Rational公司的Purify系列等。

软件工程导论第1章(第4版)

 软件工程导论第1章(第4版)
普通高校本科计算机专业特色教材精选
软件工程导论 (第4版)
张海藩 编著
总目录
第1章 软件工程学概述 第8章 维护
第2章 可行性研究
第9章 面向对象方法学引论
第3章 需求分析
第10章 面向对象分析
第4章 形式化说明技术 第11章 面向对象设计
第5章 总体设计
第12章 面向对象实现
第6章 详细设计
第13章 软件项目管理
测试、综合测试又称为系统实现。 设计出实现目标系统的方案,设计程序的体系结构。 确定实现模块功能所需要的算法和数据结构; 设计出程序的详细规格说明; 用适当的程序设计语言写出正确的容易理解、容易维护的
程序模块并进行单元测试; 根据设计的软件结构,把各模块装配起来并进行测试; 通过对软件测试结果的分析预测软件的可靠性; 写出测试计划和详细测试方案并记录实际测试结果; 按照规格说明书的规定,由用户对目标系统进行验收。
第7章 实现
第1章 软件工程学概述
软件成为独立的商品 计算机应用的普及,促使人们对软件的品种、
数量、功能、质量等提出了越来越高的要求 在1970前,计算机硬件工程技术由于电子技术
的发展而建立 重视软件开发过程、方法、工具和环境的研
究—软件工程
1.1 软件危机 一.软件
1.软件的定义 软件是能够完成预定功能和性能的可执行的计算
2. 产生软件危机的原因
(1)软件开发个体化,采用了错误的方法和技术,无设计资 料留存; (2)软件规模的增长,使得软件的复杂度增加,软件的可靠 性随软件规模的增长而下降,质量保证越来越困难; (3)软件维护费用急剧上升。
据统计,软件维护费用大约占到软件总花费的2/3; (4)软件生产技术进步缓慢,是加剧软件危机的重要原因。

软件工程_张海蕃

软件工程_张海蕃
普通高校本科计算机专业特色教材精选
张海藩 编著
软件工程导论 (第4版)
总 目 录
第1章 第2章 第3章 第4章 第5章 第6章 第7章 软件工程学概述 可行性研究 需求分析 形式化说明技术 总体设计 详细设计 实现
总 目 录
第8章 维护 第9章 面向对象方法学引论 第10章 面向对象分析 第11章 面向对象设计 第12章 面向对象实现 第13章 软件项目管理
(6) 软件成本在计算机系统总成本中所占的比例逐 年上升。由于微电子学技术的进步和生产自动化程 度不断提高,硬件成本逐年下降,然而软件开发需 要大量人力,软件成本随着通货膨胀以及软件规模 和数量的不断扩大而持续上升。美国在1985年软件 成本大约已占计算机系统总成本的90%。 (7) 软件开发生产率提高的速度,远远跟不上计算 机应用迅速普及深入的趋势。软件产品“供不应求” 的现象使人类不能充分利用现代计算机硬件提供的 巨大潜力。
应该推广使用在实践中总结出来的开发软件的成功 的技术和方法,并且研究探索更好更有效的技术和 方法,尽快消除在计算机系统早期发展阶段形成的 一些错误概念和做法。 应该开发和使用更好的软件工具。正如机械工具可 以“放大”人类的体力一样,软件工具可以“放大” 人类的智力。在软件开发的每个阶段都有许多繁琐 重复的工作需要做,在适当的软件工具辅助下,开 发人员可以把这类工作做得既快又好。如果把各个 阶段使用的软件工具有机地集合成一个整体,支持 软件开发的全过程,则称为软件工程支撑环境。
1983年IEEE为软件下的定义是:计算机程序、方 法、规则、相关的文档资料以及在计算机上运行程 序时所必需的数据。虽然表面上看来在这个定义中 列出了软件的5个配置成分,但是,方法和规则通 常是在文档中说明并在程序中实现的。 更重要的是,必须充分认识到软件开发不是某种个 体劳动的神秘技巧,而应该是一种组织良好、管理 严密、各类人员协同配合、共同完成的工程项目。 必须充分吸取和借鉴人类长期以来从事各种工程项 目所积累的行之有效的原理、概念、技术和方法, 特别要吸取几十年来人类从事计算机硬件研究和开 发的经验教训。

软件工程(第二版)-电子教案 第12章软件工程项目管理

软件工程(第二版)-电子教案  第12章软件工程项目管理
第12章 软件工程项目管理
软件项目管理
常见管理技术及工具简介 软件过程成熟度模型 利用CMM对软件机构进行成熟度评估 项目管理认证体系IPMP和PMP
软件工程项目管理
通过软件项目管理,可以保证在给定资源与环境下, 有效地组织人力、物力、财力,在预期的时间内,完成 预定软件项目。 项目管理的内容包括项目计划管理、质量管理、人 员组织管理、文档管理、成本控制和配置管理。由于软 件的易变动性,软件配置的管理成为软件项目管理的重 点内容。 软件项目管理开始于任何技术活动之前,贯穿于软 件的整个生命周期之中。
(1)配置标识与版本控制
(2)变更控制 (3)软件配置审核 (4)向有关人员报告变更
常见管理技术及工具简介
常见工具简介 1、 Microsoft Visual SourceSafe 6.0(VSS) Microsoft Visual SourceSafe 6.0是由微软开发和 维护的源代码版本控制软件。Visual SourceSafe 是一种 源代码控制系统,它提供了完善的版本和配置管理功能, 以及安全保护和跟踪检查功能。 2、 Concurrent Version System (并发版本管理系统) Concurrent Version System (并行版本系统),简 称CVS,用于版本管理。它是一个C/S系统,多个开发人员 通过一个中心版本控制系统来记录文件版本,从而达到保 证文件同步的目的 。
常见管理技术及工具简介
软件项目管理的主要内容 1、项目计划管理
项目计划内容包括: (1)范围:定义该软件项目所要做的工作以及性能限制 (2)资源:包括人员资源、软硬件资源的管理 (3)进度安排
其主要的方法有:工程网络图、cantt图、任务资源表。

海南大学研究生835-软件工程原理方法与应用 考试大纲

海南大学研究生835-软件工程原理方法与应用 考试大纲

海南大学硕士研究生入学考试《835软件工程原理方法与应用》考试大纲一、考试性质海南大学硕士研究生入学考试初试科目。

二、考试时间180分钟。

三、考试方式与分值闭卷、笔试。

满分150分。

四、考试内容第一部分软件工程的基本概念第1章绪论软件与软件危机,软件工程,软件开发生命周期,模型,方法,技术,工具,过程,软件工程原理,软件工程环境,软件工程管理,软件开发风险,软件需求,软件设计,软件工具,自顶向下,分解,抽象,细化,模块,模块化,软件复审,软件测试等。

第二部分传统(结构化)软件工程第2章软件生存期与软件过程2.1软件生存周期2.2传统的软件过程2.3软件演化模型2.4形式化方法模型2.5软件可行性研究第3章结构化分析与设计3.1概述(结构化分析的工具与模型组成)3.2结构化系统分析(需求分析的任务、步骤,DFD过程模型)3.3结构化系统设计(软件设计的任务,数据存储的设计,人机交互的设计)3.4模块化设计第二部分面向对象软件工程第4章面向对象与UML4.1面向对象概述4.2UML简介4.3静态建模4.4动态建模4.5物理架构建模4.6UML工具(Rational Rose)第5章需求工程与需求分析*5.1软件需求工程5.2需求分析与建模5.3需求获取的常用方法5.4需求模型5.5软件需求描述5.6需求管理5.7需求建模示例第6章面向对象分析6.1软件分析概述6.2面向对象分析建模6.3面向对象分析示例第7章面向对象设计7.1软件设计概述7.2面向对象设计建模7.3系统架构设计7.4系统元素设计7.5面向对象设计示例第8章编码与测试8.1编码概述8.2编码语言与编码工具8.3编码示例8.4测试的基本概念8.5黑盒测试和白盒测试8.6测试用例设计8.7多模块程序的测试策略8.8面向对象系统的测试第9章软件维护9.1软件维护的种类9.2软件可维护性9.3软件维护的实施9.4软件维护的管理9.5软件配置管理第10章软件复用软件复用的基本概念第11章软件工程管理11.1软件管理的目的和内容11.2项目进度安排第12章软件质量管理软件质量保证、质量认证、可靠性的概念,CMM基本概念,软件质量标准体系。

软件工程 第9-12章:三大模型

软件工程 第9-12章:三大模型
监视周边 批准预算
经理
管理人事
批准安全 证书
保安
如果要求安全主管可以担任
经理和保安的角色,这样,安
经理
管理人事
全主管与经理,安全主管与保
安之间存在泛化关系,安全主
批准预算
管就可以参与全部4个用例。
但经理或者保安却不能担任
安全主管
批准安全 证书
安全主管的角色,也就不能参
与用例批准安全证书。
保安
监视周边
Survey sales
监督员
(2)静态图:类图、对象图和包图
Customer name : string phone : string 1 1 1..* Reservation date : Date BoxOffice Request(count, performance) kjosk CreditCardService ShowAvailability(seatlist) DemandPayment(cost) PrintTickets(performance, seats) EjectCard() Charge(cardnumber, cost)
TicketSeller
《datdbase》 TicketDB
1
节点多重性
*
Kiosk
1
1
*
*
*
SalesTerminal
CustomerInterface
ClerkInterface
售票员
顾客
对象模型与静态建模
现实世界
认识抽象
概念模型
信息世界
一 类图 1.实体
类名
属性 术语标准、含义确切、名词或名词短语 可见性 属性名:类型名=初值{性质串} - private # protected

张海藩《软件工程导论》(第6版)(课后习题 第12章 面向对象实现)【圣才出品】

张海藩《软件工程导论》(第6版)(课后习题 第12章 面向对象实现)【圣才出品】

第12章面向对象实现1.面向对象实现应该选用哪种程序设计语言?为什么?答:(1)面向对象实现应该尽量选用面向对象语言来实现面向对象分析、设计的结果。

(2)原因①一致的表示方法。

面向对象开发基于不随时间变化的、一致的表示方法。

既有利于在软件开发过程中始终使用统一的概念,也有利于维护人员理解软件的各种配置成分。

②可重用性。

既可重用面向对象分析结果,也可重用相应的面向对象设计和面向对象程序设计结果。

③可维护性。

程序显式地表达问题域语义,对维护人员理解待维护的软件有很大帮助。

在选择编程语言时,应该考虑的首要因素是哪个语言能最恰当地表达问题域语义。

2.面向对象程序设计语言主要有哪些技术特点?答:(1)支持类与对象概念的机制。

(2)实现聚集结构的机制。

(3)实现泛化结构的机制。

(4)实现属性和服务的机制。

(5)类型检查机制。

(6)类库。

(7)效率。

(8)持久保存对象的机制。

(9)参数化类的机制。

(10)开发环境。

3.选择面向对象程序设计语言时主要应该考虑哪些因素?答:(1)将来能否占主导地位。

(2)可重用性。

(3)类库和开发环境。

(4)其他因素,包括售后服务、对运行环境的需求、集成已有软件的难易程度等。

4.良好的面向对象程序设计风格主要有哪些准则?答:面向对象程序设计风格应遵循如下准则:(1)提高重用性。

(2)提高可扩展性。

(3)提高健壮性。

5.测试面向对象软件时,单元测试、集成测试和确认测试各有哪些新特点?答:(1)单元测试,是在类层面上的测试。

由于继承和复合,类(或对象)在很多情况下已不再是单纯意义上的单个操作。

因此,具体的测试将在多有与操作有关的每个子类语境中进行。

(2)集成测试,由于面向对象软件中类的成分直接和间接交互,使得传统测试放法已经失去意义。

因此有两种策略可供选择,分别是基于线程的测试和基于使用的测试。

(3)确认测试,关注与用户可见的动作和用户识别的系统输出,但基于场景的测试总是主宰面向对象系统的确认测试。

《软件工程》各章课后习题答案

《软件工程》各章课后习题答案

第一章课后参考答案1.什么是软件危机?它们有哪些典型表现?为什么会出现软件危机?“软件危机”是指计算机软件的“开发”和“维护”过程中所遇到的一系列“严重问题”。

这些问题决不仅仅是不能正常运行的软件才具有的,实际上,几乎“所有软件”都不同程度地存在这些问题。

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

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

一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很小的,因为这不是整体构架的错误。

3.什么是软件工程?它有哪些本质特征?怎么用软件工程消除软件危机?软件工程是指导知道计算机软件开发和维护的一门工程学科。

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图12.1 传统开发方式很难应对需求变化
图12.2 极限编程立足于降低变化带来的损耗
一套软件开发方法是由一系列与开发相关的规则。重量级的开发方法严 格定义了许多的规则、流程和相关的文档工作,一般适合于大型的软件开发。 而XP这样的轻量级开发方法,其规则和文档相对较少,流程更加灵活,实施 起来相对较容易。 因为极限编程还很年轻,国内对它的术语没有统一的译名,为了方便大 家今后查阅这方面的资料,本章将列出每个术语的英文名。按照极限编程的 行业惯例,对一些不方便翻译的术语,比如user story,直接使用其英文叫 法,对一些有了固定中文译名的术语,比如“重构”(refactor)则主要使用其 中文叫法。
12.2.6
发布
当我们就有了一个开发计划,每经过一个开发周期(Iteration),软件就发布 一次。在一个开发周期内,开发人员要求客户选择最有价值的User Story作为 未来一两个星期的开发内容。 第一个开发周期完成后,提交给客户的系统虽然 不是最终的产品,但它已经实现了几个客户认为是最重要的Story,开发人员将 逐步在其基础上增加新的模块。在发布前软件都经过单元测试和集成测试,因 此虽然软件并不完备,但是客户如果愿意的话,可以真正使用它。
12.2 极限编程的软件开发模式
12.2.1工作环境 工作环境 每个参加项目开发的人都将担任一个角色(项目经理、项目监督人等等)并履行相应 的权利和义务。所有的人都在同一个开放的开发环境中工作,最好是所有人在同一个大房 子中工作。每天早晨,所有人一起站着开个短会。墙上有黑板,随时随地都可以在黑板上 讨论问题。所有的Story卡、CRC卡等都贴在墙上。 极限编程强调一周40小时工作制,不 加班。
第12章 极限编程
12.1 极限编程概述 极限编程( 极限编程(Extreme Programming,简称XP)由Kent Beck在1996年最先提出并 在全球大量应用的一种新型软件工程模型。 之所以另辟一章单独讲授极限编程,是因为极限编程是一种轻量级的、灵巧的、 简单的软件工程方法,适合12人以下的小型开发团队。它的主要目标在于面对商业环 境作出了务实的选择,力求降低需求变更而带来的成本,提高软件的客户满意度。 在传统系统开发方法中,系统需求是在项目开发的开始阶段就确定下来,并在之 后的开发过程中保持不变的。这意味着项目开发进入到之后的阶段时出现的需求变 更——这样的需求变更在国内目前的商业环境中是不可避免的——将导致开发成本急 速增加
12.2.5 测试
XP提倡在开始写程序之前先写单元测试。开发人员应该经常把开发好的模块整合到 一起 (Continuous Integration),每次整合后都要运行单元测试;做任何的代码复 核和修改,都要运行单元测试;发现了BUG,就要增加相应的测试(因此XP方法不 需要BUG数据库)。除了单元测试之外,还有整合测试,功能测试、负荷测试和系 统测试等。所有这些测试,是XP开发过程中最重要的文档之一,也是最终交付给用 户的内容之一。 在极限编程中,测试是非常重要的一个环节。它首先要求在编程之前先写好测试。 其目的是为了提高软件的可测试性。软件设计如果没能够考虑软件的可测试性,那 么测试的成本就会升高,软件质量随之下降。 另外是为了提高程序的可测试性。有时候,单元测试或是组件测试是很难进行的。 例如,对于一个实现企业流程的组件,之间涉及到大量的状态、事件、分支选择等 等因素。对这样的组件进行组件测试的代价是非常高的。因此,事先写测试,可以 让代码的结构便于测试。从而降低测试成本,软件质量因此提高。 以Junit为代表的xUnit测试框架是目前广泛应用的开源测试软件。它是一个回归测试 框架(regression testing framework)。这是一种白盒测试,测试者必须知道被测 试的软件如何完成功能和完成什么样的功能。它还可以作自动测试。
User Story这个方法有以下几个好处:
①最好的需求就是用户自己写的需求,软件开发人员替用户写需求,容易曲解用户 的意思。用户自己写的需求最大地体现了用户的利益。 ②设计立足于要解决的现实事务,而不是立足于计算机模型。软件开发人员总是免 不了会站在计算机的角度看问题,User Story方法从根本上改变了这一点。 ③用户更重视全局,重视真正重要的部分。用户可以深度介入需求分析,在开发过 程中就不断调整开发的目标,防止交货后才发现问题,带来很大的修改成本。 ④可作为评估软件是否成功的依据。 ⑤为用户竖立开发成本的概念。用户决定哪些部分最重要,哪些先开发,哪些部分 因为成本的关系,可以舍弃。
12.2.4 编程
成对编程(Pair Programming)是极限编程的一大特色,两个人一起使用 同一个屏幕,同一个键盘,写同一段程序。他们并不是轮换休息,而是一 个扮演司机,一个扮演导航员。比如,当一个程序员在写单元测试的时候, 另外一个就思考,怎样的代码可以满足这个测试。
成对编程的好处:
①更好的纪律:成对编程可以提高纪律性,防止长时间的发呆和“不务正业”。 ②更好的代码:两个人一起思考同一段程序,容易写出更优质的代码。极限编 程不但要求“司机”和“导航员”互换,还要求各个双人小组之间互相交换。 这样,有很多人会参与同一段代码的编写,不但可以显著提高代码的可读性, 当一对程序员卡壳的时候,还能迅速获得其他程序员的帮助。 ③更流畅的工作:一个人编程的时候,工作一旦被打断,思路也被打断,总是 需要花一些额外的时间才能继续刚才的思路。而两个人编程,另一个人可以立 刻接替上去。另外,一个人编程调试,当错误比较多的时候,很容易忘记忘记 错误代码之间的联系,忘记自己刚刚做了什么,正打算干什么。重新找回思路 需要浪费时间,而且使信心受挫。 ④分享: Pair Programming很容易使得整个团队很方便地分享编程经验。根据 国内一些XP实践先驱的经验看,这种模式使团队中经验不足的初级程序员获益 匪浅。没有任何一种学习方法,能够像极限编程一样,让一个初级程序员跟高 级程序员在一起思考,一起写代码,一起测试,一起做代码回顾(code review),接受手把手的指点。 另外,代码所有权归于整个开发队伍 (Collective Code Ownership)。程序员 在写程序和重整优化程序的时候,都要严格遵守编程规范。任何人都可以修改 其他人写的程序,修改后要确定新程序能通过单元测试。
12.2.3 设计
XP提倡简单设计(Simple Design),用最简单的办法实现每个小 需求。这些设计只要能满足系统和客户在当下的需求就可以了, 不需要考虑将来可能的变化。在XP中,没有那种传统开发模式中 一次性的、针对所有需求的总体设计。整个设计过程包括在整个 螺旋式发展的项目中。 在极限编程中有个计划游戏(Plan game Plan game)的概念。计划,往往 都是很多软件组织的一块心病。所有人都知道计划的重要性,没 有计划,软件过程无从遵循;可是计划赶不上变化。软件过程又 常常偏离计划。XP的态度是:与其在一开始就费时耗力地制定一 堆不切实际的计划,倒不如花费少量的精力做一个简单的计划, 然后在随后的软件过程中不断的进行调整。真正要实现这种“不 断调整”还是比较困难的,因此推荐大家在开发的时候使用面向 对象技术。在开发的时候先关注接口再不关注具体的实现。使用 “设计模式”调整内部结构却不改变接口。
User Story也有弊端。那些故事缺乏格式,各人的文学描述能力有差异,关键信息可能没有被 重点表达出来。关键流程可能被忽略。合法的特例可能被遗忘。对此,国内的一位XP先驱林星提出 采用use case(用例)技术。用例技术保持了需求的简单原则,它的形式和User Story非常的相似,但 是用例具有自己的格式,虽然这个格式也是可以任意定义的。用例的重点是表示系统的行为。用例 表示的内容和User Story并没有太大的差别,但用例比较强调格式。 CRC卡片是一组标准的索引卡片。每一张卡片被分为三个部分,分别是类的名称,类的职责, 以及该类的合作者。类是一类相似对象的抽象,职责是该类所知道的或要去做的,合作者是另外一 个与该类有交互的类。在需求建模过程中,CRC模型用在概念建模中,用来揭示某一领域内的概念 和它们之间高层的关系。 比如:一个出纳员类的卡片,类名称就叫出纳员,类的职责就是收钱、发钱,类的合作者就是 会计类和财务主管类。 可以看出,CRC卡片是立足于计算机语言的,而User Story则是立足现实世界的。一般来说,一 个User Story包括的CRC卡片不应该大于10个,否则就说明那个User Story太长了,应该分解。
12.3
重整和优化Байду номын сангаас
因为XP迭代开发的特点,重整和优化显得极其 重要。
12.3.1 重构可以达到的目标
1.改进软件设计 重构和设计是相辅相成的,它和设计彼此互补。有了重构,你仍然必须做预先的 设计,但是不必是最优的设计,只需要一个合理的解决方案就够了,如果没有重 构、程序设计会逐渐腐败变质,愈来愈像断线的风筝,脱缰的野马无法控制。重 构其实就是整理代码,让所有带着发散倾向的代码回归本位。 2.使代码更易为人所理解 Martin Flower说过"任何一个傻瓜都能写出计算机可以理解的程序,只有写出人类 容易理解的程序才是优秀的程序员。"如果代码不能为人所理解,那么今后的维护 将十分困难。 3.帮助发现隐藏的代码缺陷 孔子说过:温故而知新。重构代码可以加深理解原先所写的代码。通过重构代码 可以加深对原设计的理解,发现其中的问题和隐患,构建出更好的代码。 4.从长远来看,有助于提高编程效率 当你发现解决一个问题变得异常复杂时,往往不是问题本身造成的,而是你用错 了方法,拙劣的设计往往导致臃肿的编码。
12.2.2需求分析 需求分析 客户被纳入项目开发队伍。由于客户不具备计算机专业知识,无法用专业语言明 确描述需求。所以开发人员和客户一起,用讲故事的方式把需求表达出来。这种故 事被称为User Story。因为有很多需求,所以有很多的User Story,开发人员根据经 验,把这些User Story组合或者分解,最终记录在一些叫做Story Card的小卡片上。 这些User Story将陆续被程序员们在各个小的周期(Iteration)开发。这个周期通 常不超过3个星期。 因为这个Iteration很短,所以不可能一次就实现所有的User Story. User Story按照下面的原则来确定优先级:客户来指定各个User Story的商业价值, 价值高的先开发。开发人员确定每个User Story的开发风险,风险高的将被优先开发。
相关文档
最新文档