1软件工程SoftwareEngineering主讲:wangzhenE-mail:wz@njutcm.edu.cn电话:867981132《软件工程》软件业是决定21世纪国际竞争地位的战略性产业,是信息时代的朝阳产业。1.软件产业是信息产业的核心,是国际竞争的焦点和战略制高点。2.软件关系到国家政治、经济和社会的安全及民族文化的发扬光大。3.发展软件产业对优化我国产业结构、提高经济运行质量具有极其重要的作用。4.软件是国民经济建设中诸多关键技术的基础。3《软件工程》近二十年来计算机软件已经成为现代科学研究和解决工程问题的基础,以及管理部门、生产部门、服务行业中的关键因素,渗透到了各个领域,成为当今世界不可缺少的一部分。展望二十一世纪,软件仍将成为驱动任何事情,从基础教育到遗传工程取得新进展的动力。学习研究工程化的软件开发方法,使开发过程更加规范,是我们学习的目标和动力。4软件工程软件工程导论(第四版)张海藩清华大学出版社(2003)教材5软件工程实用软件工程(第二版)郑人杰殷人昆陶永雷清华大学出版社(1996)软件工程-实践者的研究方法(英译版第五版)RogerS.Pressman机械工业出版社参考书目6软件工程课程评分方法大作业30%+期末考试70%=总评100%其它作业仅供参考。可通过e-mail递交考勤仅供参考,若抽查3次缺勤,总成绩不及格7《学生管理系统》StudentMis《学生管理系统》针对的用户是学校学生管理部门。相应的需求有:能够存储一定数量的学生信息,并方便有效的进行相应的学生数据操作和管理,主要包括:大作业8学籍管理学生基本信息的导入、录入、删除及修改。学生辅助信息(综合测评、奖励、处分等)的录入、删除及修改。学生贷款管理(录入、删除及修改。查询)学生保险管理(录入、删除及修改。查询)学生就业管理(录入、删除及修改。查询)学生勤工助学管理(录入、删除及修改。查询)学生各种信息的多关键字检索查询。9能够对需要的统计结果提供打印输出。能够提供一定的安全机制,提供数据信息授权访问,防止随意删改,同时提供信息备份的服务。可选题目:-商业管理系统的分析、设计与实现-教务管理系统的分析、设计与实现-订票管理系统的分析、设计与实现可以自选题目,但需要教师认可10应提交的文档软件需求规格说明书软件设计规格说明书用户安装及使用手册系统测试计划演示程序其它11软件工程目的体验软件工程各阶段的主要工作,特别注意吸取教训;学会与他人合作,培养团队精神,单干户将得不到成绩。分组:班长组织每组6-8人,选一个组长。组长负责:组织、分工、安排进度、作业提交等。作业提交:每组一个,但必须注明分工.12§0.软件概论什么是软件软件的分类软件的发展§1.软件危机软件危机的表现软件危机的原因§2.软件工程软件工程软件工程的目的和要求第一章软件工程学概述13软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料§0.软件概论14软件的特点软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性软件的生产与硬件不同,在它的开发过程中没有明显的制造过程在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题§0.软件概论15§0.软件概论16软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性软件的开发至今尚未完全摆脱手工艺的开发方式软件本身是复杂的实际问题的复杂性程序逻辑结构的复杂性软件成本相当昂贵相当多的软件工作涉及到社会因素§0.软件概论17§0.软件概论18软件的分类按软件的功能进行划分:系统软件使计算机系统各个部件、相关软件和数据协调、高效地工作的软件§0.软件概论•操作系统•数据库管理系统•设备驱动程序•通信处理程序等19支撑软件协助用户开发软件的工具软件§0.软件概论•文本编辑程序•文件格式化程序•磁盘向磁带进行数据传输的程序•程序库系统•支持需求分析、设计、实现、测试和支持管理的软件20应用软件§0.软件概论•商业数据处理软件•工程与科学计算软件•计算机辅助设计/制造软件•系统仿真软件•智能产品嵌入软件•医疗、制药软件•事务管理、办公自动化软件•计算机辅助教学软件21按软件规模进行划分:类别参加人员数研制期限源程序行数微型11~4周0.5k§0.软件概论小型11~6月1k~2k数值计算或数据处理.通常没有与其它程序的接口。需要按一定的标准化技术、正规的资料书写以及定期的系统审查。只是没有大题目那样严格。中型2~51~2年5k~50k应用程序和系统程序。软件人员之间、与用户之间的联系、协调的配合关系。因而计划、资料书写以及技术审查需要比较严格地进行。系统的软件工程方法是完全必要的。22大型5~202~3年50k~100k编译程序、小型分时系统、实时控制系统等。二级管理,若干小组,每组5人以下。人员调整往往不可避免,新手的培训。采用统一的标准,实行严格的审查是绝对必要的。§0.软件概论甚大型100~10004~5年1M(=1024k)若干个子项目,每一个子项目都是一个大型软件。子项目之间具有复杂的接口。如远程通信系统、多任务系统、大型操作系统、大型数据库管理系统、军事指挥系统通常现有这样的规模。很显然,这类问题没有软件工程方法的支持,它的开发工作是不可想象的。。极大型2000~50005~10年1M~10M军事指挥、弹道导弹防御系统。只是对软件工程技术依赖的程度不同而已。23§1.软件危机(SoftwareCrisis)在60年代中期以前:个体化软件开发方法.用户程序员(编写者=使用者),无文档资料在60年代中期-70年代中期:软件作坊,产品软件.个体化软件开发方法.软件危机:在计算机软件开发、维护过程中所遇到的一系列严重问题。24§1.软件危机例:美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。......据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。......•在程序运行时发现的错误,必须设法改正•用户有新的需求,必须相应地修改程序•硬件或OS的更新,通常需要相应地修改程序25§1.软件危机这个项目的负责人F.D.Brooks事后总结了他在组织开发过程中的沉痛教训时说:“......正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。......程序设计工作正像这样一个泥潭,......一批批程序员被迫在泥潭中拼命挣扎,......谁也没有料到问题竟会陷入这样的困境......”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。SoftwareCrisis!26§1.软件危机⑴项目没有被很好地理解;计划不周,最终导致进度拖延、成本超支。软件危机的表现:计划很难制定致使经费预算常常突破:由于缺乏软件开发的经验,主观盲目地制定计划,执行起来和实际情况有很大差距;对于工作量估计不准确,进度计划无法遵循,开发工作完成的期限一拖再拖。已经拖延了的项目,为了加快进度而增加人力,反而更加延误了时间。项目没有被很好地理解:“闭门造车”。需求在开发的初期阶段提得不够明确,或是未能得到确切的表达。软件人员和用户又未能及时交换意见,使得一些问题不能及时解决,造成开发后期矛盾的集中暴露。然而这时问题既难于分析,也难于挽回。27§1.软件危机⑵没有充分的文档资料(documentation)“软件”程序,人与人的交流比写程序困难得多。⑶软件可靠性(reliability)缺少度量的标准,质量无法保证。如何保证软件产品的质量,是非常复杂困难的问题。特别对于规模庞大的软件,如:航天.28§1.软件危机⑷软件难以维护(maintainability)不易升级(evolvability)开发过程没有统一的、公认的方法论和规范指导,加之不重视文字资料工作,资料很不完整;忽视每个人与其他人的接口部分,发现了问题修修补补,这样的软件很难维护。(5)未能充分做好检测工作(test)在运行中暴露出大量的问题,轻者影响系统的正常工作,重者发生事故,甚至造成生命财产的重大损失。29软件危机产生的原因:(1)软件自身的特点(2)在开发和维护过程中,采用了错误的方法和技术早期的个体化开发特点急于求成,仓促上阵我们认为的问题=用户要解决的问题?认为软件=编程、运行;轻视软件维护编程工作量10-20%软件维护工作量55-70%没有软件生命周期概念§1.软件危机30高中低早中后变化出现的时期代价软件开发过程中,引入同一变动付出的代价随时间变化趋势§1.软件危机31改正一个问题需付出的代价需求分析结构设计详细设计编码集成测试系统测试现场改正一个问题的估计费用改正一个问题估计的工作量20200200010005.02.50.050.5(美元)(人天)32对软件的常见误解用户的误解开发人员的误解管理者的误解§1.软件危机33误解先对软件需求做一般的说明,以后再逐步明确就可以了.需求本身就是不断变化的,软件容易改变可以很快调整适应这种变化.现实软件需求不明确是造成软件开发费用增加和延时交货的主要原因.软件开发费用随着开发阶段的后移而大大增加.1x1.5-6x60-100x软件开发费用设计阶段开发阶段维护阶段用户的误解§1.软件危机34开发人员的误解误解一旦程序开发完毕工作正常,我的任务就完成了在程序工作之前,无法顾及软件的质量问题.对于一个成功的项目来说,唯一能够提供的就是可以工作的程序.现实一个软件的50%-70%的工作量耗在软件交付使用以后.对于某些错误软件审查比软件测试更加有效.一个完整的软件要包括程序、各种文件和各种数据.§1.软件危机35管理者的误解误解书上已经有各种软件开发的标准,拿来用就是了.已经有足够的软件开发工具可供使用.一旦项目的程序员不够可以随时增加.现实书上是有各种软件开发的标准,但不是过时就是不适用.软件工具不是一拿来就能用的.“项目后期增加程序员会使项目的完成更加推后.--Brooks§1.软件危机36按工程化的原则和方法组织软件开发是软件开发的一个主要出路。50年代到60年代时,程序设计曾经被看做是一种任人发挥创造才能的技术领域。写出的程序通篇充满了程序技巧,这些程序很难被别人看懂。然而随着计算机的广泛使用,人们逐渐抛弃了这种观点。对于稍大的、并需要较长时间为许多人使用的程序,人们要求这些程序容易看懂、容易使用,并且容易修改和扩充。多个软件人员分工合作、共同完成;只有在项目的总体要求和技术规范的约束下充分发挥和施展。解决问题的出路§1.软件危机37§1.软件危机BettermanagementDifferentteamorganizationsBetterlanguages&toolsUniformcodingconventions技术+管理必须意识到:“软件”编程,它有自己的生命周期(lifecycle)。大型软件系统的开发与其它工程项目如建造桥梁、制造飞机、轮船等的开发是同理的。“软件工程”(SoftwareEngineering)NATOConference,Garmisch,Germany,1968.解决问题的想法:381.软件工程的定义Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料IEEE:软件工程是开发、运行、维护和修复软件的系统方法FritzBauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法经典定义(P5)§2.软件工程(SoftwareEngineering)39软