版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程知识回顾程序及其质量保证程序的内部质量和外部质量程序质量保证很重要程序质量分析和保证的方法软件的概念和软件开发的挑战程序+文档+数据复杂性:产品逻辑性、需求多变性、缺陷隐蔽性软件开发包含多方面的工作如何开发软件系统?
软件工程内容软件工程产生背景软件危机的表现及根源软件工程基本内涵思想、要素、目标和原则软件工程发展历程不同发展阶段的成果及特点软件工程教育特点教育规范、知识体系和课程特点1950s-1960s的计算机软件应用应用领域变化最早满足军方应用,如科学计算逐步走向商业应用等新领域,如银行、航空等领域的事务处理应用数量增长计算机软件的需求量不断上升应用复杂性增加多样化的用户多样化的需求示例:IBM360OS软件开发OS/360超大型软件项目(1960s初):复杂软件:支持多道程序,最多可同时运行15道程序软件工程师超2000人,花费超5亿美元,工作量超5000人年有史以来最可怕的软件开发泥潭Brooks,《人月神话》TheMythicalMan-Month、图灵奖获得者1960s的个体作坊式软件开发第二代晶体管计算机:TRADIC(1954)IBM1401(1958)作坊式的个人创作依靠个人的能力关注计算存储时空利用,精雕细琢程序规模小且功能单一相互之间缺乏合作无系统性方法和标准流程1.1个体作坊式创作带来的问题作坊式的个体编程开发大批量和大规模软件系统的开发个体作坊式方法会给软件开发带来什么问题?1.2软件开发需要解决的问题开发过程:基于什么样的步骤来开发软件系统开发方法:采用怎样的方法来指导各项软件开发活动开发管理:如何组织开发人员和管理软件产品质量保证:如何保证软件开发活动和制品的质量软件开发面临的挑战日趋突出代码规模增长对质量、生产率、成功开发带来的影响缺陷密度需求增长软件生产率成功概率大规模软件开发的案例Windows系列软件代码量Windows95:
1500万行Windows98:
1800万行WindowsXP:
3500万行WindowsVista:
5000万行Windows7:7000万行Windows7开发组织核心团队的人大约有1000人、25个功能小组每个小组大约有40个人,每个小组包括三个部分的工作人员:程序经理,开发工程师,测试工程师当软件规模越大,上述挑战就越突出,面临的困难也就越多我们所面临的挑战指挥信息系统中的软件规模大、质量要求高装备中嵌入式软件系统规模大、质量要求高信息化需要多样化和高质量的软件!使命伟大!责任重大!信息化建设任重道远!1.3软件危机的出现作坊式的个体编程大批量、大规模软件开发软件危机进度经常延迟质量无法保证成本超出预算软件维护困难失败风险很大1.3.1开发成本高软件成本高,软硬件投资比发生急剧变化美国空军:1955年软件占总费用(计算机系统)的18%,70年60%,85年达到85%IBM360OS:5000+人年,耗时4年(1963-1966),花费2亿多美元计算机软/硬件成本变化1.3.2进度难以控制项目延期比比皆是由于进度问题而取消的软件项目较常见只有一小部分的项目能够按期完成1.3.3质量难以保证人总是会犯错误的软件开发的错误表现为多种形式没有按照要求(需求)来开发编写的代码在功能上存在错误实现了功能但是性能达不到要求所开发的软件交互界面用户不喜欢…….有些软件错误可能是致命的波音737MAX事件
1.3.4软件维护困难理解读懂程序比较困难,尤其是他人程序修改程序非常脆弱,牵一发而动全身出错改了以后易引入错误发现有了错误后难以发现1.3.5失败风险很大DavidF.Rico,PMP,ACP,CSM,Lean&AgileSoftwareMethods,2012.计算机软件开发的成功比例和失败投资1.4如何来解决软件危机?如何来解决软件危机?策略、方法、理论、技术等多方共同关注的问题用户(如美国军方)工业界(如IBM)学术界(如研究学者)软件危机的产生根源对软件这样一类复杂和特殊系统的认识不清软件是新生事物,对其特点、规律性和复杂性认识不够没有找到支持软件系统开发的有效方法基础理论、关键技术、开发过程、支撑工具等缺乏成功软件开发实践以及相应的开发经验系统总结、认真分析、充分借鉴、吸取教训软件开发迫切需要理论和方法指导,软件工程应运而生!内容软件工程产生背景软件危机的表现及根源软件工程基本内涵思想、要素、目标和原则软件工程发展历程不同发展阶段的成果及特点软件工程教育特点教育规范、知识体系和课程特点*2.1软件工程的诞生时间:1968年地点:西德南部小城事件:NATO科技委出资召开的会议人物:
11个国家50位代表参加主题:如何解决软件危机成果:提出了软件工程提出了软件工程的概念及思想,标志着软件工程的诞生软件工程产生的动机软件工程软件系统开发解决软件危机快速高效低成本高质量2.2何为软件工程?将系统的、规范的、可量化的方法应用于软件的开发、运行和维护的过程;以及上述方法的研究--
[IEEE93]系统化:提供完整和全面的解决方法,包括目标、原则、过程模型、开发活动、开发方法和技术等规范化:支持各类软件系统的开发,包括语言标准、质量标准、编程标准、方法标准、能力极其改进标准等可量化:工作量、成本、进度、质量等要素可以量化软件工程对软件开发的新认识软件是产品(Product)面向用户,存在质量、成本、利润等特征软件开发是一项工程(Project)存在约束,需要质量保证,进行组织管理,......要按工程化方法来组织软件生产分阶段分步骤来实施按计划开展开发活动进行各种形式质量保证采用行之有效的方法借助各种工具的支持......过程约束质量成本软件开发方式的改变从个体作坊式行为==》基于团队的协同开发方式作坊式的个体编程创作基于团队的协同开发团队协作分步实施质量保证开发技术支持工具……2.3软件工程的三要素2.3.1过程(Process)从管理的视角,回答软件开发、运行和维护需要开展哪些工作、按照什么样的步骤和次序来开展工作对软件开发过程所涉及的人、制品、质量、成本、计划等进行有效和可量化的管理典型成果过程模型,如瀑布模型、增量模型、原型模型、迭代模型、螺旋模型等等方法,如敏捷开发方法、群体化开发方法、DevOps方法管理,如配置管理、质量管理、团队组织等2.3.2方法学(Methodology)从技术的视角,回答软件开发、运行和维护如何做的问题为软件开发过程中的各项开发和维护活动提供系统性、规范性的技术支持如何理解和认识软件模型是什么如何用不同抽象层次的模型来描述软件制品采用什么样的建模语言来描述软件模型等等典型成果结构化软件开发方法学面向对象软件开发方法学基于构件的软件开发方法学2.3.2工具(Tool)从工具辅助的视角,主要回答如何借助工具来辅助软件开发、运行和维护的问题帮助软件开发人员更为高效地运用软件开发方法学来完成软件开发过程中的各项工作,提高软件开发效率和质量,加快软件交付进度。如需求分析、软件设计、编码实现、软件测试、部署运行、软件维护、项目管理、质量保证等,简化软件开发任务,典型成果SonarQube、Eclipse、VisualStudio等2.4计算机辅助软件工程什么是计算机辅助软件工程(Computer-AidedSoftwareEngineering,CASE)在软件工程活动中,开发人员按照软件工程的方法和原则,借助于计算机及其软件的帮助来开发、维护和管理软件产品的过程为什么需要计算机辅助软件工程软件及其开发很复杂,简化开发产品数量多难以管理,提高效率人的因素决定易出错,提高质量工欲善其事必先利其器CASE工具和环境CASE工具支持CASE的软件工具如编辑器、编译器等具有单一性CASE环境将CASE工具按统一标准和接口组装起来,使工具间、人员间、各个过程间能方便交互的集成环境如VisualStudio将编辑、编译、调试、界面设计、安装程序生成等等集成在一起计算机辅助软件工程工具代码编写编辑、编译、分析、查找、代码生成等项目管理工作量和成本估算、制定和跟踪计划、配置和版本管理软件建模需求建模、UML建模、数据建模等软件测试测试用例自动生成、代码测试、缺陷报告等软件运维软件运行,管理和维护讨论:你知道的CASE工具和环境什么样的CASE工具和环境?提供了哪些功能和服务?发挥了什么样的作用?没有CASE工具能够进行软件开发吗?2.5软件开发的本质软件创作软件生产软件开发基于软件开发者的经验和技能,借助于智慧,进行自由创新,如软件设计、编码实现等基于工程化的手段,遵循约束和规范,开展软件生产,如遵循过程、按照标准、质量保证等软件开发=软件创作+软件生产2.6软件工程的目标在成本、进度等约束下,指导软件开发和运维,开发出满足用户要求的足够好软件2.7软件工程原则(1)抽象和建模抽象:将与相关开发活动所关注的要素提取出来,不关心的要素扔掉,形成与该开发活动相关的软件要素建模:基于特定的抽象,借助于建模语言(如数据流图、UML等),建立起基于这些抽象的软件模型,进而促进对软件系统的准确理解软件工程原则(2)模块化将软件系统的功能分解和实现为若干个模块,每个模块具有独立的功能,模块之间通过接口进行调用和访问。模块内部高内聚,模块间松耦合软件工程原则(3)软件重用在软件开发过程中尽可能利用已有的软件资源和资产(如函数库、类库、构件库、开源软件、代码片段等)来实现软件系统努力开发出可被再次重用的软件资源(如函数、类、构件等)有助于提高软件开发效率,降低软件开发成本,满足开发工程约束,得到高质量的软件产品软件工程原则(4)信息隐藏模块内部信息(如内部的语句、变量等)对外不可见或不可访问,模块间仅仅交换那些为完成系统功能所必需交换的信息(如接口)模块设计时只对外提供可见的接口,不提供内部实现细节。信息隐藏原则可提升模块的独立性,减少错误向外传播,支持模块的并行开发软件工程原则(5)关注点分离在软件开发过程中,将若干性质不同的关注点分离开来,以便在不同的开发活动中针对不同的关注点,随后将这些关注点的开发结果整合起来,形成关于软件系统的完整视图软件系统具有多面性的特点,既有结构特征,如软件的体系结构,也有行为特征,如软件要完成的动作及输出的结果;既有高层的需求模型,描述了软件需要做什么,也有低层的实现模型,描述了这些需求是如何实现的使得开发者在每一项开发活动中聚焦于某个关注点,有助于简化开发任务;同时通过整合多个不同视点的开发结果,可获得关于软件系统的更为清晰、系统和深入地认识软件工程原则(6)分而治之在软件开发和维护过程中,软件开发人员可对复杂软件系统进行分解,形成一组子系统如果子系统仍很复杂,还可以继续进行分解,及至通过分解所得到的子系统易于处理;然后通过整合子系统的问题解决得到整个系统的问题解决有助于简化复杂软件系统的开发,降低软件开发复杂性,从而提高软件开发效率,确保复杂软件系统的质量。软件工程原则(7)双向追踪原则当某个软件制品发生变化时,一方面要追踪这种变化会对那些软件制品产生影响,进而指导相关的开发和维护工作,此为正向追踪;另一方面要追踪产生这种变化的来源,或者说是什么因素导致了该软件制品的变化,明确软件制品发生变化的原因及其合理性,此为反向追踪。有助于确保软件制品间的一致性,发现无意义的变化,并基于变化指导软件的开发和维护,确保软件质量。软件工程原则(8)工具辅助利用软件工具来辅助软件开发和维护工作是一项行之有效的方法尽可能地借助计算机工具来辅助软件开发和维护,以降低开发者和维护者的工作负担,提高软件开发和维护效率,提升软件开发及软件制品的质量工欲善其事必先利其器讨论:编写程序用到的软件工程原则在编写程序代码的过程中,你用到了哪些软件工程原则?这些软件工程原则在编程中发挥了什么作用?抽象和建模、模块化、软件重用、信息隐藏、关注点分离、分而治之、双向追踪、工具辅助内容软件工程产生背景软件危机的表现及根源软件工程基本内涵思想、要素、目标和原则软件工程发展历程不同发展阶段的成果及特点软件工程教育特点教育规范、知识体系和课程特点*3.1软件工程的发展历程1970198019902000瀑布模型形式化方法结构化方法…OO方法软件重用软件工厂标准化CASE
…软件架构软构件软件设计模式软件生产线CMM……模型驱动网构软件面向主体敏捷方法群体化开发……自适应系统软件工程自治系统软件工程经验软件工程DevOps
……2010智能化软件工程……202020世纪50-60年代软件系统较为简单,计算机软件与硬件结合的非常紧密“精雕细琢”程序代码,以充分利用宝贵的计算资源出现了黑客文化,倡导自由成功的案例IBMOS/360软件系统的成功研制并投入商业使用出现了高级程序设计语言如Fortran、COBOL、LISP、ALGOR等这一时期的软件开发手段落后,开发效率低,质量无法保证,进而引发了软件危机20世纪70年代计算机主机的计算能力得到了很大提升计算机软件朝着商业应用拓展,需要处理繁杂的事务流程程序设计语言和程序设计方法学成为研究热点出现了诸如PASCAL、C、Prolog、ML等高级语言产生了软件工程新技术提出了瀑布软件开发过程模型,结构化软件开发方法学形式化方法(FormalMethod)的研究非常活跃研制了一些支持结构化软件开发方法学、形式化方法的CASE工具和环境开始采用定量方法来指导软件开发、管理和质量保证20世纪80年代计算机软件的应用领域和范围不断扩大,软件数量、系统规模和复杂性不断增长产生了面向对象程序设计技术如Smalltalk、C++等提出了SW-CMM,即软件能力成熟度模型软件重用被视为是解决软件危机的一条现实可行途径CASE工具和环境的研制和使用成为热点软件工程标准化工作非常活跃,成果丰硕20世纪90年代局域计算环境开始流行,互联网应用开始出现OOP技术趋于成熟,面向对象分析和设计方法学的研究非常活跃,逐步形成系统化的面向对象软件工程制定面向对象建模语言UML,产生了统一软件开发过程RUP软构件技术得到了快速发展,萌生了软件体系结构和软件设计模式的研究与实践开源软件及技术开始出现人机交互技术取得长足进步21世纪前十年互联网技术日趋成熟,信息技术快速发展,软件数量不断增长,越来越多的软件部署在互联网上运行并提供服务产生了网构软件技术、自适应软件工程、可信软件技术、面向主体软件工程等群体化软件开发技术在开源软件开发实践中广泛应用面向服务软件工程的研究与实践敏捷开发方法的在软件开发中的应用模型驱动软件开发技术的研究与应用软件可信技术的研究与实践非常活跃近十年移动互联网得到了快速发展,应用软件需求激增,信息系统的人机物融合趋势日趋突出人类正进入到软件定义一切的时代,从而对软件开发和运维提出了严峻的挑战越来越多的企业和个人参与开源软件实践,涌现形成了规模极为庞大的开源软件生态DevOps方法在软件产业界和软件开发实践中的广泛应用智能化软件开发技术研究活跃3.2我国软件工程发展起步于1980年前后,过去四十多年取得了长足的进步1980s,软件自动化开发和形式验证1980s,软件开发方法学和CASE工具及集成环境21世纪初期,网构软件技术21世纪以来,可信软件技术近10多年来,开源软件研究与实践3.3软件工程发展的时代特点与时代的计算技术和信息技术的发展有着紧密的联系从20世纪60年代到80年代中后期,部署和运行在单机或主机上从20世纪80中后期到90年代,个人计算机和局域网的出现进入21世纪,随着互联网应用的不断普及,更多的软件系统部署和运行在动态、难控和不确定的互联网环境上2010年以来,随着泛在计算环境和移动互联网应用的不断普及,信息系统的人机物融合特征日益突出软件工程发展的技术特点软件抽象的层次越来越高二进制编码、结构化编程、结构化开发方法学、面向对象编程、面向对象开发方法学,……软件重用的粒度越来越大函数和过程,类,构件,开源软件,……软件开发理念的不断变化以文档为中心与以代码为中心从个体、团队到群体的开发组织从还原论到演化论软件工程的多学科交叉软件工程人工智能数据科学复杂性科学认识大型复杂软件系统揭示和解释内在的机理指导方法的研究与实践……..计算机科学与技术认知和社会科学工程和管理科学数学软件工程的变与不变目标软件危机基本原则软件重用模块化问题分解….不变变对软件的理解和认识社会技术视点学科交叉交叉更多的学科方法和手段敏捷方法群体化开发….内容软件工程产生软件危机的表现及根源软件工程概念思想、要素、原则和目标软件开发=软件创作+软件生产软件工程发展发展历程及特点软件工程教育教育规范和知识体系*4.1软件工程师的培养领域和需求分析工程师软件设计工程师程序员软件测试工程师软件运维工程师软件项目管理人员需要具备多方面的能力创新能力系统能力解决复杂工程问题能力……..4.2软件工程的知识领域IEEESWEBOKV3.0(SoftWareEngineeringBodyofKnowledge)知识域(KnowledgeArea:KA)软件需求软件设计软件构造软件测试软件维护软件工程专业实践软件工程经济学计算基础数学基础工程基础软件配置管理软件工程管理软件工程过程软件工程建模与方法软件质量“软件工程专业”开设的课程计算机程序设计计算机程序设计课程设计软件工程软件工程综合实践软件项目管理软件体系结构与设计软件需求工程软件测试与验证人机交互计算机原理离散数学编译原理操作系统计算机网络人工智能导论数据库原理与技术数值分析4.3软件工程课程的特点内容“虚”针对软件复杂逻辑系统思想性和抽象教学内容要求“实”掌握软件工程实践能力解决软件开发实际问题课程特点教学难点难听懂、不易学知识点抽象,难以讲透不易理解和掌握知难做更难运用知识来开发软件难开发出高质量的软件难教学不能停留于知识讲授,不能纸上谈兵实践教学是课程教学重点,也是上好这门课的关键教学重点小结软件工程产生的背景和目的软件危机,持续存在,关注点不同软件工程的本质软件视为产品,软件开发视为工程、创作和生产相结合的过程三要素:过程、方法学和工具软件工程的基本原则软件工程的发展不同阶段和时期,不同的思想和技术软件工程教育软件工程知识体系及课程特点综合实践1任务:理解和分析开源软件的整体情况方法运行开源软件,理解软件功能;泛读开源代码,分析代码的构成,绘制出软件系统的体系结构图;利用SonarQube工具分析开源代码的质量情况要求理解开源软件提供的功能和服务,掌握软件系统的模块构成,分析开源软件的质量水平结果:(1)软件需求文档;(2)软件体系结构图,描述开源软件的模块构成;(3)SonarQube的开源软件质量报告综合实践2任务:分析相关行业和领域的状况及问题。方法选择你所感兴趣的行业和领域(如老人看护、防火救灾、医疗服务、出行安全、婴儿照看、机器人应用等),开展调查研究,分析这些行业和领域的当前状况和未来需求,包括典型的应用、采用的技术、存在的不足和未来的关注。要求调研要充分和深入,分析要有证据和说服力。结果行业和领域调研分析报告。课后实践构想软件需求,形成一页纸(不超1000字)描述名字:概括软件系统问题:描述该软件欲解决的实际问题方法:描述如何通过软件及相关系统来解决问题举例:举一个使用该软件解决问题的应用案例和具体场景功能:软件大致有哪些功能?设备:软件需要与哪些设备进行集成文档格式可参见模板问题和讨论软件过程模型知识回顾软件的概念:文档、数据和程序的集合软件的特点:逻辑产品、需求多变、设计开发、缺陷隐蔽性软件生命周期:经历多个不同的阶段闭源软件和开源软件:实践状况及优势软件
程序;开发软件
编写程序;软件是如何开发出来的?内容何为软件过程模型基本概念和特点有哪些软件过程模型有什么类别,各有什么优缺点如何来选择软件过程模型软件过程模型的选择方式和策略1.1软件开发的特点基于智力的协作过程智力活动:基于逻辑思维来构造软件交流协作:软件工程师、用户间的交流和讨论软件项目内在复杂性介入的人多、考虑的内容多、产生的制品多不同要素间存在关联循序渐进的开发过程开展有序的开发活动,如编码、分析、设计体现了工程的思想:按步骤、分阶段按照什么样的过程来有序地开发软件?1.2软件过程过程(Process)活动:明确要做哪些事情,包括具体的活动关系:活动间存在逻辑关系,如依赖和先后次序示例:考研的过程软件过程(SoftwareProcess)按照项目进度、成本和质量要求,遵循用户需求,开发和维护软件、管理软件项目的一系列有序软件开发活动软件开发活动:技术活动和管理活动1.3软件过程模型开发活动1开发活动2开发活动3开发活动n任务、目标、输入和输出活动间的关系和次序投入人员、工具、资源和成本等软件过程模型(SoftwareProcessModel)定义了软件开发的具体活动以及活动间的逻辑关系内容何为软件过程模型基本概念和特点有哪些软件过程模型有什么类别,各有什么特点和优缺点如何来选择软件过程模型软件过程模型的选择方式和策略2.1软件过程模型的产生背景作坊式的个人创作聚焦于编写代码关注时空利用,精雕细琢程序规模小且功能单一依靠个体技能,缺乏合作无系统性方法和标准流程软件工程产生之前的软件开发软件过程模型的产生背景OS/360超大型软件项目(1960s初):通用系统,支持多道程序,最多可同时运行15道程序软件工程师超2000人,花费超5亿美元,工作量超5000人年有史以来最可怕的软件开发泥潭Brooks,《人月神话》TheMythicalMan-Month作者、图灵奖获得者典型的软件过程模型瀑布模型增量模型迭代模型原型模型螺旋模型基于构件的过程模型UP模型需要系统、规范性的软件过程模型的指导每种软件过程模型有其各自的特点和适用的场所2.2瀑布模型(WaterfallModel)需求分析概要设计详细设计编码实现集成测试确认测试特点与软件生命周期相互一致每个活动结束后需要评审相邻活动间存在因果关系优点简单,一目了然,易理解、掌握、应用和管理适合于需求易于定义、不易变动的软件系统1970提出的第一个软件过程模型需求分析(RequirementAnalysis)活动任务:定义软件需求,包括功能、非功能需求关注点:要做什么?(What,Problem)层次和视角:用户角度,仅描述问题和需求方法依据:用户的期望和要求不断与用户进行交流和商讨,抽象、问题分解、多视点等技术产出软件需求模型、软件需求文档、软件确认测试计划文档类的软件制品问题是什么?概要设计(ArchitectureDesign)活动任务:建立软件总体架构、制定集成测试计划关注点:软件高层设计?(How,Solution)层次和视角:宏观、全局、整体、战略性方法依据:软件需求文档自顶向下,逐步求精,抽象,模块化,局部化,信息隐藏…...产出软件概要设计模型、软件概要设计文档、软件集成测试计划文档类的软件制品问题如何解决?详细设计(DetailedDesign)活动任务:设计模块内部细节(算法、数据结构),制订单元测试计划关注点:详细设计?(How,Solution)层次和视角:微观、局部、细节性方法依据:概要设计文档、软件需求文档高质量的软件设计原则,如单入口单出口产出软件详细设计模型、软件详细设计文档、单元测试计划文档类的软件制品问题如何解决?编程实现(Implementation)活动任务:编写程序代码并进行单元测试和调试关注点:如何最终做出这个东西?(How,Code)层次和视角:最终的实现代码方法依据:软件概要和详细设计文档、单元测试计划采用某种程序设计语言(如C、C++、Java)产出经过单元测试的源程序代码程序类的软件制品实际解决问题集成测试(IntegrationTest)活动任务:组装软件模块并进行测试以发现问题关注点:集成后软件中的缺陷(Bug)层次和视角:自底向上组装、全局
方法依据:软件概要设计文档、软件集成测试计划软件集成测试工具产出经过集成测试、修复缺陷的源程序代码,集成测试报告数据、文档和代码类的软件制品问题解决如何?软件有缺陷吗?确认测试(ValidationTest)活动任务:测试软件是否满足用户需求关注点:软件在满足用户需求方面是否存在缺陷层次和视角:从用户角度,聚焦需求是否得以正确实现方法依据:软件确认测试计划、软件需求文档软件测试支撑工具产出经过确认测试、修复缺陷后的代码,软件确认测试报告数据、文档和代码类的软件制品问题解决如何?软件有缺陷吗?瀑布模型的局限性?需求分析概要设计详细设计编码实现集成测试确认测试结合课程综合实践思考不足需求确定,过于理想化缺乏变通,难应对变化软件需求具有易变、多变的特点2.3改进的瀑布模型:带反馈和回溯需求分析概要设计详细设计编码实现集成测试确认测试回溯后期活动发现有问题后,可返回到前面活动加以解决提高了过程模型的灵活性结合课程综合实践思考不足软件开发处于动荡之中需等到所有功能实现后,才能得到可运行软件2.4增量模型(IncrementalModel)需求分析概要设计详细设计编码实现集成测试确认测试详细设计编码实现集成测试增量1增量n渐进式、增量式地实现软件功能优点:渐进快速交付,并行开发,提高效率增量模型的局限性?结合课程综合实践思考不足软件需求可确定且不易于变化增量1增量n2.5迭代模型(IterativeModel)需求分析概要设计详细设计编码实现软件测试迭代1需求分析概要设计详细设计编码实现软件测试迭代2迭代n每次迭代完成部分可确定的软件需求迭代模型的特点每次迭代是一完整过程体现了小步快跑的开发理念适合需求难导出、不易确定且持续变动的软件迭代模型的局限性?结合课程综合实践思考不足迭代多少次不确定管理较为复杂思考和讨论增量过程模型与迭代过程模型有何区别?增量模型迭代模型增量1增量n软件需求获取是一关键和瓶颈问题软件需求非常关键软件开发的基础、验收的依据用户讲不清楚软件需求有哪些、是什么?说不清、道不明尤其当软件较为复杂和庞大之时用户与软件工程师对软件需求理解存在偏差对软件需求描述的歧义性、二义性、不准确等造成的“应该是这样的”、“实际是这样的”如果软件需求分析结果不正确、不完整、有歧义,会带来什么样的问题?2.6原型模型(PrototypeModel)特点软件原型作为交流载体和媒介支持用户参与到软件开发中持续、渐进地导出用户要求适合于需求难导出、不易确定且持续变动的软件快速设计采集和细化需求建造原型客户使用评价原型获得反馈开发软件系统何为软件原型?用户界面执行流程2.7螺旋模型(SpiralModel)集成迭代模型和原型模型引入风险分析,风险驱动的过程模型每个迭代四个阶段,若干活动适合于需求不明确、开发风险高、开发过程中需求变更大的软件项目不足:管理复杂软件风险使软件开发受到影响和损失、甚至导致失败的、可能会发生的事件不同软件过程模型的特点模型名称指导思想关注点适合软件管理难度瀑布模型提供系统性指导与软件生命周期相一致需求变动不大、较为明确、可预先定义的应用易原型模型以原型为媒介指导用户的需求导出和评价需求获取、导出和确认理解需求难以表述清楚、不易导出和获取的应用易增量模型快速交付和并行开发软件详细设计、编码和测试的增量式完成需求变动不大、较为明确、可预先定义的应用易迭代模型多次迭代,每次仅针对部分明确软件需求分多次迭代来开发软件,每次仅关注部分需求需求变动大、难以一次性说清楚的应用中等螺旋模型集成迭代模型和原型模型,引入风险分析软件计划制定和实施,软件风险管理,基于原型的迭代式开发开发风险大,需求难以确定的应用难内容何为软件过程模型基本概念和特点有哪些软件过程模型有什么类别,各有什么特点和优缺点3.如何来选择软件过程模型软件过程模型的选择方式和策略软件项目与软件过程模型软件项目及开发团队的具体特点软件过程模型的特点、优点和局限3.1软件过程模型的选择考虑软件项目的特点尤其是所开发软件的业务特点,如业务领域是否明确、软件需求是否易于确定、用户需求是否会经常性变化等等是否可以预估到潜在的软件开发风险软件开发团队的水平需要结合软件开发团队的能力和水平来选择过程模型,以防开发团队和管理人员无法掌控和驾驭过程模型分析软件过程模型特点优缺点以及适合的场所示例:如何选择合适的过程互联网应用软件的开发过程模型特点:软件需求不确定且快速变化如:12306APP软件,微信软件,淘宝软件选用瀑布模型不合适,迭代模型较为合适装备软件的开发过程模型特点:软件需求确定且较为稳定如:飞行控制软件可考虑选用瀑布模型,用迭代模型不是很合适思考和讨论结合课程综合实践的具体特点和要求,思考选用什么样的软件过程模型较为合适,为什么?软件有创意:问题及基于软件的解决方法有新意软件上规模:软件具有一定规模,代码量>15000+LOC如空巢老人看护软件、多无人机联合搜寻软件课程实践软件项目有何特点?软件项目开发团队有何特点?3.2传统软件过程模型的特点和不足软件开发和运维的大量工作用于撰写软件文档,而非去编写程序代码软件开发过程中会花费大量时间和精力用于软件文档的评审,以确保软件质量一旦软件需求发生变化,开发人员需要修改软件需求文档,并据此来调整其他的一系列文档,最后再修改程序代码等较长时间才能得到可运行软件系统以文档为中心的重型软件开发方法,非常笨重瀑布模型增量模型迭代模型原型模型螺旋模型……敏捷软件开发方法(AgileMethod)重视人和交互、重视可运行软件系统、重视客户合作、重视响应用户需求变化少写软件文档,以代码为中心,快速响应变化小结软件开发需要过程指导明确步骤、活动、次序、关系多样化的软件过程模型瀑布、增量、迭代、原型、螺旋等各自有其优缺点选择合适的软件过程模型考虑软件项目的特点和要求结合软件过程模型的优缺点考虑开发团队的经验和水平布置课程综合实践任务综合实践1:阅读、分析和维护开源软件结合代码阅读以及sonarqube工具扫描,分析小米便签开源软件的质量,撰写质量分析报告要求:分析代码质量(从软件设计到代码规范)好的一面;存在的不足和问题,在具体开发中应用高质量的软件开发规范和实践综合实践2:开发有创意、上规模和高质量的软件结合要求构思软件需求,撰写软件需求构思和描述文档要求:有创意,上规模;力争将软件需求讲清楚:what&why下一次课程的内容学生汇报开源代码质量分析报告汇报软件需求构思和描述文档教师讲评学生的课程实践思考题迭代模型能够有效的支持课程实践软件项目的开发和管理工作?为什么?问题和讨论敏捷软件开发方法内容何为敏捷开发方法基本思想和原则特点和应用具体敏捷开发方法极限编程测试驱动开发方法Scrum方法1.1传统重型软件开发方法的特点和不足遵循严格的过程和计划定义广泛适用的过程并通过团队来执行该过程,从而指导软件开发以预测性为主,倾向于预先制定详细的计划,并通过该计划来指导软件项目的实施,并期望软件开发过程与计划之间的偏差越少越好以文档为中心通过文档记录各个阶段的成果,将文档作为交互的媒介需对文档进行持续改进和评审难以有效应对软件需求的变化等到开发后期才能得到可运行软件编码是开发的后期工作1.2什么是敏捷(Agile)方法?一种轻量级软件开发方法相对于重量级的软件开发方法而言主张软件开发要以代码为中心,快速、轻巧和主动应对需求变化,持续、及时交付可运行的软件系统轻便、轻巧提供了一组思想和策略,指导快速响应用户需求的变化,快速交付可运行的软件制品1.3敏捷开发方法的基本观点较之于过程和工具,应更加重视人和交互的价值较之于面面俱到文档,应更加重视可运行软件系统的价值较之于合同谈判,应更加重视客户合作的价值较之于遵循计划,应更加重视响应用户需求变化的价值敏捷方法体现的思想强化可运行的软件,弱化文档以可运行软件为中心来开展软件开发以适应变化为目的来推进开发针对变化不断进行优化和调整任务、产品和计划等以人为本敏捷软件开发是面向人的而不是面向过程的,让方法、技术、工具、过程等来适应人,而不是让人来适应它们敏捷意味着:轻盈、灵巧;无过多的负担;迅速响应变化1.4敏捷准则(1/2)尽早和持续地交付有价值的软件,以使用户满意即使到了软件开发后期,也欢迎用户需求的变化不断交付可运行的软件系统,交付周期可以从几周到几个月在整个软件项目开发期间,用户和开发人员最好能每天一起工作由积极主动的人来承担项目开发,给他们提供所需环境和支持,信任他们的能力团队内部最有效的信息传递方式是面对面的交谈敏捷准则(2/2)将可运行软件作为衡量软件开发进度的首要标准可持续性的开发,出资方、开发方和用户方应当保持长期、恒定的开发速度关注优秀的技能和良好的设计会增强敏捷性简单化最好的架构、需求和设计出自于自组织的团队软件开发团队应定期就如何提高工作效率的问题进行反思,并进行相应的调整敏捷软件开发对技术提出的要求如何快速开发出可运行的软件系统?当需求改变时,如何快速应对变化?如何给出可有效应对变化的软件设计?在文档缺乏情况下如何保证软件质量?如何提高软件开发的效率?1.5支持敏捷软件开发的技术极限编程测试驱动开发Scrum方法敏捷设计模式运用软件重构MDA-模型驱动开发CASE工具……敏捷开发方法是一大类方法的统称,它们遵循敏捷思想内容何为敏捷开发方法基本思想和原则特点和应用具体敏捷开发方法极限编程测试驱动开发方法Scrum方法2.1极限编程的基本思想由KentBeck提出的一种特殊的敏捷软件开发方法四条核心思想交流,强调基于口头(而非文档、报表和计划)的交流反馈,通过持续、明确反馈来获得软件状态简单,用最简单的技术来解决问题勇气,快速开发并在必要时具有重新进行开发的信心将经过数十年检验的准则结合在一起,定义了五条指导性原则和十二条须遵循的核心准则2.2极限编程的5条指导原则快速反馈从用户处迅速得到有关软件的反馈,确认开发是否满足用户需求,通过自动化测试迅速了解软件运行状况简单性假设开发人员只考虑当前迭代所面临问题,无需考虑下一次迭代的问题,用简单方法和技术来解决问
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 植物检疫员岗位检疫考试试卷及答案
- 变配电区安全风险公告栏
- 金色中国风国学文化经典模板
- 渐变星空互联网科技模板
- 简约学生会主席竞选模板
- 2026年漯河市检察官遴选考试试题及答案
- 2026年红十字会应急救护技能大赛试题库及参考答案
- 2026年检验科2026年度实验室管理体系培训考核试题(附答案)
- 2026年液化石油气库站操作工安全及技能知识考试题库(附含答案)
- 重庆市黔江区2026年网格员笔试试题及答案解析
- 超声介入管理制度
- 宁波西摩电器有限公司存货内部控制制度优化设计
- 激光脱毛培训课件教案
- 2025 AI语音合成市场调研报告
- GB/T 40006.12-2025塑料再生塑料第12部分:聚甲基丙烯酸甲酯(PMMA)材料
- 创伤性前房积血护理
- 【2025秋 新教材】统编版 二年级上册道德与法治 第16课《祖国我为您自豪》(第二课时)
- 危废处置合同框架协议
- 领队知识培训内容课件
- 无人机维护与保养课件
- 乒乓球教练基本知识培训课件
评论
0/150
提交评论