《软件工程基础》主讲:刘晓胜教授2第1章软件工程概述1.0引言1.1软件工程与软件危机1.2软件工程1.3软件生命周期1.4软件过程1.5软件质量的评价31.0引言(1)什么是软件?硬件?固件?(2)你学过某种语言计算机程序设计,考过程序员吗?(3)知道具体写程序代码是有什么要求吗?(4)你知道软件国家标准吗?(5)你知道什么叫软件产品吗?(6)软件等同于程序吗?(7)你知道软件产品是如何开发的吗?41.0引言(8)你知道如何与他人合作完成产品开发吗?(9)知道如何组织和分配软件产品开发任务吗?(10)知道软件文档管理吗?软件还需要维护吗?(11)分析员与程序员是一码事吗?(12)面向过程的软件开发与面向对象的软件开发区别?你知道还有面向可靠性/维护性的软件开发吗?……5“软件工程”课程与其它软件专业课区别(1)立足于系统的整体。(2)讲授系统分析、系统设计、系统测试及系统维护的理论和方法。(3)构筑一个软件系统,实践软件开发全过程。1.0引言61.0引言本课程要解决对问题(教学目标):(1)软件开发的一般步骤、方法和过程;(2)如何编写出合格的程序代码和合格的软件技术文档(举例:发生火灾时要抢出的东西是软件设计文档!而不是计算机);(3)理解、学会软件项目的划分和实现方法,以及自己在软件开发中的位置(要有team精神)。(4)软件工程的思想决不仅仅局限于软件开发过程!硬件开发(FPGA,SOC)、固件开发、系统开发等等。71.0引言本课程要解决对问题(培养目标):转变对软件的认识:程序》》》上升》》》系统转变思维定式:程序员》》》上升》》》系统工程师(系统分析员)81.0引言学好本课程的关键:动脑:动脑分析实际问题!动手:动手撰写文档、编写程序!91.0引言本课程的主要内容:软件工程概述¾软件危机,软件工程,软件生命周期,软件过程等。可行性研究¾可行性研究任务,可行性研究过程,数据流图,数据字典等。需求分析¾需求分析的任务,沟通方法,分析建模,实体-联系图,数据规范化,状态转换图等。总体设计¾设计过程,设计原理,启发规则,图形工具,设计方法等。101.0引言详细设计编码与测试¾编码方法,软件测试基础,单元测试,集成测试,确认测试,白盒测试,黑盒测试等。UML基础(面向对象的软件工程技术)¾UML简介,用例建模,结构建模,行为建模等。总计:32学时/口授111.0引言其他教学环节安排:按照软件工程要求,完成软件产品开发个阶段报告,既是作业,也是重要的辅助教学环节。主要参考书:1软件工程技术导论,张海藩,清华大学出版社(第4版)2UML及建模,郭宁,清华大学出版社,2007.1考试:笔试。121.1软件工程与软件危机软件的概念、特点和分类:实例讲评1131.1软件工程与软件危机软件的概念、特点和分类:实例讲评2141.1软件工程与软件危机软件的概念、特点和分类:实例讲评2151.1软件工程与软件危机软件的概念、特点和分类软件的概念:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。¾程序是按事先设计的功能和性能要求编写的指令序列;程序是完成指定功能的一段特定语言代码。C,C++,VisualC++,Delphi,ASM,Matlab,Foxpro,PL/M….¾数据是使程序能正常操纵信息的数据结构;¾文档是与程序开发、维护和使用有关的图文材料。161.1软件工程与软件危机“软件”的定义为:计算机程序、方法、规则、相关的文档资料以及在计事机上运行时所必需的数据。软件的特点¾软件是一种逻辑实体。¾软件的开发,是人的智力的高度发挥,而不是传统意义上的硬件制造。¾软件维护与硬件的维修有着本质的差别。171.1软件工程与软件危机软件的特点¾软件的开发至今尚未完全摆脱手工艺的开发方式,使软件的开发效率受到很大限制。¾软件的开发是一个复杂的过程。¾软件的成本非常高昂。181.1软件工程与软件危机软件的分类基于软件功能的划分系统软件:Windows/UNIX/Linux...应用软件:串口调试助手/MIS系统/…支撑软件:VisualC++/Matlab/Delphi/…191.1软件工程与软件危机软件的分类基于软件工作方式的划分实时处理软件:各种实时在线监控系统分时软件:各种定时软件/操作系统/…交互式软件:大部分软件都是交互式软件批处理软件:特定软件。201.1软件工程与软件危机软件工程的背景和历史1968年由NATO(北大西洋公约组织)在德国Garmish召开的学术会议上,FeitzBauer首先提出了“软件工程”概念。软件工程与编写程序(编程)前者是一门学科,一种科学理论来指导软件系统开发的标准化、自动化的过程。后者是单纯的代码编写。211.1软件工程与软件危机前者考虑如何分解一个系统,以便各人分工开发;考虑如何说明每个部分的规格要求;怎样才能易于维护。后者是软件工程发展的前身。后者是软件工程中占据很少时间和空间的一部分。特别提示:南辕北辙!Ò容易关注编程,忽略软件工程的作用!Ò更容易关注技能,忽略理论指导!221.1软件工程与软件危机计算机学科的发展计算机科学(CS)计算机科学(CS)计算机工程(CE)软件工程(SE)信息系统(IS)计算学科(computingdiscipline)231.1软件工程与软件危机计算机系统的发展历程第一代(20世纪60年代中期以前):程序设计阶段。第二代(从20世纪60年代中期到70年代中期):程序系统阶段——“软件工程”学科诞生。第三代(从20世纪70年代中期到80年代中期):软件工程阶段。241.1软件工程与软件危机第四代(从20世纪80年代中期至今):软件产业在世界经济中已经占有举足轻重的地位。60年代以来工厂管理病人监护工资统发图书馆管理机票预定….251.1软件工程与软件危机软件发展早期(1960)¾面向批处理¾有限的分布¾自定义软件第二阶段(1960-1975)¾多用户¾实时¾数据库¾软件产品简单的设计和实时控制较复杂的设计、实时控制和集中管理261.1软件工程与软件危机第三阶段(1975-1988)¾分布式系统¾嵌入“智能”¾低成本硬件¾消费者的影响第四阶段(1988-)¾强大的桌面系统¾面向对象技术¾专家系统¾人工神经网络¾并行计算¾网络计算机超大规模的设计、超高速实时控制和海量存储与运算等复杂设计和在线实时控制271.1软件工程与软件危机软件工程为什么发展如此之快:不准确的时间和金钱的估算;软件质量的低下;相对硬件产品开发软件开发费用的增加;维护、增强软件系统的必要性;硬件价格大幅度下降。根本原因在于需求!软件危机的存在!281.1软件工程与软件危机软件危机概念软件开发和维护中存在的一系列严重问题,称“软件危机”。1968年,北大西洋公约组织的计算机科学家在德国召开的国际会议上,为解决“软件危机”问题,提出了“软件工程”的概念。291.1软件工程与软件危机软件危机表现[1]成本和进度难掌握;[2]对用户需求了解模糊,用户对软件不满意:“闭门造车”;[3]质量不可靠:可靠性和质量保证/审查、复审和测试;[4]不可维护:“可重用软件”;301.1软件工程与软件危机[5]没有文档:对管理者、开发者、维护者都是至关重要的;[6]软件成本逐年上升;[7]跟不上硬件发展。实例讲评3:软件没有适当的文档资料导致软件废弃:石英摆片测试软件。311.1软件工程与软件危机实例讲评4:软件维护性实例:Microsoftword发展历程;¾Microsoftword5.0Microsoftword6.0¾Microsoftword7.0Microsoftword95¾Microsoftword97Microsoftword2000¾Microsoftword2003…实例讲评5:硬盘刻录机软件:软件bugs无法出来。321.1软件工程与软件危机软件危机原因(1)与软件特点有关:管理和控制软件开发过程相当困难!(2)开发和维护方法不正确:¾个体化特点¾忽视需求分析¾忽视评审¾忽视测试¾忽视维护等331.1软件工程与软件危机软件危机面临的问题:进展难衡量;质量难评估;管理难控制。如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件;规模、复杂性、生产率。341.1软件工程与软件危机Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人实例讲评6:Windows95有1000万行代码Windows2000有5000万行代码Exchange2000和Windows2000开发人员结构351.1软件工程与软件危机软件危机的主要特征软件开发周期大大超过规定日期;软件开发成本严重超标;软件质量难于保证。解决途径:技术措施(方法和工具)+管理措施=软件工程支撑环境;361.1软件工程与软件危机软件成本代价变化规律371.2软件工程软件工程的定义软件工程是指研究软件生产的一门学科,也就是将完善的工程原理应用于经济地生产既可靠又能在实际机器上有效运行的软件。1983年美国《IEEE软件工程标准术语》【IEEE83】对软件工程下的定义为:软件工程是开发、运行、维护和修复软件的系统方法。381.2软件工程IEEE【IEE93】给出了一个更加综合的定义:“将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。”FritzBauer在NATO会议上给出的定义:“软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的健全的工程原理(方法)。”软件工程强调的是过程!391.2软件工程软件工程的本质特性(1)软件工程关注于大型程序的构造;(2)软件工程的中心课题是控制复杂性;(3)软件经常变化;(4)开发软件的效率非常重要;(5)和谐地合作是开发软件的关键;(6)软件必须有效地支持它的用户(7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。401.2软件工程软件工程的基本原理B.W.boehm七条基本原理:¾用分阶段的生命周期计划严格管理;¾坚持进行阶段评审;¾实行严格的产品控制;¾采用现代程序设计技术;¾结果应能够清楚地审查;¾开发小组的人员应少而精;¾承认不断改进软件工程实践的必要性;411.2软件工程软件工程方法学通常把在软件生命周期全过程中使用的一整套技术的集合,称为软件工程方法学(methodology),也称范型(paradigm)。软件工程方法学包括三个要素:方法、工具和过程。421.2软件工程软件工程方法是完成软件开发的各项任务的技术方法,为软件开发提供了“如何做”的技术。¾可行性分析、需求分析、评审与复审、…软件工程工具为软件工程方法提供了自动的或半自动的软件支撑环境。¾广义的工具¾系统流程图、数据流图、数据字典、…¾PAD图、判断树、判断表、测试用例、…431.2软件工程软件工程过程则是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。软件工程三个要素关系:方法、工具、过程传统方法学和面向对象方法学是目前使用得昀广泛的两种软件工程方法学。441.2软件工程传统方法学:¾生命周期方法学或结构化范型¾采用结构化技术:结构化分析、设计和实现¾全过程划分与技术审查和管理复审面向对象方法学¾没有既面向数据又面向行为的结构化技术¾面向对象方法学把数据和行为紧密结合起来¾4要点:对象、类、继承、消息451.2软件工程工具方法过程质量焦点SoftwareEngineeringLayers软件工程三个要素:方法、工具、过程461.2软件工程项目概要计划里程碑计划项目控制计划产品控制计划验证计划运行维护计划特别提示