软件工程 01概述_第1页
软件工程 01概述_第2页
软件工程 01概述_第3页
软件工程 01概述_第4页
软件工程 01概述_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程

第1章概述第一章软件工程学概述1.1

软件危机1.2

软件工程中的常见问题1.3

职业和道德上的责任软件工程导论22024/1/3软件的定义

软件(

Software)是计算机系统中与硬件相互依存的另一部分,它是包括程序(Program)

,数据(Data)及其相关文档(Document)的完整集合。Software=Program+Data+Document程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料1.1软件危机2024/1/33软件工程导论1.1软件危机复杂性软件是人类思维和智能的一种延伸和在异体上的再现,在规模上可能比任何由人类创造的其他实体都要复杂,复杂性是软件的本质特性。软件的复杂性是必要属性大量的组合状态;丰富的结构和相互依赖性;良好的接口用以封装内部的复杂性

开发问题也会增加复杂性

高效率的代码通常是复杂的;重用通用化的组件意味着复杂的状态连接;复杂的代码难以维护,导致设计上的更复杂软件工程导论42024/1/31.1软件危机一致性软件必须遵从人为的惯例并适应已有的技术和系统软件必须遵循各种接口、协议和标准;有些情况下,兼容性是软件开发的目标。软件需要随接口的不同而改变,随时间的推移而变化,而这些变化是不同的人设计的结果。许多复杂性来自保持与其他接口的一致,对软件的任何再设计,都无法简化这些复杂特性。软件工程导论52024/1/31.1软件危机可变性软件产品扎根于文化的母体中;各种应用、用户、自然及社会规律、计算机硬件等持续不断地变化着,这些变化强迫着软件随之变化。所有成功的软件都会发生变更。当人们发现软件很有用时,会在原有应用范围的边界,或者在超越边界的情况下使用软件;功能扩展的压力主要来自那些喜欢基本功能,又对软件提出了很多新用法的用户们。软件工程导论62024/1/31.1软件危机不可见性软件是不可见的和无法可视化的软件的客观存在不具有空间的形体特征,定义“需要做什么”成为软件开发的根本问题。人们一直试图使用不同的技术进行软件可视化如控制流程、数据流、依赖关系、UML等,但这些技术仍然无法给出准确的、完整的描述。软件仍然保持着无法可视化的固有特性从而剥夺了一些具有强大功能的概念工具的构造思路。这种缺憾不仅限制了个人的设计过程,也严重地阻碍了相互之间的交流。软件工程导论

72024/1/31.1软件危机软件危机软件危机是指计算机软件的开发与维护过程中所遇到的一系列严重问题,几乎所有软件都不同程度地存在这些问题。软件危机主要包含两方面问题:如何开发软件以满足社会对软件日益增长的需求如何更有效地维护数量不断膨胀的已有软件。软件工程导论82024/1/31.1软件危机软件危机的典型表现:对软件开发成本和进度的估计常常很不准确;用户对“已完成的”软件系统不满意的现象经常发生;软件产品的质量往往靠不住。软件通常很难维护;软件往往没有适当的文档资料;软件成本在计算机系统总成本中所占的比例逐年上升;软件开发生产率提高的速度远远不能满足社会对软件产品日益增长的需求。软件工程导论92024/1/31962年6月,美国飞向金星的第一个空间探测号(水手1号),因其飞舱中的计算机导航程序之一的一个语句的语义出错,总是偏离航线无法取得成功。1965年~1970年,美国范登堡基地因程序有错误造成发射火箭多次失败。10软件工程导论2024/1/3按软件规模进行划分:类别 参加人员数 研制期限产品规模(源程序行数) 微型 1 1~4周 0.5k 小型 1 1~6月 1k~2k 中型 2~5 1~2年 5k~50k 大型 5~20 2~3年 50k~100k 甚大型 100~1000 4~5年 1M(=1000k) 极大型 2000~5000 5~10年 1M~10M 11软件工程导论2024/1/3软件工程导论12例:Windows95有1000万行代码

Windows2000有5000万行代码Exchange2000和Windows2000开发人员结构

Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人2024/1/3处在十字路口的中国软件产业主权大国必须建立基于自主技术的、完整的软件产业体系。软件本国提供率:中国1/3左右,美国97%“印度模式”还是“中国模式”软件人才结构不合理,缺乏中高级软件人才。软件人员缺乏软件工程化的概念。13软件工程导论2024/1/3软件需求与软件技术关系示意图14软件工程导论2024/1/31.1软件危机产生软件危机的原因客观原因:软件的不可见性在管理和控制软件开发过程相当困难;软件维护意味着改正或修改原有设计,从而使得软件较难维护;软件规模庞大,程序复杂性随软件规模指数增加,无法预见软件可能遇到的每一种情况。软件工程导论152024/1/31.1软件危机产生软件危机的原因主观原因:计算机系统发展早期开发软件的个体化特点使得许多软件工程师对软件开发和维护有不少糊涂认识,主要表现在:忽视软件需求分析的重要性;认为软件开发就是写程序;轻视软件维护。软件工程导论162024/1/3软件工程导论17

引入同一变动付出的代价随时间变化的趋势2024/1/3改正一个问题需付出的代价需求分析结构设计详细设计编码集成测试系统测试现场改正一个问题的估计费用改正一个问题估计的工作量20200200010005.02.50.050.5(美元)(人天)18软件工程导论2024/1/31.1软件危机消除软件危机的途径树立对计算机软件的正确认识软件=程序+数据+文档软件开发应该是组织良好、管理严格、各类人员团结协作共同完成的工程项目;积极开发和使用计算机辅助软件工程(CASE)工具因此,消除软件危机既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程导论192024/1/3201.2软件工程中的常见问题(一)什么是软件?什么是软件工程?软件工程和计算机科学有何区别?软件工程和系统工程有何区别?什么是软件过程?什么是软件过程模型?软件工程导论2024/1/3211.2软件工程中的常见问题(二)什么是软件过程的成本?什么是软件工程方法?什么是CASE(计算机辅助软件工程)?什么是优良软件的特点?软件工程面临的主要挑战是什么?软件工程导论2024/1/322什么是软件软件是程序和所有使用程序正确运行所需要的相关文档和配置信息。软件产品可能是为特定的顾客而开发的,也可能是为一般市场而开发的。软件成品可以分成以下两类:通用软件产品定制软件成品这两类产品的重要区别:软件描述的提供者不同。通用软件——由开发者给出定制软件——由客户给出软件工程导论2024/1/323什么是软件工程软件工程是一门工程学科,涉及软件生产的各个方面,从最初的系统描述一直到使用后期的系统维护,都属于其学科范畴。工程学科软件生产的各个方面软件工程人员应当运用系统的、有组织的工作方法来开发高质量的软件。软件工程导论2024/1/31.2软件工程工程的概念工程是将理论和所学的知识应用于实践的科学,以便经济有效地解决实际问题。手工(Craft):小规模的设计与建造

--简单问题与单一目标个人控制与个人技能工程(Engineering):大规模的设计与建造复杂问题与目标分解多人参与,需要考虑运营、管理、成本、质量控制、安全等软件工程导论24

2024/1/3软件工程导论251.2软件工程

软件工程简介危机

工程的概念工程是将理论和所学的知识应用于实践的科学,以便经济有效地解决实际问题。手工(Craft):小规模的设计与建造

--简单问题与单一目标--个人控制与个人技能工程(Engineering):大规模的设计与建造--复杂问题与目标分解--多人参与,需要考虑运营、管理、成本、质量控制、安全等

2024/1/3软件工程25只有编码的开发过程编码实现162024/1/3软件工程导论261.1软件危机

软件危机

消除软件危机的途径树立对计算机软件的正确认识

软件=程序+数据+文档软件开发应该是组织良好、管理严格、各类人员团结协作共同完成的工程项目;积极开发和使用计算机辅助软件工程(CASE)工具

因此,

消除软件危机既要有技术措施(方法和工具),又要有必要的组织管理措施。

2024/1/3软件工程26工程化的软件开发概念形成?需求规格说明?设计?实现172024/1/31.2软件工程定义(1)Theestablishmentanduseofsoundengineeringprinciples(methods)inordertoobtaineconomicallysoftwarethatisreliableandworksonrealmachines.(1968-FritzBauer)

软件工程就是建立和使用一套合理的工程原理,从而经济地获得可靠的、可以在实际机器上高效运行的软件。2024/1/327软件工程导论1.2软件工程定义(2)

Softwareengineering.(1)Theapplicationofasystematic,disciplined,quantifiableapproachtothedevelopment,operation,andmaintenanceofsoftware;thatis,theapplicationofengineeringtosoftware.(2)Thestudyofapproachesasin(1).(IEEE(TheInstituteforElectricalandElectronicengineers)Std610-1990.)

软件工程是:(1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;(2)研究(1)中提到的途径。2024/1/328软件工程导论1.2软件工程软件工程的概念[Bauer,1972]软件工程是为了经济地获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程化原则。[CMU,1990]软件工程是以工程的形式应用计算机科学和数学原理,从而经济有效地解决软件问题。[IEEE,1993]软件工程是①将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应用到软件上;②对①中所述方法的研究。

软件工程导论29

2024/1/31.2软件工程定义总之:软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。2024/1/330软件工程导论软件工程的特性1.软件工程关注于大型程序的构造2.软件工程的中心课题是控制复杂性3.软件经常变化4.开发软件的效率非常重要5.和谐地合作是开发软件的关键6.软件必须有效地支持它的用户7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人2024/1/331软件工程导论1.2软件工程软件工程的本质特征软件工程关注于大型程序的构造;“大”与“小”的分界线并不十分清晰。通常把一个人在较短时间内写出的程序称为小型程序,而把多人合作用时半年以上才写出的程序称为大型程序。传统的程序设计技术和工具是支持小型程序设计的,不能简单地把这些技术和工具用于开发大型程序。事实上,在此处使用术语“程序”并不十分恰当,现在的软件开发项目通常构造出包含若干个相关程序的“系统”。软件工程导论32

2024/1/31.2软件工程中心课题是控制复杂性通常,软件所解决的问题十分复杂,以致不能把问题作为一个整体通盘考虑。人们不得不把问题分解,使得分解出的每个部分是可理解的,而且各部分之间保持简单的通信关系。用这种方法并不能降低问题的整体复杂性,但是却可使它变成可以管理的。注意,许多软件的复杂性主要不是由问题的内在复杂性造成的,而是由必须处理的大量细节造成的。软件工程导论33

2024/1/31.2软件工程软件交付使用后仍需要经常修改绝大多数软件都模拟了现实世界的某一部分。现实世界在不断变化,软件为了不被很快淘汰,必须随着所模拟的现实世界一起变化。因此,在软件系统交付使用后仍然需要耗费成本,而且在开发过程中必须考虑软件将来可能的变化。软件工程导论34

2024/1/31.2软件工程开发软件的效率非常重要目前,社会对新应用系统的需求超过了人力资源所能提供的限度,软件供不应求的现象日益严重。因此,软件工程的一个重要课题就是,寻求开发与维护软件的更好更有效的方法和工具。软件工程导论35

2024/1/31.2软件工程开发人员和谐地合作是成功开发软件的关键软件处理的问题十分庞大,必须多人协同工作才能解决这类问题。为了有效地合作,必须明确地规定每个人的责任和相互通信的方法。事实上仅有上述规定还不够,每个人还必须严格地按规定行事。为了迫使大家遵守规定,应该运用标准和规程。通常,可以用工具来支持这些标准和规程。总之,纪律是成功地完成软件开发项目的一个关键。软件工程导论36

2024/1/31.2软件工程软件必须有效地支持它的用户开发软件的目的是支持用户的工作。软件提供的功能应该能有效地协助用户完成他们的工作。如果用户对软件系统不满意,可以弃用该系统,至少也会立即提出新的需求。因此,仅仅用正确的方法构造系统还不够,还必须构造出正确的系统。有效地支持用户意味着必须仔细地研究用户,以确定适当的功能需求、可用性要求及其他质量要求(例如,可靠性、响应时间等)。有效地支持用户还意味着,软件开发不仅应该提交软件产品,而且应该写出用户手册和培训材料,此外,还必须注意建立使用新系统的环境。软件工程导论37

2024/1/31.2软件工程在软件工程领域中通常有具有一种文化背景的人替另一种文化背景的人开发产品。创造产品这个特性与前两个特性紧密相关。软件工程师是诸如Java程序设计、软件体系结构、测试或统一建模语言(UML)等方面的专家,他们通常并不是图书馆管理、航空控制或银行事务等领域的专家,但是他们却不得不为这些领域开发应用系统。缺乏应用领域的相关知识,是软件开发项目出现问题的常见原因。软件工程导论38

2024/1/31.3软件工程方法学软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。在软件工程领域中,这两个术语的含义基本相同。软件工程方法学包含3个要素:方法、工具和过程。2024/1/339软件工程导论1.3软件工程方法学软件工程:一种层次化技术质量关注点过程方法工具

软件工程层次图软件工程三个要素:工具、方法、过程基础层,综合方法及工具,定义方法使用的顺序,所需要的管理为软件开发提供“如何做”的技术为软件开发提供自动或半自动的软件支撑环境,建立计算机辅助软件工程(CASE)的软件开发支撑系统2024/1/340软件工程导论1.3软件工程方法学ALM(ApplicationLifecycleManagement)MSF(MicrosoftSolutionFramework)2024/1/341软件工程导论软件工程层次的扩展2024/1/342软件工程导论43软件工程和计算机科学的区别从本质上来看,计算机科学研究的是构成计算机和软件系统基础的有关理论和方法;而软件工程则研究软件制作中的实际问题。计算机科学理论一直以来就不能够完全地支撑软件工程。对于实际、复杂的问题,计算机科学的经典理论不可能总是适用的,这就需要应用软件工程的方法来解决问题。软件工程导论2024/1/344软件工程和系统工程有何区别系统工程关注的是以计算机为基础的系统发展的各个方面,它包括硬件和软件开发、过程设计、系统实施等。软件工程是在系统工程中与软件基础设施、控制、应用程序和数据库等开发有关的一部分。系统工程涉及到了系统规范,体系结构的设计、集成和部署等软件工程导论2024/1/345什么是软件过程软件过程是指制作软件产品的一组活动及其结果。软件过程包含四项基本的活动:

1、软件描述

2、软件开发

3、软件有效性验证

4、软件进化软件工程导论2024/1/346什么是软件过程模型(一)软件过程模型是从一特定角度提出的软件过程的简化描述。下面介绍几种软件过程模型:

1.工作流模型

2.数据流或活动模型

3.角色/动作模型软件工程导论2024/1/347什么是软件过程模型(二)通用开发流程的模型

1.

瀑布型开发方法

2.

迭代式开发方法

3.

基于组件的软件工程(CBSE)软件工程导论2024/1/348什么是软件工程的成本粗略地讲,开发成本占60%,测试成本占40%。对于制定软件,软件的进化成本通常要高于开发成本。成本的变动取决于所开发的系统的类型和系统性能和可靠性等系统属性的要求。成本的分布依赖于软件开发所采用的过程模型软件工程导论2024/1/349软件工程活动成本分布软件工程导论2024/1/350产品开发成本软件工程导论2024/1/351什么是软件工程方法(一)软件工程方法是一种结构化方法,它包括系统模型、符号、规则、设计咨询和流程指导。无论什么方法都是基于这样的思路,即开发出能够用图形表示的系统模型,并用这些模型来描述或设计系统。这些方法应该包含许多不同的组件方法。软件工程导论2024/1/352什么是软件工程方法(二)组件描述实例系统模型描述规则建议过程指南对要开发的系统模型和定义这些模型所使用的符号的描述系统模型总的使用约束启发式方法可使设计活动具有创意,使用该方法可做出组织得很好的系统模型描述开发系统模型要遵循的活动以及这些活动的组织结构对象模型、数据流模型、状态机模型等系统模型中每一个实体都要有一个名字任何一个对象都不要有超过7个以上的相关子对象在定义与对象关联的操作前应记录对象的属性表1-2方法组件软件工程导论2024/1/353什么是CASECASE是计算机辅助软件过程(Computer-AidedSoftwareEngineering)的英文缩写。它包括很多种类的软件工具,这些工具覆盖面很广,包括支持软件过程活动,如需求分析、系统建模、调试和测试等。CASE系统通常用于方法的支持Upper-CASE

作为工具以支持需求分析和设计过程的早期活动Lower-CASE

作为工具以支持编程、调试和测试等后期活动软件工程导论2024/1/3软件工程导论54什么是CASE•CASE(ComputerAidedSoftwareEngineering)

-

计算机辅助软件工程是一组工具和方法的集合,用于辅助软件开发、维护、管理过程中的各项活动,促进软件过程的工程化和自动化。-

所有的软件工程方法都需要CASE的相应技术来支持•

用于系统模型的图形编辑器•

管理设计实体的数据字典•

生成用户界面的

GUI软件•

辅助生成系统文档的报告生成器•

支持程序纠错的调试器•

代码生成器•122024/1/3软件工程导论55CASE的层次问题定义需求分析分析设计工作台软件总体设计开发详细设计过集成化环境程编程程序设计工作台与管软件测试测试工作台理软件维护CASE工具CASE工作台CASE环境132024/1/3软件工程导论56CASE工具•IBMRational

公司产品(http:///)

-

开发过程管理:RUP-需求管理:RequisitePro

-

可视化建模:Rose-自动测试:Robot,TestRealtime,TestManager,XDE

Tester-

项目管理:ProjectConsole

-

配置管理:ClearCase,ClearQuest

•开源

CASE工具(http:///)-CVS:

应用广泛的版本管理工具-UMLModeler:UML模型图形编辑工具

-UML2EJB:

XML表示的

UML模型转换成

EJB代码的转换器142024/1/357什么是优良软件的属性(一)软件除了提供用户所需的功能和性能以外,作为一个产品它还应有一系列相关的反映软件质量的属性,如可维护性、可靠性等软件工程导论2024/1/358什么是优良软件的属性(二)产品特性可维护性可依赖性有效性可用性描述软件必须能够不断进化以满足客户的需求变化,这是软件产品最根本的特性,因为工作环境是不断变化的,软件也必须跟着不断变化软件可依赖性还包括一系列特性,包括可靠性、保密性、安全性。可靠的软件在系统失败的情况下,也不会导致人员伤亡和经济损失软件不需要浪费内存和处理器等系统资源,因而有效性应包括响应时间、处理时间、内存利用率等方面软件必须具备可用性。必须是用户不用特殊地努力就能操作。这就意味着,软件必须相应的用户界面和充分的说明文档表1-3优良软件必须具有的属性软件工程导论2024/1/359软件工程所面临的主要问题软件工程在21世纪面临以下三大挑战:多样性的挑战分布式、异构、遗留系统集成交付上的挑战不影响软件质量,缩短开发周期信任的挑战网络远程服务、支付软件工程导论2024/1/360职业和道德上的责任和其他工

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论