软件工程:理论、技术及实践 课件 第1-3章 软件工程概述、软件工程发展、软件过程_第1页
软件工程:理论、技术及实践 课件 第1-3章 软件工程概述、软件工程发展、软件过程_第2页
软件工程:理论、技术及实践 课件 第1-3章 软件工程概述、软件工程发展、软件过程_第3页
软件工程:理论、技术及实践 课件 第1-3章 软件工程概述、软件工程发展、软件过程_第4页
软件工程:理论、技术及实践 课件 第1-3章 软件工程概述、软件工程发展、软件过程_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

软件工程

SoftwareEngineering共享“小黄Y”缺少专人维护车子使用的情况变差可正常使用自行车数量减少。校区间分布不均衡没有经费可以用于校区间自行车搬运捐赠车子来源,设定唯一编号定期检查,统计加锁,开展免费租用服务,允许走出校门。限制借还服务、异地还车网络版,校园地图

指示服务。校网服务移动端两年后,经费所剩无几,原开发、管理的同学退出协会。同学有意见共享单车普及,购置单车同学逐渐变少,“小黄Y”服务是否需要继续坚持下去?谁来支付自行车维修的费用?谁来维护这个功能愈见增多的代码呢?这个学生社团组织维护的代码可以称之为软件吗?可以称这样的开发和维护工作为一个软件工程项目吗?它与现在城市共享单车系统会有哪些差别呢?共享“小黄Y”课程教学目标1.掌握软件工程和软件开发模型的基本概念,并了解软件开发相关技术标准。2.掌握软件需求分析、设计概念和一般性过程,能够运用这些知识对复杂软件系统进行需求分析、模块划分和详细设计。3.掌握面向对象的软件项目开发特点以及项目管理方法,增强编程实践、软件测试与维护。4.掌握UML建模技术,能够在软件工程过程中使用常用建模工具对复杂软件系统进行需求分析和设计。5.掌握软件工程需求、分析、设计等相关文档的编写。6.掌握软件过程的管理和质量控制,以及软件项目的计划、可行性分析和成本周期估算等知识。

第1章理解软件工程软件的发展1软件的特性和分类2软件工程的起源3软件团队5软件质量467软件工程的领域知识软件工程师的职业道德1.1软件的发展思考5个问题:我们用的是什么类型的计算?我们需要保存什么类型的信息或数据?对于需要长期保留的信息,哪些存储方法最合适?面对复杂的选项或决策,哪些分析方法对我们有帮助?在进行数据与知识的交流时,有哪些最佳方法?提示:纵览计算机和软件逐步用于解决这些问题的过程,从大历史观的角度来考虑这5个问题。软件发展史?(课后阅读《软件工程通史》,在阅读基础上要求总结近20年世界软件发展,以及中国软件发展)。软件的特性和分类无形性:逻辑实体,没有物理形态,通过运行表示智能性:凝聚大量人类脑力劳动抽象性:逻辑实体的抽象性,开发的抽象性系统性:有机整体复杂性:服务于各种行业可复制性:拷贝演化性:环境、需求和技术变化1.21.2.1软件的特性软件特性和分类系统软件应用软件支撑软件可复用软件1.21.2.2软件的分类按照软件的作用分类软件特性和分类商业软件公共软件共享软件自由软件1.21.2.2软件的分类按照版权保护标准分类1.3软件工程的起源1.3.1软件危机通常,把计算机软件开发和维护过程中所遇到的一系列严重问题称为“软件危机”。如今软件开发技术已经有了很大的进步,但是随着软件规模的不断扩大,软件需要解决的问题越来越复杂,“软件危机”依旧存在。考虑到“软件危机”的周期长且难以预测,一些人将“软件危机”称为“软件萧条”。1.3软件工程的起源开发者与用户沟通存在障碍随着软件规模逐渐增加,相应的软件复杂性也呈指数型升高缺乏有效的经验和数据积累以及估算工具来制定有效的计划项目内部缺乏管理经验软件危机的典型表现1.3软件工程的起源软件产品的质量低下软件通常没有文档资料,或者文档资料不够完备软件危机的典型表现1.3软件工程的起源1968年在第一届NATO会议上曾经给出了软件工程的一个早期定义:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”1990年IEEE进一步给出了一个更全面更具体的定义:“软件工程是:①应用系统化的、规范的、可量化的方法,来开发、运行和维护软件,即将工程化方法应用于软件;②对①中各种方法的研究。1.3.2软件工程的定义1.3软件工程的起源软件工程是指导计算机软件开发和维护的工程性学科。以计算机科学理论和其他相关学科的理论为指导,采用工程化的概念、原理、技术和方法进行软件的开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以较少的代价获得高质量的软件并有效地维护它,这就是软件工程。1.3软件工程的起源软件过程是指生产软件产品的一组活动、动作、任务的集合。活动主要是实现较为宽泛的目标,动作包含了主要工作制品生产过程中的一系列任务,任务则关注小而明确的目标,能够产生实际的制品。图1-2概念性软件开发框架1.3.3软件过程软件质量软件质量是“反映软件满足明确和隐含的需求的能力的特性总和”。具体来说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标以及所有专业开发的软件都应具有的和隐含特征相一致的程度。为了解软件质量是否满足要求,必须从软件质量属性出发,通过考察软件质量属性来评价软件质量,并依此给出提高软件质量的方法。1.4软件质量正确性健壮性可靠性性能易用性可理解性安全性可扩展性兼容性可移植性

软件质量常见的属性1.41.5

软件团队如何从一个程序演化为一个有用的产品图1-3编程系统产品的演进软件开发小组的组织结构取决于组织的管理风格、组里的人员数目及他们的技术水平和软件项目需要解决问题的难易程度。Mantei提出了在确定采用何种软件工程小组结构时应该考虑的与项目相关的7个问题。①项目待解决问题的困难程度。②项目要产生的程序的规模,以代码行或者功能点来衡量。③小组成员需要一起工作的时间(小组生命期)。④需要解决的问题能够被模块化的程度。⑤待建造系统所要求的质量和可靠性。⑥交付日期的严格程度。⑦项目所需要的社交性(通信)的程度。1.5

软件团队1.5

软件团队从历史角度看:(1)民主小组(2)主程序员小组(3)现代程序员小组(4)同步—稳定小组(5)敏捷过程小组(6)开源编程小组图1-4主程序员小组组织结构图1-5现代程序员小组组织结构1.6

软件工程的知识领域1993年,IEEE计算机协会和ACM联合建立的软件工程协同委员会、加拿大魁北克大学以及美国MITRE公司共同承担了ISO/ICE/JTCI“SWEBOK(SoftwareEngineeringBodyofKnowledge)指南”项目。该项目希望促进世界范围内对软件工程形成一致观点;阐明软件工程相对于其他学科(如计算机科学、项目管理、计算机工程和数学等)的位置,并确立它们的分界;刻画软件工程学科的内容;提供使用知识体系的主题;为开发课程和个人认证与许可材料提供基础。1.6

软件工程的知识领域2014年IEEE公布的SWEBOK3.0中提到了软件工程的15个知识领域(KnowledgeArea,KA),其中包括:11个软件工程实践知识域——软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程模型和方法、软件质量、软件工程职业实践;4个软件工程教育基础知识域——软件工程经济学、计算基础、数学基础和工程基础。1.7

软件工程师职业道德软件工程师应履行其实践承诺,使软件的需求分析、规格说明、设计、开发、测试和维护成为一项有益和受人尊敬的职业。(1)公众——软件工程师应当始终如一地以符合公众利益为目标。(2)客户和雇主——在保持与公众利益一致的原则下,软件工程师应满足客户和雇主的最高利益。(3)产品——软件工程师应当确保他们的产品和相关的改进符合可能达到的最高专业标准。(4)判断——软件工程师在进行相关的专业判断时,应该坚持正直、诚实和独立的原则。(5)管理——软件工程的管理和领导人员在软件开发和维护的过程中,应自觉遵守、应用并推动合乎道德规范的管理方法。(6)专业——软件工程师应当自觉推动本行业所提倡的诚实、正直的道德规范,并自觉维护本行业的声誉,使软件行业更好地为公众利益所服务。(7)同事——软件工程师对其同事应持平等互助和支持的态度。(8)自身——软件工程师应终生不断地学习和实践其专业知识,并在学习和实践的过程中不断提高自身的道德规范素养。小结1.了解软件的发展2.理解软件的特性3.了解影响软件工程发展的各种因素4.认识软件工程学科5.理解软件工程对软件发展所起的作用6.了解软件产业的发展现状作业与思考作业:1.简述近20年软件发展趋势和重大事件,分国内和国外描述。2.总结软件特性有哪些。3.比较传统软件工程和面向对象软件工程的区别。思考:1.思考“共享小黄Y”提出的后续问题。第2章软件工程发展2.1软件工程发展历程1.第一代软件工程--传统的软件工程2.第二代软件工程--对象工程3.第三代软件工程--过程工程4.第四代软件工程--构件工程软件工程已经历四个重要发展阶段1.第一代软件工程--传统的软件工程2.第二代软件工程--对象工程3.第三代软件工程--过程工程4.第四代软件工程--构件工程

60年代末到70年代为了克服“软件危机”(Softwarecrisis)提出“软件工程”的名词,将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法,称为传统的软件工程。软件工程已经历四个重要发展阶段2.1软件工程发展历程1.第一代软件工程--传统的软件工程2.第二代软件工程--对象工程3.第三代软件工程--过程工程4.第四代软件工程--构件工程

80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。软件工程已经历四个重要发展阶段2.1软件工程发展历程1.第一代软件工程--传统的软件工程2.第二代软件工程--对象工程3.第三代软件工程--构件工程4.第四代软件工程--服务工程

20世纪90年代起,基于构(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。软件工程已经历四个重要发展阶段2.1软件工程发展历程软件工程已经历四个重要发展阶段1.第一代软件工程--传统的软件工程2.第二代软件工程--对象工程3.第三代软件工程--构件工程4.第四代软件工程--服务工程市场需求的快速变化,要求企业系统具有敏捷服务、快速重构、资源重用及自由扩充等特点,由此面向服务的架构SOA应运而生。它定义了构成系统的服务,通过描述服务之间的交互提供特定的功能特性。2.1软件工程发展历程2.2软件工程中新技术的影响1.云计算与软件工程2.大数据与软件工程3.移动应用与软件工程新技术的新特点使得软件工程也产生了变化。云计算技术的发展对于软件开发影响越来越大。1.云计算对开发模式的影响2.云计算对开发工具的影响3.云计算对开发者的影响4.云计算对软件测试的影响2.2软件工程中新技术的影响图2-1云计算框架2.2软件工程中新技术的影响软件工程中的大数据是由众多软件开发和使用过程中的工具自然产生和记录的软件演化及参与者活动的日志,散布在互联网的软件仓库、软件公司以及个体的各种环境中。1.软件项目样本多2.产生的日志数据种类和格式多(结构化数据和非结构化数据)3.总体规模巨大且时刻变化。软件工程中的大数据具有的主要特点:2.2软件工程中新技术的影响移动应用本质上仍是软件,同样存在围绕软件生命周期的各项软件工程任务。与传统的桌面软件相比,除了新的开发框架和平台以外,移动应用的开发还具有以下特点。1.需求工程2.软件重用3.能耗2.2软件工程中新技术的影响2.3软件工程中人的因素典型的软件开发项目在时间、人力、资金方面都是有限制的,软件开发的任何一步都需要人的参与。人的行动、想法以及决策都会影响软件的开发。而每一个人都是具有一定特点的个体,这些特点可能与受过怎样的教育、喜欢怎样的工作方式有关,也可能与他们所生活的社会文化环境有关。人的这些特点会在软件开发过程中不同程度地影响软件质量、软件开发速度,因而研究人的特性对整个软件开发具有重要意义。1.作为个体的人对软件开发的影响2.作为团队的人对软件开发的影响3.作为客户的人对软件开发的影响2.3软件工程中人的因素2.4软件工程的未来发展软件的本质是演化性和构造性,软件开发将伴随计算机技术的发展而进步。软件工程的未来发展主要趋势:1.全球化软件协作交付2.开放性计算被广泛应用3.智能化的软件开发方法小结1.了解软件工程的发展历程2.了解云计算及其对软件工程的影响3.了解大数据及其对软件工程的影响4.了解移动应用开发的特点5.明确软件开发中人的因素6.思考软件工程的未来发展趋势第3章软件过程软件生命周期模型1统一过程2敏捷开发3开源软件4软件过程的改进5软件过程软件过程是生产软件的方式,不同的软件组织有不同的软件生产过程。例如:初创公司的资本和人力条件有限,因此为开发出能迅速响应市场需求的软件产品,会更关注完成产品的核心功能并尽早发布,新功能的加入以及产品质量的提高往往放在软件交付以后。长期开发行业应用软件的公司对同类产品需求的把握更精准,对设计和实现软件所需要花费的工作量和时间的估算更准确,从而能更“有秩序”地进行相关软件生产,提交给用户稳定、可靠的软件产品。

软件生命周期模型:对构建软件所应遵循的步骤的理论性描述。

软件生命周期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。

瀑布模型快速原型模型

增量模型 螺旋模型

喷泉模型

可以用过程流来描述组织框架活动、动作和任务的次序,分为线性、迭代、演化和并行。软件过程瀑布模型(waterfallmodel)是在1970年由WinstonRoyce提出的,其过程流是线性的。瀑布模型的关键是每个阶段要完成指定的文档并且该阶段的产品被软件质量保证小组认可之后,才能进入下一个阶段。3.1软件生命周期模型3.1.1瀑布模型图3-1瀑布模型软件生命周期模型3.1瀑布模型被称为经典的软件生命周期模型。在有明确需求并且需求保持稳定的情况下,它是一个非常有效的过程模型。瀑布模型不适应软件需求不明确或者在开发过程中需求经常变化的情况。软件生命周期模型3.1.1瀑布模型3.1快速原型模型通过使用原型来辅助软件开发。在需求分析阶段要得到准确、合理的需求说明可能比较困难,用户可能并不清楚自己需要的是什么样的系统。快速原型模型适合预先不能确切定义需求的软件系统的开发。

软件生命周期模型3.1.2快速原型模型3.1图3-2快速原型模型

软件产品的开发基本上是线性顺序进行的。

软件生命周期模型3.1快速原型模型最大的特点在于“快速”。对于采用何种形式、何种策略运用快速原型主要取决于软件项目的特点、团队成员素质、可供支持的原型开发工具和技术等,需要根据实际情况来做出决定。软件生命周期模型3.1.2快速原型模型3.1如果软件有明确需求,整个开发过程不要求按照线性过程流执行,同时要求团队迅速为用户提供一套功能有限的软件产品,并允许在后续版本中再进行细化和扩展,在这种情况下,可采用增量模型比较适用。

软件生命周期模型3.1.3增量模型3.1图3-3增量模型

软件生命周期模型3.1增量模型的最大特点就是将待开发的软件系统模块化和组件化。增量式开发有利于从总体上降低软件项目的技术风险。但增量模型对软件设计有更高的技术要求:软件体系结构具有良好的开放性与稳定性,能够顺利地实现构件集成;同时增量构件应具有很强的功能独立性,能够方便地与系统集成。软件生命周期模型3.1.3增量模型3.1为了让软件开发能更适应风险的控制,Barry

Boehm在1988年提出软件系统开发的螺旋模型,将瀑布模型和快速原型模型结合起来,强调风险分析。螺旋模型以快速原型法为基础,以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。它的基本做法是在每一个开发阶段前引入风险识别、风险分析和风险控制。软件生命周期模型3.1.4螺旋模型3.1图3-4螺旋模型软件生命周期模型3.1B.H.Sollers和J.M.Edwards在1990年提出的喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。软件生命周期模型3.1.5喷泉模型3.1图3-5喷泉模型1994年10月,JamesRumbaugh和GradyBooch开始合作致力于建模语言工作,于1995年10月发布了统一方法UM0.8(UnitiedMethod0.8)。1995年,经过Booch、Rumbaugh和Jacobson三人的共同努力,于1996年6月和10月分别发布了UML0.9和UML0.91,并将UM重新命名为统一建模语言(UnifiedModelingLanguage,UML)。UML是现今较为成熟的软件建模技术和语言。3.2.1RUP的产生3.2统一过程在创建UML开始阶段,UML的三位创始人就认识到软件开发除了需要建模技术和语言之外,还需要一个更高层次、能够指导软件开发人员进行开发活动的开发过程方法学。1998年,统一过程(RationalUnifiedProcess,RUP)正式发布,并且将UML作为其建模语言。RUP并不是具体的一系列步骤,而应被视为一种自适应的方法学,可以根据实际开发的软件产品进行修改。3.2.1RUP的产生3.2统一过程图3-6RUP发展过程

3.2.1RUP的产生统一过程3.2图3-7RUP过程模型

RUP软件过程模型是一个二维的软件开发模型,也是一种用例驱动、以体系结构为核心、迭代递增的软件过程框架。3.2.2RUP的过程模型统一过程3.2RUP包含了软件开发积累下来的六大经验:1.迭代和递增式开发2.管理需求3.基于组件的体系结构4.可视化建模5.验证软件质量6.控制软件变更

3.2.3RUP的特点统一过程3.22001年,17位在当时被称为“轻量级方法学家”的软件开发者、软件工程作家以及软件咨询师(敏捷联盟)共同签署了“敏捷软件开发宣言”。3.3.1敏捷原则3.3敏捷开发敏捷软件开发宣言个体和交互胜过过程和工具可以工作的软件

胜过

面面俱到的文档

客户合作

胜过

合同谈判

响应变化

胜过

遵循计划“我们正在通过亲身实践以及帮助他人实践,揭示更好的软件开发方法。通过这项工作,我们认识到:虽然右项也具有价值,但我们认为左项具有更大的价值。”敏捷开发3.3敏捷联盟制定了12项原则,将敏捷理念落实到具体可操作的层面。敏捷软件开发项目以12项原则为基石,但并不是每一个敏捷模型都同等使用这12项原则,一些模型可以选择忽略或淡化其中的一项或多项原则的重要性。敏捷开发3.33.3.1敏捷原则(1)最优先要做的是通过尽早、持续地交付有价值的软件来使客户满意。(2)即使在开发的后期,也欢迎需求变更。敏捷过程利用变更为客户创造竞争优势。(3)经常交付可运行软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。(4)在整个项目开发期间,业务人员和开发人员必须每天都在一起工作。(5)激发个体的斗志,以他们为核心搭建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。(6)不论团队内外,传递信息效果最好和效率最高的方式是面对面的交谈。敏捷开发3.3(7)可工作的软件是进度的首要度量标准。(8)敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。(9)不断地关注优秀的技能和好的设计会增强敏捷能力。(10)要做到简洁,即尽最大可能减少不必要的工作。这是一门艺术。(11)最好的架构、需求和设计来自于自组织团队。(12)每隔一定时间,团队要反思如何才能更有效地工作,并相应调整自己的行为。敏捷开发3.3极限编程(XP)Scrum精益开发(Lean)OpenUP3.3.2敏捷过程应用最广泛的敏捷开发方法框架有:敏捷开发3.3极限编程(ExtremeProgramming,XP)是目前敏捷软件开发使用最为广泛的方法之一,其主要目标在于降低因需求变更而带来的成本。极限编程的创始人KentBeck为XP的实施确定了五个基础要素:沟通、简明、反馈、鼓励和尊重。3.3.3极限编程敏捷开发3.3图3-8

XP过程

3.3.3极限编程敏捷开发3.3Scrum最早由JeffSutherland在1993年提出,KenSchwaber在1995年OOPSLA会议上形式化了Scrum开发过程,并向业界公布。Scrum已经是业界常用的敏捷开发方法之一。使用Scrum的产品生命周期一般包含三个阶段:●产品定义(计划):进行迭代所需要的项目准备、项目计划和技术分析。●迭代开发(执行):在固定时间的迭代中实现需求(产品待办列表中的条目)。●结束:准备最终的发布,结束项目。3.3.4Scrum敏捷开发3.3图3-9Scrum过程敏捷开发3.3每个过程模式定义了一系列开发活动:●待办列表(Backlog):能为用户提供商业价值的项目需求或者特征的优先级列表。●冲刺(sprint):是由一系列必须在规定时间完成的工作单元组成,这些工作单元是为了实现待定需求而必需的。在冲刺过程中,不允许进行任何变更,以确保短期内的稳定性●Scrum例会:团队每天召开短会,帮助团队尽早发现问题。●演示:向客户交付软件增量,由客户对其进行评价。3.3.4Scrum敏捷开发3.31.产品负责人2.ScrumMaster3.Scrum团队1.产品代办列表2.发布燃尽图3.Sprint代办列表4.Sprint燃尽图1.Sprint2.发布计划会议3.Sprint计划会议4.每日例会5.Sprint评审会6.Sprint回顾会议Scrum敏捷过程由三个角色、四个工件、六个时间箱组成。三个角色四个工件六个时间箱敏捷开发3.3图3-10

Scrum中的燃尽图敏捷开发3.31998年,BrucePerens和EricRaymond创立了开放源代码促进会(OpenSourceInitiative),发起了“开放源代码”运动。开源已经成为软件领域技术、产品创新的一种重要模式,也是驱动信息产业变革、强化信息产业基础的关键要素。在云计算、大数据等新兴领域,

温馨提示

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

评论

0/150

提交评论