1第一二章软件工程和过程1
软件工程流程
软件工程流程软件工程是一门涉及软件开发、维护和管理的学科,它涉及到一系列的流程和方法来确保软件的质量和效率。
软件工程流程是指在软件开发的整个过程中所采用的一系列步骤和方法,以便于组织、规划和控制软件开发过程,以达到预期的软件产品。
首先,在软件工程流程中,需求分析是一个非常重要的环节。
在需求分析阶段,开发团队需要与客户充分沟通,了解客户的需求和期望,明确软件的功能和性能要求。
只有通过充分的需求分析,才能确保软件开发的方向和目标是正确的。
接下来是软件设计阶段。
在这个阶段,开发团队需要根据需求分析的结果,设计出软件的整体架构和各个模块的具体实现方案。
软件设计需要考虑到软件的可扩展性、可维护性和性能等方面,以保证软件具有良好的设计质量。
然后是软件编码阶段。
在这个阶段,开发团队将根据软件设计的方案,实际编写软件代码。
在编码的过程中,开发人员需要遵循一定的编码规范和标准,以确保软件代码的可读性和可维护性。
接着是软件测试阶段。
在软件测试阶段,开发团队将对已经编写好的软件进行各种测试,包括单元测试、集成测试和系统测试等。
通过测试,可以发现软件中存在的缺陷和问题,并及时进行修复和改进。
最后是软件部署和维护阶段。
在软件开发完成后,需要将软件部署到实际的运行环境中,并进行运行和监控。
同时,还需要对软件进行定期的维护和更新,以确保软件的稳定性和安全性。
总的来说,软件工程流程是一个系统工程,需要开发团队在整个软件开发过程中严格按照规定的流程和方法进行操作,以确保软件开发的质量和效率。
只有通过科学的软件工程流程,才能够开发出满足客户需求并且具有良好质量的软件产品。
软件工程概论课后答案解析
第1章软件与软件工程的概念1、1 举出您所知道的应用软件的例子。
办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。
1、2 认为“软件就就是程序,软件开发就就是编程序。
”这种观点就是否正确?为什么?认为“软件就就是程序,软件开发就就是编程序。
”这种观点就是错误的。
首先,软件就是计算机系统中与硬件相互依存的另一部分,它就是包括程序,数据及其相关文档的完整集合,程序只就是软件的组成部分之一;其次,在软件开发中,编程只就是软件开发过程的一个阶段。
1、3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么?可以将软件的设计比作建筑设计,软件设计的成果相当于建筑设计的设计图纸。
1、4 什么就是软件危机?它有哪些典型表现?为什么会出现软件危机?软件危机:软件危机就是指在计算机软件的开发与维护过程中所遇到的一系列严重问题。
典型表现:(1)对软件开发成本与进度的估计常常很不准确。
(2)用户对“已完成的”软件系统不满意的现象经常发生。
(3)软件产品的质量往往靠不住。
(4)软件常常就是不可维护的。
(5)软件通常没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占的比例逐年上升。
(7)软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。
产生软件危机的原因:除了软件本身的特点,其原因主要有以下几个方面:(1) 缺乏软件开发的经验与有关软件开发数据的积累,使得开发工作计划很难制定。
(2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。
(3) 软件开发过程不规范。
如,没有真正了解用户的需求就开始编程序。
(4) 随着软件规模的增大,其复杂性往往会呈指数级升高。
需要很多人分工协作,不仅涉及技术问题,更重要的就是必须有科学严格的管理。
(5) 缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。
1、5 什么就是软件工程?软件工程就是指导计算机软件开发与维护的工程学科。
软件工程师软件工程流程
软件工程师软件工程流程软件工程师是一个非常重要的职业,他们在软件开发过程中扮演着关键的角色。
为了确保软件开发过程的高效、优质和可靠性,软件工程师需要熟悉并遵循一系列的软件工程流程。
本文将介绍软件工程师在软件开发中使用的一般软件工程流程。
一、需求分析在软件开发开始前,软件工程师首先需要与客户进行沟通,了解客户的需求和期望。
通过与客户的交流,软件工程师可以获得对软件功能和性能的具体要求。
在需求分析阶段,软件工程师需要识别和记录客户需求,以便在后续的开发过程中作为指导。
二、系统设计在需求分析的基础上,软件工程师需要进行系统设计。
系统设计是指根据客户需求,将需求转化为设计方案的过程。
在系统设计阶段,软件工程师需要设计软件系统的整体结构、模块划分以及模块之间的接口。
设计的目标是确保软件系统的可扩展性和可维护性。
三、编码与实现在系统设计完成后,软件工程师将转到编码和实现的阶段。
在这个阶段,软件工程师使用特定的编程语言和工具来编写代码并实现软件系统。
编码与实现过程需要严格遵循系统设计的规范和要求。
软件工程师需要确保编写的代码逻辑正确、可读性强,并进行适当的测试和调试。
四、软件测试软件测试是确保软件质量的重要环节。
在软件开发的不同阶段,软件工程师需要进行不同类型的测试。
功能测试用于验证软件系统是否满足需求规格说明书中的功能要求;性能测试用于检测软件系统在不同的负载和场景下的性能表现;安全测试用于评估软件系统的安全性。
软件工程师将根据测试结果对软件系统进行优化和调整。
五、部署与维护当软件系统通过测试并且达到客户的要求后,软件工程师会将软件系统部署到生产环境中。
在部署过程中,软件工程师需要确保软件系统与硬件环境以及其他软件的兼容性。
一旦软件系统部署完成,软件工程师还需要进行后续的维护和支持,以保证软件系统的正常运行。
六、迭代与改进软件开发并不是一次性的过程,在实际使用中,软件工程师需要不断改进和迭代软件系统。
软件工程师会与客户进行沟通,了解客户的反馈和需求,然后根据反馈和需求进行软件系统的升级和改进。
软件工程各章名词解释
名词解释一个三分 五个十五分第一章 绪论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工作台是一组工具集,支持像设计,实现或测试等特定的软件开发阶段.。
软件工程-课程目录-大纲视图(全国高等教育自学考试指定教材-计算机网络专业-独立本科)
第一章绪论1.1 软件工程概念的提出与发展1.2 软件开发的本质1.3 本章小结第二章软件需求与软件需求规约2.1 需求与需求获取2.1.1需求定义2.1.2 需求分类2.1.3 需求发现技术2.2 需求规约2.2.1 需求规约定义2.2.2 需求规约(草案)格式2.2.3 需求规约(规格说明书)的表达2.2.4 需求规约的作用2.3 本章小结第三章结构化方法3.1 结构化需求分析3.1.1 基本术语1.数据流2.数据存储3.数据源和数据谭3.1.2 系统功能模型表示数据流图(Dataflow Diagram)3.1.3 建模过程1.建立系统环境图, 确定系统语境2.自顶向下, 逐步求精, 建立系统的层次数据流图3.定义数据字典数据流条目给出所有数据流的结构定义数据存储条目给出所有数据存储的结构定义数据项条目给出所有数据项的类型定义4.描述加工(1)结构化自然语言(2)判定表(3)判定树3.1.4 应用中注意的问题(1)模型平衡问题(2)信息复杂性控制问题3.1.5 需求验证3.2 结构化设计3.2.1 总体设计1.总体设计的目标及其表示(1)Yourdon提出的模块结构图(2)层次图(3)HIPO图2.总体设计步骤(1)变换型数据流图——变换设计(2)事物型数据流图——事物设计3.模块化及启发式规则(1)模块化1)耦合①内容耦合②公共耦合③控制耦合④标记耦合⑤数据耦合2)内聚①偶然内聚②逻辑内聚③时间内聚④过程内聚⑤通信内聚⑥顺序内聚⑦功能内聚(2)启发式规则1)改进软件结构, 提高模块独立性2)力求模块规模适中3)力求深度、宽度、扇出和扇入适中4)尽力使模块的作用域在其控制域之内5)尽力降低模块接口的复杂度6)力求模块功能可以预测3.2.2 详细设计1.结构化程序设计2.详细设计工具(1)程序流程图(2)盒图(N-S图)(3)PAD图(Problem Analysis Diagram)(4)类程序设计语言IPO图、判定树和判定表等也可以作为详细设计工具3.3 本章小结第四章面向对象方法——UML 4.1 UML术语表4.1.1 表达客观事物的术语1.类与对象1)类的属性(Attribute)2)类的操作3)关于类语义的进一步表达①详细叙述类的职责(Responsibility)②通过类的注解和/或操作的注解, 以结构化文本的形式和/编程语言, 详述注释整个类的语义和/或各个方法③通过类的注解或操作的注解, 以结构化文本形式, 详述注释各个操作的前置条件和后置条件, 甚至注释整个类的不变式④详述类的状态机⑤详述类的内部结构⑥类与其他类的协作4)类在建模中的主要用途①模型化问题域中的概念(词汇)②建立系统的职责分布模型③模型化建模中使用的基本类型2.接口(Interface)(1)采用具有分栏和关键字《interface》的矩形符号来表示(2)采用小圆圈和半圆圈来表示3.协作(Collaboration)4.用况(Use Case)5.主动类(Action Class)6.构件(Component)7.制品(Artifact)8.节点(Node)4.1.2 表达关系的术语1.关联(Association)(1)关联名(Name)(2)导航(3)角色(Role)(4)可见性(5)多重性(Multiplicity)(6)限定符(Qualifier)(7)聚合(Aggregation)(8)组合(Composition)(9)关联类(10)约束①有序(ordered)②无重复对象(set)③有重复对象(bag)④列表(list)或序列(sequence)⑤只读(readonly)2.泛化(Generalization)①完整(Complete)②不完整(Incomplete)③互斥(Disjoint)④重叠(Overlapping)3.细化(Realization)4.依赖①绑定(Bind)②导出(Derive)③允许(Permit)④实例(InstanceOf)⑤实例化(Instantiate)⑥幂类型(Powertype)⑦精化(Refine)⑧使用(Use)可模型化以下各种关系(1)结构关系1)以数据驱动2)以行为驱动(2)继承关系(3)精化关系(4)依赖关系4.1.3 表达组合信息的术语——包1)访问(Access)2)引入(Import)4.2 UML模型表达格式1.类图(Class Diagram)(1)模型化待建系统的概念(词汇), 形成类图的基本元素(2)模型化待建系统的各种关系, 形成该系统的初始类图(3)模型化系统中的协作, 给出该系统的最终类图(4)模型化逻辑数据库模式2.用况图(Use Case Diagram)所包含的内容(1)主题(Subject)(2)用况(Use Case)(3)参与者(Actor)(4)关联、泛化与依赖模型化工作1)关于系统/业务语境的模型化①系统边界的确定②参与者与用况的交互③参与者的语义表达④参与者的结构化处理2)关于系统/业务需求的模型化①确定系统/业务的基本用况②用况的结构化处理③用况的语义表达3.状态图(1)状态1)名字2)进入/退出效应(Effect)①entry②exit③状态内部转移3)do动作或活动4)被延迟的事件(2)事件1)信号(Signal)事件2)调用(Call)事件3)时间事件4)变化事件(3)状态转移①源状态②转移触发器③监护(guard)条件④效应(effect)⑤目标状态实际应用中, 使用状态图的作用①创建一个系统的动态模型②创建一个场景的模型4.顺序图(1)术语解析1)消息2)对象生命线3)聚焦控制(the Focus of Control)(2)控制操作子1)选择执行操作子(Operator for Optional Execution)2)条件执行操作子(Operator for Conditional Execution)3)并发执行操作子(Operator for Parallel Execution)4)迭代执行操作子(Operator for Iterative Execution)4.3 本章小结第五章面向对象方法——RUP5.1 RUP特点1.以用况为驱动2.以体系结构为中心3.迭代增量式开发5.2 核心工作流5.2.1 需求获取1.列出候选需求2.理解系统语境(1)业务用况模型(2)业务对象模型3.捕获系统功能需求(1)活动1: 发现并描述参与者(2)活动2: 发现并描述用况(3)活动3: 确定用况的优先级(Priority)(4)活动4: 精化用况(5)活动5: 构造用户界面原型1)用户界面的逻辑设计2)物理用户界面的设计3)开发用户界面原型并演示为了执行该用况, 用户怎样使用该系统(6)活动6: 用况模型的结构化5.2.2 需求分析1.基本术语(1)分析类(Analysis Class)1)边界类(Boundary Classes)2)实体类(Entity Classes)3)控制类(Control Classes)(2)用况细化(Use Case Realization)(3)分析包(Analysis Package)2.分析模型的表达3.分析的主要活动(1)活动1: 体系结构分析(Architectural Analysis)1)任务1: 标识分析包2)任务2: 处理分析包之间的共性3)任务3: 标识服务包4)任务4: 定义分析包的依赖5)任务5: 标识重要的实体类6)任务6: 标识分析包和重要实体类的公共特性需求(2)活动2: 用况分析1)任务1: 标识分析类①标识实体类②标识边界类③标识控制类2)任务2: 描述分析(类)对象之间的交互(3)活动3: 类的分析1)任务1: 标识责任2)任务2: 标识属性①关于实体类属性的标识②关于边界类属性的标识③关于控制类属性的标识3)任务3: 标识关联和聚合①关于关联的标识②关于聚合的标识③关于泛化的标识(4)活动4: 包的分析4.小结(1)关于分析模型1)分析包2)分析类3)用况细化(2)关于分析模型视角下的体系结构描述(3)用况模型和分析模型比较(4)分析模型对以后工作的影响1)对设计中子系统的影响2)对设计类的影响3)对用况细化[设计]的影响5.2.3 设计1.设计层的术语(1)设计类(Design Class)(2)用况细化[设计](3)设计子系统(4)接口(Interface)2.设计模型、部署模型以及相关视角下的体系结构描述(1)设计模型及其视角下的体系结构描述1)子系统结构2)对体系结构有意义的设计类3)对体系结构有意义的用况细化[设计](2)部署模型及该模型视角下的体系结构描述3设计的主要活动(1)活动1: 体系结构的设计1)任务1: 标识节点和它们的网络配置2)任务2: 标识子系统和它们的接口①标识应用子系统②标识中间件和系统软件子系统③定义子系统依赖④标识子系统接口3)任务3: 标识在体系结构方面有意义的设计类和它们的接口4)任务4: 标识一般性的设计机制①标识处理透明对象分布的设计机制②标识事务管理的设计机制(2)活动2: 用况的设计1)标识参与用况细化的设计类2)标识参与用况细化的子系统和接口(3)活动3: 类的设计1)任务1: 概括描述设计类2)任务2: 标识操作3)任务3: 标识属性4)任务4: 标识关联和聚合5)任务5: 标识泛化6)任务6: 描述方法7)任务7: 描述状态(4)活动4: 子系统的设计1)任务1: 维护子系统依赖2)任务2: 维护子系统所提供的接口3)任务3: 维护子系统内容4.RUP设计小结1)RUP设计的突出特点2)关于RUP的设计方法①给出用于表达设计模型中基本成分的4个术语, 包括子系统, 设计类, 接口, 用况细化[设计]②规约了设计模型的语法, 指导模型的表达③给出了创建设计模型的过程以及相应的指导3)RUP的设计模型①设计子系统和服务子系统②设计类(其中包括一些主动类), 以及他们具有的操作、属性、关系及其实现需求。
软件工程_张海蕃
应该推广使用在实践中总结出来的开发软件的成功 的技术和方法,并且研究探索更好更有效的技术和 方法,尽快消除在计算机系统早期发展阶段形成的 一些错误概念和做法。 应该开发和使用更好的软件工具。正如机械工具可 以“放大”人类的体力一样,软件工具可以“放大” 人类的智力。在软件开发的每个阶段都有许多繁琐 重复的工作需要做,在适当的软件工具辅助下,开 发人员可以把这类工作做得既快又好。如果把各个 阶段使用的软件工具有机地集合成一个整体,支持 软件开发的全过程,则称为软件工程支撑环境。
与软件开发和维护有关的许多错误认识和作法的形 成,可以归因于在计算机系统发展的早期阶段软件 开发的个体化特点。错误的认识和作法主要表现为 忽视软件需求分析的重要性,认为软件开发就是写 程序并设法使之运行,轻视软件维护等。
事实上,对用户要求没有完整准确的认识就匆忙着 手编写程序是许多软件开发工程失败的主要原因之 一。只有用户才真正了解他们自己的需要,但是许 多用户在开始时并不能准确具体地叙述他们的需要, 软件开发人员需要做大量深入细致的调查研究工作, 反复多次地和用户交流信息,才能真正全面、准确、 具体地了解用户的要求。对问题和目标的正确认识 是解决任何问题的前提和出发点,软件开发同样也 不例外。急于求成,仓促上阵,对用户要求没有正 确认识就匆忙着手编写程序,这就如同不打好地基 就盖高楼一样,最终必然垮台。事实上,越早开始 写程序,完成它所需要用的时间往往越长。
另一方面还必须认识到程序只是完整的软件产品的 一个组成部分,在上述软件生命周期的每个阶段都 要得出最终产品的一个或几个组成部分(这些组成 部分通常以文档资料的形式存在)。也就是说,一 个软件产品必须由一个完整的配置组成,软件配置 主要包括程序、文档和数据等成分。必须清除只重 视程序而忽视软件配置其余成分的糊涂观念。 作好软件定义时期的工作,是降低软件成本提高软 件质量的关键。如果软件开发人员在定义时期没有 正确全面地理解用户需求,直到测试阶段或软件交 付使用后才发现“已完成的”软件不完全符合用户 的需要,这时再修改就为时已晚了。
软件工程导论第5版
1.1 软件危机
(2)应该推广使用在实践中总结出来的开发软件的成 功的技术和方法。研究探索更好更有效的技术和方法 ,尽快消除在计算机系统早期发展阶段形成的一些错 误概念和做法。 (3)应该开发和使用更好的软件工具。在适当的软 件工具辅助下,开发人员可以把这类工作做得既快又 好。如果把各个阶段使用的软件工具有机地集合成一 个整体,支持软件开发的全过程,则称为软件工程支 撑环境。
1.1 软件危机
一系列软件相关的问题在计算机系统的整个发展过程 中一直存在着,而且这些问题还会继续恶化: 硬件的发展超过软件,建造的软件难以发挥硬件的潜能; 现有软件与用户的要求矛盾; 软件失败导致“灾难性后果”; 需要高质量、高可靠性的软件; 设计的问题使得升级和维护十分困难;
1.1 软件危机
1.2 软件工程
2. 坚持进行阶段评审:错误有放大效应
当时已经认识到,软件的质量保证工作不能等 到编码阶段结束之后再进行。因为:第一,大部分错 误是在编码之前造成的,据统计,设计错误占软件错 误的63%,编码错误仅占37%;第二,错误发现与改正 得越晚,所需付出的代价也越高。因此,在每个阶段 都进行严格的评审,以便尽早发现在软件开发过程中 所犯的错误是一条必须遵循的重要原则。
1.2 软件工程
4. 采用现代程序设计技术
从提出软件工程的概念开始,人们一直把主要精力用于研究 各种新的程序设计技术,并进一步研究各种先进的软件开发与 维护技术。实践表明,采用先进的技术不仅可以提高软件开发 和维护的效率,而且可以提高软件产品的质量。
5. 结果可以清楚地审查
软件产品不同于一般的物理产品,它是看不见摸不着的逻 辑产品。软件开发人员(或开发小组)的工作进展情况可见性差 ,难以准确度量,从而使得软件产品的开发过程比一般产品的 开发过程更难于评价和管理。为了提高软件开发过程的可见性 ,应该根据软件开发项目的总目标及完成期限,规定开发组织 的责任和产品标准,从而使得所得到的结果能够清楚地审查。
软件工程(第二版)PPT
依赖。 软件系统的安全层级、措施与防范机制。 软件系统与其它相关系统之间的协作关系。 软件系统与用户组织及其工作任务的协调性与
适应性。
3. 项目可行性分析
以少量的时间及人力成本,对项目是否可着手 实施作出有依据的判断,以避免因项目实施条 件不具备而造成的大量的人力、物力与时间的 浪费。可从技术、经济、应用等几个方面进行 可行性分析,分析结论则需要撰写成可行性分 析报告,并提交有关部门确认。
10. 建立需求模型
需求建模是用户需求问题图解,一些常用模型 有:业务树图、用例图、活动图。其中,业务 树是结构化需求建模,用例图是系统业务举例, 活动图则反映系统工作流程。
11. 进行需求验证
需求验证是指对需求分析成果的检查与确认。 主要的需求验证内容有:有效性验证、一致性 验证、完整性验证、现实性验证、可检验性验 证。
概要设计以需求规格定义为依据,首先要确定 的是系统构架,然后以系统构架为基础,确定 系统全局数据结构、程序结构,考虑系统安全 防范、故障处理措施。
2. 系统构架
系统构架是软件系统的基础框架,需要考虑问 题有:系统支持环境、系统体系结构。
系统支持环境是构建软件大厦的地基,涉及硬 件环境、软件环境、网络环境。
增量模式在整体上具有瀑布模式的里程碑特点, 可适应大型项目。但系统的局部构建上,则体 现为基于增量构件的原型进化,可适应用户的 需求变更。
5. 螺旋模式
螺旋模式是一种可较好规避开发风险的过程模 式。螺旋模式的特点是项目基于任务域螺旋式 递进,每一个任务域都需要进行风险评估,并 需要根据评估结论制定有效的风险规避措施。
软件工程1-1
1.2 软件与软件危机
面对焦油坑,很多常用的办法就是人海战术。在《人月神话》 的第2章里,Brooks提出了著名的人月神话法则:向进度落后 的项目中增加人手,只会使进度更加落后。 Brooks的著名观点:人月神话是不存在的。(这就是人月神化 的出处) 反过来,软件开始是精英们的游戏?年轻的软件经理特别喜 欢由头等人才组成的小型、精干的队伍,而不是那些几百人的 大型团队,这里的“人”当然暗指平庸的程序员。Brooks认为, 寻求精英团队的想法是幼稚的。与其回避困难,还不如现实地 来讨论,如何在有意义的时间进度内创建大型的系统。 Brooks借助法国城市兰斯(Reims)在建筑风格上的一致性 的例子,说明,风格的一致和完整性来自8代拥有自我约束和 牺牲精神的建筑师们,他们每一个人牺牲了自己的一些创意, 以获得纯粹的设计。同样,这不仅显示了上帝的荣耀,同时也 体现了他拯救那些沉醉在自我骄傲中的人们的力量。
软件是开发出来的,不是制造出来的 软件可能被“废弃”,但不会“用坏” 软件大部分是定制的,而不是装配的
软件的复杂度
一个比较中等的项目 - 5-10 人 - 10-15 个月的开发 周期 - 3-5 个外部界面 - 一些不可知的事情 & 风险
更高的技术复杂性 - 嵌入式,实时的,分布式的,不可出错的 嵌入式,实时的,分布式的, - 定制的 空前的,可复用的 定制的, 空前的, - 高性能的
1.2 软件与软件危机
现实不容乐观
60年代(软件史前)的软件危机:
(1)对软件开发的进度和成本无法估计 (2)用户对已经开发完成的软件的满意度非常低 (3)软件质量无法保证 (4)软件开发后的维护工作很难进行 (5)软件通常没有合适的文档资料 (6)软件成本在系统总成本中所占的比例越来越高 (7)软件开发的生产率跟不上需求 1962年美国水手Ⅰ号因导航软件一个语句的语义错误,导致偏 离航线,任务失败。 阿波罗8号因计算机软件错误,造成存储器信息丢失。 阿波罗14号在飞行的10天中,出现了18个软件错误。 美国IBM公司的OS/360系统,花了几千人很多年的努力而失败
Swe1
第一章软件工程学概述电子计算机发展史第一代:电子管计算机,开始于1946年,结构上以CPU为中心,使用机器语言,速度慢、存储量小,主要用于数值计算。
第二代:晶体管计算机,开始于1958年,结构上以存储器为中心,使用高级语言应用范围扩大到数据处理和工业控制。
第三代:中小规模集成电路计算机,开始于1964年,结构上仍以存储器为中心,增加了多种外部设备,软件得到一定发展,计算机处理图像、文字和资料功能加强。
第四代:大、超大规模集成电路计算机,开始于1971年,应用更加广泛,出现了微型计算机。
世界上第一台现代电子计算机ENIAC ENIAC:长30.48米,宽1米,占地面积170平方米,30个操作台,约相当于10件普通房间的大小,重达30吨,耗电量150千瓦,造价48万美元。
它使用18000个电子管,70000个电阻,10000个电容,1500个继电器,6000多个开关,每秒执行5000次加法或400次乘法,是继电器计算机的1000倍、手工计算的20万倍。
我国早期研制的计算机亿次计算机——银河计算机系列计算机软件发展史1.1 软件危机软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。
概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
软件危机的典型表现(1)对软件开发成本和进度的估计很不准确。
(2)需求不明确,导致用户对“已完成的”软件系统不满意。
(3)软件产品质量不可靠。
(4)软件常常不可维护。
(5)软件没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占比例逐年上升。
(7)软件开发产率提高的速度远远跟不上计算机应用普及深入的趋势。
软件技术面临的问题规模复杂性生产率例:•Windows 95有1000万行代码•Windows 2000有5000万行代码,3000多个工程师,几百个小团队。
软件工程教案-1(计算机0301-0304)
1.1.2 软件的概念和特点(1)
软件定义
–在程序设计原始时代 :"软件"="程序" 程序" "软件" 程序 –在基本软件时代 :"软件"="程序+说明书" 程序+ "软件" 程序 说明书" –在程序设计时代 :"软件"="文档+程序" 文档+ "软件" "文档 程序" –在软件工程时代:"软件"="程序"+"文档"+"数 在软件工程时代:
演化
维护 确认 实现 设计 分析
1.2.2 常见的几种软件开发模型(14)
喷泉模型特点:
–1. 开发过程有分析,系统设计,软件设计和实
项目工作
现4个阶段,各阶段相互重叠,它反映了软件过程 并行性的特点.
测试 实现 设计 分析 时间
不同活动之间项目成就与时间关系
1.2.2 常见பைடு நூலகம்几种软件开发模型(15)
1.2 软件过程
软件过程是为了获得高质量软件所需 要完成的一系列任务的框架,它规定 了完成任务的工作步骤. 1.2.1 软件生存周期 1.2.2 常见的几种软件开发模型
1.2.1 软件生存周期(1)
软件产品从定义开始,经过开发,使用和维 护,直到最后被淘汰的整个过程称为软件生 存周期.
软件工程第一二三章习题参考答案
请问:
(1)为什么鲍曼拆下存储器就能摆脱计算机的干扰而独自控制宇宙飞船?我们现在遇到的软件问题有这么严重吗?
(2)如果不依靠飞行指挥中心,鲍曼怎样才知道HAL的故障预报有问题?
(3)应该怎样设计计算机系统,才能避免出现故事中描述的这类问题?
3.什么是软件工程?它有哪些本质特性?怎样用软件工程消除(至少是缓解)软件危机?
答:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
软件工程本质特性:1)软件工程关注于大型程序的构造;2)软件工程的中心课题是控制复杂性;3)软件经常变化;4)开发软件的效率非常重要;5)和谐地合作是开发软件的关键;6)软件必须有效地支持它的用户;7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。
消除软件危机的途径:为了消除软件危机,首先应该对计算机软件有一个正确的认识。必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。应该开发和使用更好的软件工具。为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
软件工程第一二三章习题参考答案
人怎么能在设计阶段清除它呢?”你怎么反驳他?
答:在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件已经完成时再引入变动,当然付出的代价更高。一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很小的,因为这不是整体构架的错误。
01-第一章-软件工程绪论-软件工程教案-海南大学(共15章)
5. 项目经理岗位能力规定
年龄范围: 28岁以上 学历要求:本科以上或专科并有 计算机相关技术证书 专业要求: 计算机及相关专业 工作经历要求:1.有项目经理经历两年以上 2.同时有日本工作经验一年以上 3.通过公司内部试用期 日语水平:1.日语一级 2.熟悉各种计算机开发语言
录 用 员 工 条 件
中国向印度学习——发展软件外包业务
中国目前外包业务与市场分析
中国目前80%的外包业务来自日、韩等亚洲国家 印度的外包业务主要来自于美国 中国和印度的不同(文化、语言、软件工程意识)
软件工程教育的定位
我国软件工程的专业教育与软件人才的链之 间的关系可描述为如下图:
架构设计师 产品经理 研究生教育 项目管理者 系统分析师 系统设计师 软件开发工程师 程序员 本科教育 大专教育 中专教育
工作经历要求:1.有从事软件编程一年以上的相关工作经历 2.通过公司内部试用期 录 用 员 工 条 件 日语水平:1.相当三级 2.或者有4级证书 3.能理解日语仕样书,熟悉日语开发环境达一年 技术水平:1.熟悉运用SQL server、Oracle数据库 2.熟悉运用VC、C++或Java编程 3.能带一个实习生 能力要求:1.具备较强的学习能力 2.工作积极主动,有责任心,有良好的品质意识 3.具有团队协作精神及沟通能力 岗 位 工 作 描 述 1.能按时按质完成软件项目中的编码工作 2.能完成详细设计的任务 3.能完成综合测试任务 4.能协助公司独立担当带好新手的任务
ቤተ መጻሕፍቲ ባይዱ
实验8:编码与调试
16
课程简介及教学目标
“软件工程”是计算机科学与技术、计算机 软件与理论、信息与计算科学及其相关专业的 一门专业基础课,它是软件设计与开发以及各 种计算机应用系统开发的重要基础。是本科培 养目标——软件系统设计师和软件开发工程师 的必备知识。主要内容包括软件工程概述、可 行性分析、需求分析、概要设计、详细设计、 面向对象分析与设计、编码、软件质量与质量 保证、项目计划与管理等。课程的学习对提升 同学们的能力、素质、道德修养、团队精神等 都具有非常重要的意义。
第1章初识软件工程
软件工程
Software Engineering
李宁
Questions
❖ 什么是软件工程? ❖ 我们为什么要学习软件工程? ❖ 我们该如何学习和应用软件工程?
软件工程是什么?
❖ 用来指导软件开发的好的经验、方法和技术 ❖ 用工程化的东西来规范和指导软件企业的活动和
过程
我们自己做的网站
我们自己做的网站(2010级)
软件危机的典型表现(特征):
软件规模越来越大
Windows 95有1000万行代码 Windows 2000有5000万行代码 其中,Windows 2000开发人员结构
项目经理 开发人员 测试人员
约250人 约1700人 约3200人
软件危机的发展过程
计算机应用发展
软件数量多 软件成本高、
规模大
❖ 软件危机是指在计算机软件的开发和管理过程中 所遇到的一系列严重问题(正常、不正常运行软 件都具有这种问题) 。
2011年,甬温线特别重大铁路交通事故
2011年7月23日20时30 分05秒,甬温线浙江省 温州市境内D301次列 车与D3115次列车发生 动车组列车追尾事故。 造成40人死亡、172人 受伤,中断行车32小时 35分,直接经济损失 19371.65万元。
高校在每个学期考试结束后,要求教师在网上登 录成绩管理系统,输入本学期任教的课程的成绩 到系统中; 学生可以在线查询成绩; 院系教学管理人员可以在线统计分析成绩、在线 生成班级成绩报表等;
项目启动会
小组讨论,形成:
❖开发目标 ❖开发时间 ❖小组分工(任务) ❖实施步骤和思路 ❖其他要考虑的问题
对项目的思考
发生“软件危机”最突出的案例
IBM公司在1963年至1966年开发的IBM 360操 作系统。该项目花了5000人/年的工作量,得到的结 果却非常糟糕。
软件工程导论(第六版)张海藩课后习题部分答案
软件⼯程导论(第六版)张海藩课后习题部分答案第⼀章1-1 什么是软件危机 ? 是指在计算机软件的开发和维护过程中所遇到的⼀系列严重问题。
1-3 什么是软件⼯程 ? 是指导计算机软件开发和维护的⼀门⼯程学科。
1-4 简述结构化范型和⾯向对象范型的要点,并分析它们的优缺点。
⽬前使⽤得最⼴泛的软件⼯程⽅法学( 2 种):1. 传统⽅法学:也称为⽣命周期⽅法学或结构化范型。
优点:把软件⽣命周期划分成基⼲个阶段,每个阶段的任务相对独⽴,⽽且⽐较简单,便于不同⼈员分⼯协作,从⽽降低了整个软件开发过程的困难程度。
缺点:当软件规模庞⼤时,或者对软件的需求是模糊的或会承受时间⽽变化的时候,开发出的软件往往不成功;⽽且维护起来仍然很困难。
2. ⾯向对象⽅法学:优点:降低了软件产品的复杂性;提⾼了软件的可理解性;简化了软件的开发和维护⼯作;促进了软件重⽤。
1-6 什么是软件过程 ?它与软件⼯程⽅法学有何关系 ?z 软件过程:是为了获得⾼质量软件所需要完成的⼀系列任务的框架,它规定了完成各项任务的⼯作步骤 z 软件⼯程⽅法学:通常把在软件⽣命周期全过程中使⽤的⼀整套技术⽅法的集合称为⽅法学,也称范型1-7 什么是软件⽣命周期模型,试⽐较瀑布模型,快速原型模型,增量模型,和螺旋模型的优缺点,说明每种模型的适⽤范围。
软件⽣命周期由软件定义、软件开发和运⾏维护 3 个时期组成,每个时期⼜进⼀步划分成若⼲个阶段。
⽣命周期模型规定了把⽣命周期划分成哪些阶段及各个阶段的执⾏顺序,因此,也称为过程模型。
瀑布模型的优点: 1. 可强迫开发⼈员采⽤规范的⽅法; 2. 严格规定了每个阶段必须提交的⽂档;3. 要求每个阶段交出的所有产品都必须经过质量保证⼩组的仔细验证。
瀑布模型的缺点: 1.在软件开发初期,指明⽤户全部需求是困难的; 2.需求确定后,经过⼀段时间才得到软件最初版本; 3. 完全依赖规格说明,导致不能满⾜⽤户需求。
适⽤中⼩型项⽬。
软件工程过程
软件工程工具
• 演变趋向分类
– 语言为中心的环境 – 面向结构的环境 – 工具箱环境 – 基于方法的环境
软件工程工具
• 计算机辅助软件工程CASE
– 软件开发环境的参考模型(ECMA,90年初提 出)
– 的集成机制包括数据集成、பைடு நூலகம்面集成、控制集 成、过程集成、平台集成
– 目标是统一使用开发支持工具、实现软件开发 全过程的自动化。信息一致性——百科全书; 结构可视性;软件工程化
软件工程过程
• “软件四化”就是构架平台化、组件业务化、
编码自动化和管理工厂化。
• 四大部分既是独立的,又是相辅相成的,
它们共同协作,完成软件工艺化的整体功 能。
软件工程工具
• 功能分类
– 软件开发工具 • 需求分析工具、设计工具、测试工具
– 软件维护工具 • 版本控制、文档分析、逆向工程、再工程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
必须意识到:“软件”不等于编程,它有自己的生 必须意识到: 软件” 不等于编程, 它有自己的生 命周期 (life cycle)。大型软件系统的开发与其它工程项 。 目如建造桥梁、制造飞机、轮船等的开发有相同道理。 目如建造桥梁、制造飞机、轮船等的开发有相同道理。
“软件工程”(Software Engineering) 软件工程” 软件工程
程序系统阶段(上世纪 中 年代中 年代中) 程序系统阶段(上世纪60中-70年代中)
• •
软件工程阶段(上世纪 年代中 年代中软件工程阶段(上世纪70年代中 )
2012-2-23 15
软件工程阶段(上世纪 年代中 年代中软件工程阶段(上世纪70年代中 )
软件 = 程序 + 数据 + 文档 70-80年代:程序 = 算法 + 数据结构; 年代: 数据结构; 年代 结构化思想的提出 80年代:OO技术,AI软件,关系数据库的 年代: 技术, 软件, 年代 技术 软件 C/S模式 模式 90年代:网络,Internet,Java,分布对象 年代:网络, , , 年代 技术,组件技术… 技术,组件技术 未完全摆脱软件危机
2012-2-23
9
第一章 软件危机与软件工程
什么是软件? 什么是软件?
软件是计算机系统中与硬件相互依存的另一部分, 软件是计算机系统中与硬件相互依存的另一部分, 是计算机系统中与硬件相互依存的另一部分 是包括程序,数据及其相关文档的完整集合。 是包括程序,数据及其相关文档的完整集合。 程序是按事先设计的功能和性能要求所设计的计 程序是按事先设计的功能和性能要求所设计的计 算 机可执行的指令序列。 机可执行的指令序列。 数据是使程序能正常操纵信息的数据结构 是使程序能正常操纵信息的数据结构。 数据是使程序能正常操纵信息的数据结构。 文档是与程序开发 维护和使用有关的图文材料。 是与程序开发, 文档是与程序开发,维护和使用有关的图文材料。
2012-2-23 26
软件工程三要素
方法
为软件开发提供“如何做”的技术。包括多方面的任务,如项目计 划与估算、软件系统需求分析、数据结构、系统总体结构的设计、 算法的设计、编码、测试以及维护等。 常采用某种特殊的语言或图形的表达方法及一套质量保证标准
2012-2-23
17
产生软件危机的原因(P3产生软件危机的原因(P3-4)
与软件本身的特点有关
• 软件是逻辑产品,而非物理产品。因此,管理和控制 软件是逻辑产品,而非物理产品。因此, 软件开发过程相当困难 • 软件开发和硬件开发不同,更依赖于人因素 软件开发和硬件开发不同, 包括:软件人员的业务素质、组织、合作和管理) (包括:软件人员的业务素质、组织、合作和管理) • 软件不存在用坏、磨损、消耗等问题,一旦发现错误, 软件不存在用坏、磨损、消耗等问题,一旦发现错误, 维护工作非常困难
与软件开发与维护的方法不正确有关
• 忽视软件需求分析的重要性, 忽视软件需求分析的重要性,认为软件软件开发就是 写程序并使之运行, 写程序并使之运行,轻视软件维护等
18
2012-2-23
软件危机的表现(P3) 软件危机的表现(P3)
经费预算经常突破,完成时间一再拖延(软件开发 经费预算经常突破,
无计划性,工作量、开发的难度和进度估计不准) 无计划性,工作量、开发的难度和进度估计不准) 闭门造车) 开发的软件不能满足用户要求(闭门造车) 无质量保证措施,测试不充分) 开发的软件可靠性差(无质量保证措施,测试不充分) 无统一规范,无完整文档) 开发的软件可维护性差(无统一规范,无完整文档)
2002.3
3
参考书目
实用软件工程 赵池龙 电子工业出版社 软件工程 -实践者的研究方法 (英文版 实践者的研究方法 第四版) 第四版)Roger S. Pressman 机械工业 出版社
2012-2-23
4
《软件工程》课程介绍 软件工程》
课 时: 上课时间: 上课时间: 上机安排: 上机安排: 考核形式: 考核形式: 上课课时24,上机课时16, 40学时 上课课时24,上机课时16,共40学时 24 16 周日: ,(6 5-10周 C5周日:1-4,(6次: 5-10周)C5-120 周日: 7- 10周 N1周日:9-12, (4次: 7- 10周)N1-804 平时成绩+试验报告+平时作业(30%) 平时成绩+试验报告+平时作业(30%) 期末考试(70%) 期末考试(70%) 课程名称: 课程名称: 软件工程
2012-2-23 12
软件的特点
2012-2-23
13
软件的特点
软件的开发,至今尚未完全摆脱手工艺 软件的开发,至今尚未完全摆脱手工艺 的开发方式。 的开发方式。 软件成本相当昂贵………. 软件成本相当昂贵……….
2012-2-23
14
软件的发展历程(P1软件的发展历程(P1-2)
程序设计阶段(上世纪 年代中) 程序设计阶段(上世纪50-60年代中) 年代中
软件工程
Software Engineering
华中科技大学计算机学院医学图像信息研究中心 中科技大学计算机学院医学图像信息研究中心
2012-2-23
1
教 材
软件工程
张海藩
人民邮电出版社
2012-2-23
2
高等学校21 高等学校21世纪教材 21世纪教材
软件工程
张海藩 编著
人民邮电出版社
2012-2-23
2012-2-23
16
软件危机的含义(P2) 软件危机的含义(P2)
软件危机( 软件危机(Software Crisis) )
指在开发和维护计算机软件的过程中所遇到的一 系列严重问题。 系列严重问题。
主要包括两方面的问题: 主要包括两方面的问题:
如何开发软件, 如何开发软件,以满足对软件日益增长的需求 软件 如何维护数量不断膨胀的已有软件 如何维护数量不断膨胀的已有软件
2012-2-23 25
二八定律
§1.2 Leabharlann 件工程情形1 对软件项目进度和工作量的估计 情形1:对软件项目进度和工作量的估计,一般人 的估计, 主观认为已经完成了80% 主观认为已经完成了80%,客观实际只完成 80%, 20%; 了20%; 情形2 对程序中存在问题的估计 80%的问题存在 的估计, 情形2:对程序中存在问题的估计,80%的问题存在 20%的程序中 的程序中; 于20%的程序中; 情形3 对模块功能的估计 20%的模块实现了 的估计, 情形3:对模块功能的估计,20%的模块实现了 80%的功能 的功能; 80%的功能; 情形4 对人力资源的估计,20%的人解决了软件中 情形4:对人力资源的估计,20%的人解决了软件中 的估计 80%的问题 的问题; 80%的问题; 情形5 对投入资金的估计 企业信息系统中80% 的估计, 80%的 情形5:对投入资金的估计,企业信息系统中80%的 问题,可以用20%的资金来解决。 20%的资金来解决 问题,可以用20%的资金来解决。
2012-2-23
10
软件开发的三个过程: 软件开发的三个过程: 软件定义
目标程序
软件开发 软件维护 文档的重要性 开发过程中文档之间 的关系示意图
源程序 详细设计说明书
概要设计说明书 需求规格说明 书
用户需求报告
软件合同 软件任务书) (软件任务书)
2012-2-23
11
软件的特点
软件是一种逻辑实体 软件是一种逻辑实体,而不是具体的物 逻辑实体, 理实体,因而它具有抽象性。 理实体,因而它具有抽象性。 软件的生产与硬件不同, 软件的生产与硬件不同,在它的开发过 程中没有明显的制造过程 没有明显的制造过程。 程中没有明显的制造过程。 在软件的运行和使用期间,虽然没有硬 在软件的运行和使用期间,虽然没有硬 件那样的机械磨损,老化问题, 件那样的机械磨损,老化问题,但软件 还是需要不断地完善,软件需要维护。 还是需要不断地完善,软件需要维护。
• • 程序; 无计划、 软件 = 程序; 规模小 无计划、无管理 个体手工劳动; 机器/汇编语言;程序难读、难懂、难 个体手工劳动; 机器/汇编语言;程序难读、难懂、 修改 软件 = 程序 + 说明书 作坊式的小集团合作生产;高级语言; 作坊式的小集团合作生产;高级语言;软件应用领域扩 软件规模扩大,软件难以维护;上世纪60 60年代末 大,软件规模扩大,软件难以维护;上世纪60年代末 开始出现软件危机
结构化分析 结构化设计 结构化实现
2012-2-23
7
主要内容(教材前四篇) 主要内容(教材前四篇)
结构化实现 (4-6)
软件编码 软件测试技术 调试与软件可靠性估计
习题讲解、总结复习 (2) 习题讲解、 上机实践并完成文档 (16)
2012-2-23
8
课程基础
数据结构 程序设计方法学 已经开发过的系统 互动性 发邮件
2012-2-23 23
软件工程定义
Boehm: Boehm:运用现代科学技术知识来设计并 构造计算机程序及为开发、 构造计算机程序及为开发、运行和维护 这些程序所必需的相关文件资料 IEEE:软件工程是开发、运行、 IEEE:软件工程是开发、运行、维护和 修复软件的系统方法
2012-2-23
24
NATO Conference , Garmisch , Germany , 1968.
2012-2-23 22
什么是软件工程(P6) 什么是软件工程
提出
1968年,Fritz Bauer正式提出SE概念
定义
软件工程是指导计算机软件开发和维护的工程学 科。它采用工程的概念、原理、技术和方法来开 发与维护软件,把经过时间考验而证明是正确的 管理技术和当前能够得到的最好的技术方法结合 起来,以经济地开发出高质量的软件并有效地维 护它。