第五课感谢刘国勇老师提供资源信息与软件工程学院2工程能力概述软件工程知识体系软件工程系统能力信息与软件工程学院3科学、技术与工程系统与计算机系统软件与软件工程项目与软件项目信息与软件工程学院4科学指探知事物的本质、特征、内在规律以及与其他事物的联系,是关于自然、社会和思维的发展与变化规律的知识体系。或者说科学是建立在经验主义、实验以及方法论自然主义之上的各种知识技术指运用科学规律解决实现某一目的的手段和方法,泛指根据生产实践经验和科学原理而发展形成的各种工艺操作方法、技能和技巧工程指将自然科学原理应用到工农业等生产部门中而形成的各门学科的总称。如机械工程、水利工程、化学工程、系统工程、软件工程等信息与软件工程学院5工程是有原理的,是在一定的边界条件下的技术集成。工程不是技术和装备的简单堆砌和拼凑,工程在集成过程中有其自身的理论、原则和规律,是科学在面对实践时针对特定问题的技术化,是技术与应用实践结合的具体化工程项目是通过建造目标来完成的,具有其特殊的对象、明确的目标、要求等,这个目标通常是一个当前不存在的客观事物,工程项目要通过具体的设计、建造和建设等实施过程来建造这个新的客观存在。因此,工程是一个复杂的建构和运行过程,是通过合理的工序、工艺和工期来完成的工程实施要与环境协调一致,其实施和运行,都要对自然生态系统产生一定的影响,必须考虑到工程活动可能引起的环境问题,以人为本,努力使工程与环境、生态协调一致。科学的设计步骤和实施阶段、合理的资金投入,工程的成本、质量、效率是工程的生命所在工程设计是可优化,其包含多种技术、多个方案、多种途径可被选择,如何利用最小的投入获得最大的回报,取得良好的经济效益、环境效益和社会效益,就要求工程实现在一定边界条件下的综合集成和多目标优化信息与软件工程学院6科学、技术与工程系统与计算机系统软件与软件工程项目与软件项目信息与软件工程学院7系统:一些部件(要素)为了实现一个目标而有机组合的整体。系统可以是物理存在的具体系统,也可以是抽象的或社会的系统。其基本要素包括目标:一定的输入变成一定的输出,实现输入到输出的变换组成:两个以上具体的部件(要素)或抽象的方法等结构:部件间相互依存的关系,不同的结构形成不同的系统属性控制:为保证实现系统的目标,需要施加负反馈和一定的控制策略信息与软件工程学院8信息与软件工程学院9系统边界:系统范围系统输入输出接口:系统和外界交换物质、能量或信息等的界面系统负反馈:对系统输出量的测量,以便控制系统的状态,保证系统的稳定系统环境:系统存在的理由和约束信息与软件工程学院10计算机系统:适当地组织在一起的一系列系统元素的集合,这些系统元素互相配合、相互协作,通过对信息的处理而完成预先定义的目标计算机软件:程序、数据结构和相关文档的集合,用于实现所需要的逻辑方法、过程或控制计算机硬件:提供计算能力的电子设备和提供外部世界功能的电子机械设备人员:硬件和软件的用户和操作者数据库:通过软件访问的大型的、有组织的信息集合文档:描述系统使用方法的手册、表格、图形及其他描述性信息过程:一系列步骤,它们定义每个系统元素的特定使用方法或系统驻留的过程性语境信息与软件工程学院11科学、技术与工程系统与计算机系统软件与软件工程项目与软件项目信息与软件工程学院12软件:计算机系统中与硬件相互依存的另一部分,包括程序,数据及其相关文档的完整集合程序:按事先设计的功能和性能要求执行的指令序列数据:使程序能正常操纵信息的数据结构文档:与程序开发,维护和使用有关的图文材料信息与软件工程学院13软件工程定义指导计算机软件开发和维护的工程学科采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它IEEE(1993):软件工程是①把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是化工程应用于软件中;②研究①中提到的途径信息与软件工程学院14科学、技术与工程系统与计算机系统软件与软件工程项目与软件项目信息与软件工程学院15自从有了人类,人们就开展了各种有组织的活动。随着社会的发展,有组织的活动逐步分化为两种类型:一类是连续不断、周而复始的活动,人们称之为“运作”(Operations),如企业日常的生产活动另一类是临时性、一次性的活动,人们称之为“项目”(Projects),如企业的技术改造活动、一项环保工程的实施信息与软件工程学院16在现代社会中“项目”是很普遍各类开发项目各种建设工程项目各种科研项目各种环保和规划项目各种社会项目各种投资项目各种国防项目从上述可见,项目已渗入到社会的经济、文化、军事的各个领域,社会的每一层次和每一角落信息与软件工程学院17上课野餐活动集体婚礼社区保安开发操作系统每天的卫生保洁神州飞船计划日常运作项目信息与软件工程学院18项目是一个组织为实现自己既定的目标,在一定的时间、人员和资源约束条件下,所开展的一种具有一定独特性的一次性工作明确界定的工作范围预定的资源一次性工作临时组织明确具体的目标团队合作开始日期结束日期项目信息与软件工程学院19目的性:任何一个项目都是为实现特定的目标服务独特性:项目的产品或服务都具有一定的独特之处一次性:每一个项目都有自己明确的时间起点和终点,都是有始有终的,而不是不断重复、周而复始制约性:每个项目都在一定程度上受客观条件的制约。最主要的制约是资源制约风险性:由项目各种条件和环境发展变化的不确定性所造成的项目后果损失或收益的可能性过程性:项目是由一系列的项目阶段、项目工作或项目活动所构成的一个完整过程其它特性:包括项目的创新性、项目后果的不可挽回性和项目组织的临时性与开放性等信息与软件工程学院20项目的三项约束:每个项目都会在不同程度上受到范围目标、时间目标和成本目标的约束,这些有时被称为项目的三项约束。这三个目标经常存在冲突,良好的项目是达到三者的平衡范围:项目要努力实现的是什么?客户或发起人要通过项目获得什么样的产品或服务?时间:完成项目需要多长时间?项目进度是怎样安排的?成本:完成项目需要花费多少成本?如何做好进度和费用的综合控制?信息与软件工程学院21工程项目是当今社会最为普遍,也是最为重要的项目类型。它存在于社会的各个领域、各个地方,在社会生活和经济发展中起着重要作用工程项目是以一个工程技术系统的建设和(或)运行为任务的过程工程项目的根本目的,是通过工程的建设和运行为社会提供合格的产品或服务信息与软件工程学院22软件项目:以软件服务为主体的项目软件项目目标用有限的时间、有限的资源为特定用户提供满足其需求的软件服务,并获取对应价值信息与软件工程学院23软件项目的三大构成项目流程项目的方向和进程项目团队项目的实施者项目制度项目实施的准绳信息与软件工程学院24软件项目内容进行项目的开发和交付程序文档和代码保障项目的正常运行硬件集成、数据转换提供项目支持和服务用户培训、技术支持信息与软件工程学院25工程类项目(重点)目标:交付工程用户:指定用户(如某家企业)产品类项目目标:交付产品用户:行业客户服务类项目目标:为用户提供特定的服务(如售后维护)用户:指定用户信息与软件工程学院26工程能力概述软件工程知识体系软件工程系统能力信息与软件工程学院27SWEBOK:软件工程知识体系SEEK:软件工程教育知识体系信息与软件工程学院281970年代末期,美国制定研究生教育计划时采纳了IEEE-CS提出的制定软件工程教程的建议。1980年代末和1990年代初,软件工程教育得到卡内基-梅隆大学软件工程研究所(SEI)的培育和支持。SEI发起和资助的第一届软件工程教育和培训会议(CSEET)1987年召开。大会为软件工程教育者提供一个论坛,提出和讨论软件工程教育观点、方法和活动。1995年,SEI建立关于软件工程教育和培训的一个工作组(WGSEET),目的是共同研究问题、提出解决方法,与软件工程教育和培训组织共享信息和最佳实践方法。1999年,工作组提出一个技术报告,为设计和实现本科软件工程教育计划提供指导。信息与软件工程学院291993年,IEEE-CS和ACM为把软件工程建设成为一个专业,建立了IEEE-CS/ACM联合指导委员会。随后,该指导委员会被软件工程协调委员会(SWECC)替代。开发了软件工程知识体(SWEBOK)。其中,SWEBOK全面描述了软件工程实践所需的知识,为开发本科软件工程教育计划打下了基础。2004年8月,全世界500多位来自大学、科研机构和企业界的专家、教授经过多年的努力,推出了软件工程知识体、软件工程教育知识体(SEEK)两个文件的最终版本。信息与软件工程学院30SWEBOK(软件工程知识体):IEEE计算机学会职业实践委员会主持的一个项目。SWEBOK是IEEE的官方服务标记。信息与软件工程学院31草人阶段(~1997年5月)产生软件工程本体知识指南的雏型,主要是为该指南确定恰当的组织结构。石人阶段(~2001年4月18日),草稿完成、进入试用阶段,SWEBOK0.95版的发布标志着该阶段结束。铁人阶段(~2004年),从正式版本——1.0版开始到现在,包括最新的2004版本信息与软件工程学院32促进世界范围内对软件工程的一致观点阐明软件工程相对其它学科(如计算机科学、项目管理、计算机工程和数学等)的位置,并确立它们的分界刻画软件工程学科的内容提供使用知识体系的主题为开发课程和个人认证与许可材料,提供一个基础信息与软件工程学院33SWEBOK的知识领域(1)软件需求SoftwareRequirements(2)软件设计SoftwareDesign(3)软件构造SoftwareConstruction(4)软件测试SoftwareTesting(6)软件配置管理ConfigurationManagement(5)软件维护SoftwareMaintenance(7)软件工程管理SoftwareEngineeringManagement(9)软件工程工具和方法SoftwareEngineeringToolandMethod(8)软件工程过程SoftwareEngineeringProcess(10)软件质量SoftwareQuality信息与软件工程学院34(1)软件需求SoftwareRequirements(2)软件设计SoftwareDesign(3)软件构造SoftwareConstruction需求是真实世界问题而必须展示的特性。软件需求基础需求过程需求获取需求分析需求规格说明需求确认实践考虑软件设计基础软件设计关键问题软件结构与体系结构软件设计质量的分析与评价软件设计符号软件设计的策略与方法定义一个系统或组件的体系结构、组件、接口和其他特征的过程。指通过编码、验证、单元测试、集成测试和排错的组合,具体创建一个可以工作的、有意义的软件。软件构造基础管理构造实际考虑信息与软件工程学院35(4)软件测试SoftwareTesting(6)软件配置管理ConfigurationManagement(5)软件维护SoftwareMaintenance软件测试基础与测试相关的度量软件维护基础软件维护的关键问题在有限测试用例集合上,根据期望的行为,对程序进行的动态验证。测试级别测试过程测试技术在软件运行过程中,对可能出现的异常,运行环境的改变,作出处理,以保证软件正常运行。维护过程维护技术为了系统地控制配置的变更和维护在整个系统生命周期中的完整性和可追踪性,而标志软件在时间上不同点的配置的学科。软件配置管理过程的管理软件配置项软件配置控制软件配置状态统计软件配置审计软件发布管理和交付。信息与软件工程学院36(7)软件工程管理Soft