北京邮电大学软件工程1软件工程计算机学院李晖lihuill@bupt.edu.cn软件工程2软件工程课程软件工程是一门交叉学科软件开发技术:软件开发方法学软件开发过程软件工具和软件工程环境软件工程管理:软件管理学软件经济学软件心理学软件工程所包含的内容不是一成不变的,随着人们对软件系统的研制开发和生产的理解。应用发展的眼光看待它。软件工程3本课程的目标学会运用软件工程的概念、原理、技术和方法,以指导软件开发与维护,经济、高效地开发出满足用户需要的软件产品;培养软件设计师、系统分析员、项目管理人员;学会软件工程的原则和规范,把握软件开发的大局;软件工程4教学内容要点计划学时第1章软件工程基础(4学时)第3章软件需求分析(4学时)第4章软件设计基础(2学时)第5章软件体系结构设计(2学时)第6章人机交互界面设计(2学时)第7章构件级设计与实现(2学时)第8章面向对象的概念和记号(2学时)第9章面向对象的需求获取与需求分析(2学时)第10章面向对象设计(2学时)第11章软件测试(4学时)第12章软件维护(2学时)第2章软件项目管理(2学时)共计30学时课程内容及安排软件工程5教材及参考书教材:软件工程,叶俊民,清华大学出版社参考书实用软件工程,郑人杰等编,清华大学出版社软件工程-实践者的研究方法,RogerS.Pressman著,梅宏译Object-OrientedandClassicalSoftwareEngineering(面向对象与经典软件工程),Stephen,R.Schach著软件工程6考核方式(选修课)期末考试成绩占40%考试形式:开卷笔试期中考试成绩占40%考试形式:提交作业设计平时成绩占20%平时成绩=作业情况+出席情况北京邮电大学软件工程72009年春季第一章软件工程基础软件工程8内容提纲计算机系统工程软件工程软件生存期模型软件开发方法软件工程环境软件工程9软件与计算机的系统要素之间的关系软件需要计算机系统的支持输出输入硬件软件数据库网络过程人文档软件:程序、数据结构、逻辑方法、过程或控制的文档硬件:电子设备、外部设备数据库:大型信息的有组织的集合,通过软件存取文档:手册、表格过程:定义每一种系统元素的特定使用步骤,或系统驻留的过程性环境人:用户系统软件工程101.1计算机系统工程计算机系统工程:与构造基于计算机系统有关的过程、方法和技术。一种问题求解活动,目的是揭示与分析所期望的功能,并把这些功能分配到系统的各个独立系统元素中去。计算机系统工程师与用户充分合作,以确认用户的目标与约束。软件工程111.1.1硬件与硬件工程计算机系统工程师根据系统需求为硬件系统指派任务,产生硬件需求。硬件工程师根据硬件需求设计、制造或选择硬部件或设备。硬件工程过程分为三个阶段,即计划和定义阶段;设计和样机实现阶段;生产、销售和售后服务阶段。软件工程12硬件功能开发计划评审详细需求分析评审成本进度硬件规格说明(a)计划与定义阶段该阶段的任务是制订开发计划,确定项目成本预算和工程进度,并进行详细需求分析,确定硬件规格说明。软件工程13设计图纸设计图纸样机设计分析评审建立样机与测试评审生产分析(b)设计与样机实现阶段该阶段的任务是分析设计,画出设计图,必要时建造原型对样机进行测试,最后进行制造分析,画出生产图。软件工程14产品备件制造质量保证销售评审返工维护机构(c)制造、销售与售后服务阶段该阶段的任务是按照质量保证计划和要求生产硬件产品。通过未通过软件工程151.1.2软件与软件工程计算机软件:软件工程师设计和建造的产品。包括:可执行的程序+开发各阶段文档+各种数据。软件工程是研究软件生产和软件管理的工程科学。内容包括:市场调研、正式立项、需求分析、项目策划、概要设计、详细设计、编程、测试、试运行、产品发布、用户培训、产品复制、销售、实施、系统维护和版本升级等。软件工程模型一般包括:软件项目的定义阶段、软件开发阶段、软件的检验、交付与维护阶段。软件工程161.1.3人机工程关键是处理软件与人的交互问题。现在“人机界面友好”的要求,已成为基于计算机系统的一项重要技术指标。人机工程包括下列步骤:1.创建系统功能的外部模型2.确定为完成此系统功能,人和计算机分别完成的任务3.考虑界面设计中的典型问题4.借助CASE工具构造界面原型和最终实现设计模型5.从质量的角度对界面进行评估软件工程171.1.4数据库工程数据库系统是基于计算机系统的重要组成部分,它将有关的硬件、软件、数据和数据库管理人员结合起来,为用户提供信息服务。数据库系统的开发方法主要有:结构化生命周期开发方法、原型法、面向对象的开发方法等。软件工程18数据库工程的任务数据库工程应完成下列任务:1.确定系统的各项指标并进行评估和计划制定2.论证、选择和配置数据库系统3.数据库设计与实现4.数据库的管理与维护软件工程191.1.5网络工程网络工程是研究网络系统的规划、设计与管理的工程科学,要求工程技术人员根据既定的目标,严格依照行业规范,制定网络建设的方案,协助工程招投标、设计、实施、管理与维护等活动。软件工程20网络工程的任务网络工程应该完成以下任务:1.需求分析。2.总体设计分析,确定该网络的服务类型,进而确定系统建设的具体目标以及系统构件拓扑结构等。3.实施,即选择合适的设备,按设计方案实现网络建设。4.验收与维护。软件工程21系统分析的目标识别用户要求评价系统可行性进行经济分析和技术分析把功能分给硬件、软件、人、数据库和系统其它元素建立成本和进度限制生成系统规格说明,形成后续工程的基础软件工程22内容提纲计算机系统工程软件工程软件生存期模型软件开发方法软件工程环境软件工程231.2软件工程1.2.1软件1.软件定义(1)在运行中能提供所希望的功能和性能的指令集(即程序);(2)使程序能够正确运行的数据结构;(3)描述程序研制过程、方法所用的文档。软件工程24软件的分类按功能分按规模分按工作方式分按服务对象分按使用频率分按失效的影响分软件工程25按功能分系统软件特点:与硬件结合紧密、复杂进程管理,使计算机系统各个部件、软件和数据协调高效工作例:操作系统、数据库管理系统、设备驱动程序支撑软件特点:协助用户开发软件的工具性软件例:文本编辑程序,图像处理软件,软件界面开发程序等应用软件特点:为特定领域内开发,为特定目的服务例:各行业的办公自动化系统、计算机辅助教学软件、银行储蓄软件等软件工程26按规模分1类别参加人员数研制期限源程序行数微型11~4周0.5k小型11~6月1k~2k数值计算或数据处理,通常没有与其它程序的接口。需要按一定的标准化技术、正规的资料书写以及定期的系统审查。只是没有大题目那样严格。中型2~51~2年5k~50k软件人员之间、与用户之间的联系、协调的配合关系软件的质量。因而计划、资料书写以及技术审查需要比较严格地进行。应用程序和系统程序。系统的软件工程方法是完全必要的。软件工程27按规模分2•大型5~202~3年50k~100k•编译程序、小型分时系统、实时控制系统等。二级管理,若干小组,每组5人以下。人员调整往往不可避免,新手的培训。采用统一的标准,实行严格的审查是绝对必要的。•甚大型100~10004~5年1M(=1000k)•若干个子项目,每一个子项目都是一个大型软件。子项目之间具有复杂的接口。如远程通信系统、多任务系统、大型操作系统、大型数据库管理系统、军事指挥系统通常现有这样的规模。很显然,这类问题没有软件工程方法的支持,它的开发工作是不可想象的。•极大型2000~50005~10年1M~10M•军事指挥、弹道导弹防御系统。软件项目的规模越大,依赖软件工程技术的程度应该越高。软件工程28按工作方式分实时处理软件需要及时处理事件或数据,并控制需要监测和控制的过程的软件。分时软件允许多个联机用户同时使用计算机交互式软件能够实现人机通信的软件批处理软件把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理完软件工程29按服务对象的范围分项目软件:也称定制软件受委托,由一个或多个软件开发机构在合同的约束下开发例如:军用防空指挥系统、卫星控制系统产品软件软件开发机构开发出来直接提供给市场例如:Windows,word,杀毒软件等等软件工程30按使用频率分只用一次例如:人口普查、工业普查每年一次例如:年度统计软件每天多次例如:生产调度软件、各种信息查询系统、面向公众的业务系统等软件工程31按失效的影响分普通软件软件失效影响不大关键软件灾难性影响例如:如财务金融、交通通信、航空航天……软件工程322.软件的特点1.逻辑实体,非物理实体2.生产无明显制造过程,与硬件不同3.运行和使用期间,没有老化、磨损问题。软件维护比硬件复杂。软件工程33Late1950’s:Intheearlydays:“Software”=“Placeasequenceofinstructionstogethertogetthecomputertodosomethinguseful”.UserComputerComputerbecamecheaperandmorecommonHighlevellanguageswereinventedProgrammerUserComputereasier软件的发展软件工程34软件的发展阶段程序设计阶段:50-60年代程序系统阶段:60-70年代软件工程阶段:70年代以后1.1970’中~1980’s:微处理器的出现并广泛应用。分布式系统、嵌入智能。2.1980’s~:网络迅速普及,强大的桌面系统、面向对象技术、专家系统、人工智能、神经网络、并行计算、网格计算、虚拟组织。软件工程35软件工程36软件危机软件工程的定义软件工程的目标软件工程的基本原则软件工程研究的基本内容1.2.2软件工程的概念软件工程37软件危机软件总是超出预算,落后于进度表,而且不可靠,满足不了性能要求IBM360操作系统1963-1966年开发5000人-年最多时约1000人投入工作写了100万行代码结果是错误百出软件工程381.软件危机软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。典型表现:开发成本和进度的估计常常很不准确;用户对“已完成的”软件系统不满意;“闭门造车”;软件质量不可靠;软件常常是不可维护的;软件成本的比例逐年上升;软件产品“供不应求”;软件工程39软件危机引发的思考问题出在哪里?软件工程40软件危机的原因软件需求不充分开发无计划性开发过程无规范软件产品无评测手段软件工程412.如何摆脱软件危机?BettermanagementDifferentteamorganizationsBetterlanguages&toolsUniformcodingconventions必须意识到:“软件”编程,它有自己的生命周期(lifecycle)。大型软件系统的开发与其它工程项目如建造桥梁、制造飞机、轮船等的开发是同理的。“软件工程”(SoftwareEngineering)解决问题的想法:软件工程423.软件工程的定义1968年NATO计算机科学会议软件危机根源解决途径软件工程“概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。”软件工程43IEEE软件工程定义软件工程是(1)将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件。(2)在(1)中所述方法的研究。IEEE:美国电气和电子工程师学会(InstituteofElectrical