软件工程第1章概述.ppt
软件工程,徐晓君,课程性质:考试课学时:64(48+16)学分:4成绩分配:50%+50%本课程讲述软件工程的基本概念、原理、方法和工具,系统地介绍目前流行的和较成熟的软件工程技术。学习软件开发与维护的普遍原理和基本技术,提高软件开发维护的效率。前续课程:数据库原理、数据结构、软件开发工具后续课程:毕业实践、毕业设计,目录,概述软件计划软件需求分析软件总体设计软件详细设计软件编码软件测试软件实施与维护软件项目管理面向对象软件工程技术,第1章概述,本章要点软件软件工程软件危机软件生存周期软件开发模型软件开发方法,1.1软件工程学的几个基本概念,1.1.1 软件与软件工程1.软件及其组成软件是指计算机程序及其有关的数据和文档的集合,软件的发展,第一代(20世纪40年代中期到60年代中期):程序设计阶段。第二代(从20世纪60年代中期到70年代初期):程序系统阶段,软件=程序+文档阶段 1968年北大西洋公约组织正式提出“软件工程”(software engineering)的术语第三代(从20世纪70年代中期到90年代):软件工程阶段。这阶段的主要任务是为了克服软件危机,适应软件发展的需要,而采用“工程化的生产”方式。第四代技术阶段(从20世纪80年代中期至今):软件产业在世界经济中已经占有举足轻重的地位。,2.软件危机与软件工程,软件危机:在软件开发和维护过程中所遇到的一系列严重问题。软件危机包含下述两方面的问题:如何满足日益增长的软件需求如何维护数量不断膨胀的已有软件软件危机的主要表现供求矛盾软件成本与开发进度难以估计软件产品不符合用户的实际需要软件的可靠性差软件的维护费急剧上升,软件危机产生的原因目标不清情况不明通信误解步骤混乱不遵守统一的标准解决软件危机的途径组织良好、管理严密、各类人员协同配合统一开发标准使用软件开发辅助工具,3.软件工程,软件工程:1983年美国IEEE软件工程标准术语对软件工程下的定义为:软件工程是开发、运行、维护和修复软件的系统方法.1993年,IEEE为软件工程的定义是:“软件工程是将系统化的、规范化的、可度量的方法应用于软件的开发、运行和维护过程,即将工程化应用于软件中的方法的研究。本书:采用工程的概念、原理、技术和方法来研制和维护软件。,软件工程是指导计算机软件开发和维护的工程学科。软件工程采用工程的概念、原理、技术和方法来开发与维护软件。软件工程的目标是以较少的投资获取较高质量的软件,软件工程的任务及研究范围,软件工程主要研究的内容:软件的规范与标准 p9软件开发技术软件工程方法学软件工具和软件支撑环境软件管理,1.软件工程方法学,软件工程方法学是编制软件的系统方法,它确定软件开发的各个阶段,规定每个阶段的活动、产品、验收的步骤和完成准则三要素:方法:完成软件开发任务的技术方法(定义说明法、结构化的构造方法、文档资料描述方法)。为软件开发提供了“如何做”的技术工具:为了支持软件的开发和维护而研制的程序系统。(需求分析工具、编辑程序、编译程序、排错工具等)过程:把输入转化为输出的一组彼此相关的资源和活动。规定了完成任务的工作阶段、工作内容、产品、验收的步骤和完成的准则,2、软件工具和软件支撑环境,软件工具是指可以用来帮助开发、测试、分析、维护其他计算机程序及文档资料的一类程序。需求分析工具设计工具编码工具确认工具维护工具,软件支撑环境:在基本软硬件基础上,提供一组能支持软件生存周期的工具。组成:数据库一组工具命令或调用方式,3、软件管理,目的:合理地使用人力、物力资料,以最少消耗来开发软件,保证软件质量,最有效地组织力量,制定计划,保证各类资源与各种活动协调同步。内容:工程计划管理 费用管理 人员组织管理 质量管理等。,软件生存周期,软件生存周期:软件产品或软件系统从计划、分析、设计、投入使用到被淘汰的全过程。软件生存周期中,软件开发与维护时的费用越低,软件的使用寿命越长,产生的价值就越大,这就是掌握软件工程学的目的。,软件生存周期各阶段及相应的任务,软件计划问题定义:确定系统的目标、规模、基本任务可行性研究:经济、技术、法律等是否可行软件开发需求分析:确定系统应具备的具体功能总体设计:系统的模块功能、模块结构及模块间相互调用关系、接口详细设计:每个模块内部过程的描述编码测试软件运行、维护,每一阶段的工作都以前一阶段的结果为依据,并作为下一阶段的前提。每个阶段都要进行复审,主要检查是否有高质量 文档资料。前一阶段复审通过,后一阶段才能开始。软件生命周期划分的原则:各阶段的任务彼此间尽可能相对独立同一阶段的工作任务尽可能相同。,软件开发模型,瀑布模型快速原型喷泉模型螺旋模型,1.瀑布模型,瀑布模型的特点,软件生命周期的顺序性适合于在软件需求比较明确、开发技术比较成熟、工程管理比较严格的场合。文档驱动尽可能推迟软件的编码保证质量每个阶段都要完成规定的文档每个阶段都要对已完成的文档进行复审以便早日发现隐患,排除故障。,快速原型模型是指快速开发一个可以运行的原型系统,该原型系统所能完成的功能往往是最终产品能完成功能的一个子集。请用户试用原型系统,以便能准确地认识到他们的实际需求是什么,然后书写软件系统的需求规格说明文档,根据这份文档开发出来的软件可以满足真实需求。创建快速原型从设计用户界面开始,所建立的原型所能完成的功能,往往是用户需求的主要功能,该方法鼓励用户参加开发过程,用户参与原型 运行和评价,能充分地与开发方协调一致。开发期间,原型还可以作为终端用户的教学模型,开发者一边进行软件开发,一边让用户学习使用,若用户发现软件功能不符合自己的实际,可以及时提出意见,开发者应立即进行修改,如此反复进行,直到用户满意为止。,2.快速原型,2.快速原型,原型的作用是获得用户的真正需求,三种类型,1.渐增式的原型(增量模型)优点:在较短的时间内向用户提交能完成一定功能的产品,并使用户有较充裕的时间学习和适应产品方法:增量开发 增量提交,增量开发:在软件需求分析和设计阶段采用整体开发方式,在编码和测试阶段采用增量开发模型开发方式,先对部分功能进行编码、测试,提交用户试用,增量提交:所有阶段都采用增量模型开发方式。先对某部分功能进行需求分析、设计、编码、测试,提交给用户试用,充分听取用户意见,再对另 一部分功能进行分析、设计等,提交给用户试用,直到所有功能开发完毕。,2.用于验证软件需求的原型系统分析人员在确定了软件需求后,从中选出某些应验证的功能,用适当的工具快速构造出可运行的原型,由用户试用和评价。可以丢弃。3.用于验证设计方案的原型在概要设计和详细设计过程中可以用原型来验证总体结构或某些关键算法。可以丢弃,也可做为最终产品的一部分。,3.喷泉模型,典型的面向对象软件开发模型着重强调不同阶段之间的重叠是一种以用户需求为动力,以对象作为驱动的模型,概念模型分析建立系统模型(对象模型、过程模型)系统设计:模型对象和过程的规范描述对象设计与实现测试:测试所有的对象及对象相互之间的关系是否符合要求系统组装集成演化:喷泉模型主张分析和设计过程的重叠,不严格加以区分,模块集成过程要反复经过分析、设计、测试、集成这几个阶段,每次集成都使系统功能在原有基础上得到扩展,因此,称为系统演化,4.螺旋模型,1.2软件开发的原则和方法,原则:自顶向下将复杂系统进行分解,由高度抽象到逐步具体的方法,形成树状结构模块结构将软件系统分解成若干个模块,方法1、非自动形式系统开发方法系统流程图采用自顶向下功能分割法。工具:事务流程图、处理流程图、计算机化流程图、程序说明书适用于系统分析与设计结构分析法采用自顶向下数据流分割法。工具:数据流程图、数据字典、判定表、结构化语言等适用于系统分析,结构化设计法采用模块化结构方法工具:模块结构图、模块说明书适用于软件系统设计数据结构法采用身顶向下数据结构分割法工具:数据结构图、程序结构图适用于小规模系统设计层次-输入-处理-输出方法(H-I-P-O)采用自顶向下分层图描述功能及其输入、处理、输出工具:HIPO图和I-P-O图适用于软件系统分析和设计,2、半自动形式的系统开发方法软件需求工程法问题说明语言与分析法3、自动形式的系统开发方法,练习1,快速原型法是用户和设计者之间的一种交互过程,适用于A系统。它从设计用户界面开始,首先形成B,然后用户C并就D提出意见。它是一种E型设计过程。,A:1、需求不确定性较高的 2、需求确定的 3、管理信息 4、决策支持,B:1、用户使用手册 2、系统界面原型 3、界面需求分析说明书 4、完善用户界面,C:1、阅读文档资料 2、改进界面的设计 3、模拟界面的运行 4、运行界面的原型,D:1、使用发种编程语言 2、程序结构 3、同意什么,不同意什么 4、执行速度是否满足要求,E:1、自外向内 2、自底向上 3、自顶向下 4、自内向外,练习2,A是将软件生命周期的各个阶段依线性顺序连接,用文档驱动的模型。B是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。,A、B:1、瀑布模型 2、快速原型模型 3、喷泉模型 4、螺旋模型,练习3,假设你要开发一个软件,它的功能是把987238.8378这个数开方,所得到的结果精确到小数点后四位,一旦实现并测试完成后,该产品将被抛弃。你打算选用哪种软件生命周期模型?,答:快速原型,原因是这个软件功能非常简单,可以很快地容易实现,而且实现并测试完之后,该产品将被抛弃。,练习4,假设你要为一家生产和销售长筒靴的公司开发一个软件,使用此软件来监控该公司的存货,并跟踪从购买橡胶开始,到生产长筒靴、发货给各个连锁店,直至卖给顾客的全过程。以保证生产销售过程的各个环节供需平衡,既不佳人有停工待料现象,也不会有供不应求现象。你在为这个项目选择生命周期模型时使用什么准则?,答:该软件产品跟踪该公司的全部流程,需求明确,可以按阶段划分,为了保证前后的连续和衔接,每个阶段都需要完成合格的文档,所以考虑使用瀑布模型。,