版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程理论与实践国家十二五规划教材软件工程理论与实践
第1章软件工程概述本章要点软件工程概述软件工程框架软件工程生存期模型软件工程知识体系复用原则2软件工程的历史第一阶段----程序设计阶段第二阶段----软件设计阶段第三阶段----软件工程阶段通过穿孔实现织布花纹的纺织机--程序能够通过“读”穿孔卡上的信息完成预定的任务的织布机编程的历史19世纪初,法国人约瑟夫.雅各(JosepheMarieJaquard)设计的织布机,就能够通过“读”穿孔卡上的信息完成预定的任务。英国诗人拜伦(Byron)的女儿,数学家爱达.奥古斯塔.拉夫拉斯伯爵夫人(AdaAugustaLovelace)在帮助巴贝奇研究分析机时,指出分析可以向织布机一样进行编程,并发现进行程序设计和编程的基本要素,被认为是有史以来的第一位程序员,而著名的计算机语言Ada就是以此命名的。1980年,12月10日,美国国防部颁布Ada
(MIL-STD-1815)作为军用编程语言
,纪念Ada。
程序设计艺术在计算机中运行的程序是计算机指令序列集合,告诉计算机执行特定的任务。第一种形式是可执行程序(executable),是在计算机直接执行的指令集合;第二种是人可读的源代码,源代码可以转换出(例如,经过编译器)可执行的程序。程序设计是一种艺术。--创新性精美的算法和代码是计算科学工作者所追求的主要目标之一。在1968年之前,科学界认为计算机程序仅仅是一门“科学或艺术”。计算机程序的“科学和艺术”特征表现在其独创性,可重复地被使用;一个数学定理的第一次证明具有科学价值,随后的证明只具有学习价值了。程序的艺术价值计算机程序具备艺术创造性的特征,只有第一次的创造具有价值和成本,其后的复制几乎是无成本的。然而,与艺术品不同的是,复制的代码同样具有使用价值。实际上,人们创作计算机程序艺术品的目的是其使用价值,而非欣赏价值。书画的赝品/软件盗版和抄袭失去艺术价值软件必须创新用法、算法、界面等程序
软件1960年代,随着计算机硬件的批量生产,工业界和学术界认识到了计算机程序的工程和使用价值。一方面计算机机程序必须随着硬件一起销售,仅仅向客户提供硬件不足于支持计算机的使用,即,计算机程序具有复制价值;另一方面,计算机程序的开发过程不仅仅是上来就写程序,往往需要花费大量的时间搞清需求,花力气进行算法设计,在编程后还要对程序进行测试,以及向用户提供使用手册和文档,也就是说,计算机程序的是一种由多人合作、经历不同阶段的开发,且具有可复制和重复使用的器或件(ware)。Ware的概念—可以重复使用程序
软件程序
软件借助于器和件的概念,例如,瓷器(Chinaware)、铁器等概念。人们把计算的电子线路等人眼可见、占据物理空间的器或件称为硬件(hardware)。把计算机的程序和相关数据的集合,这些肉眼不可见的、逻辑器或件称为软件(Software)。软件是一个概念或逻辑实体,由计算机程序、过程和相关的操作文档组成。软件直接依靠硬件或依靠其他软件执行它所实现的程序功能。程序
软件软件(software)与硬件(hardware)直接对应。与硬件的物理实体相对比,软件是无形的(intangible),即,“不可触摸到的”。通常可以把软件分为两类:系统软件和应用软件。系统软件告诉计算机如何工作,应用软件告诉计算机如何完成用户特定的工作。软件具有其商业价值—与程序的区别
书画家是个人行为,编程序也是个体劳动但是,微软Windows8系统有3千多万行代码一个人或几个人如何做的出来?洛克希德公司,每个程序员每小时可生产2.5行代码。3千万行的代码,要多少人?多少年?才能生产出来。即使生产出来,能不能用?软件产品必然是一项人(脑)力密集的劳动,是工程行为软件工程概念如何管理白领密集型-软件工程
1960年代末多项大型软件以失败告终,例如:IBM公司的OS/360,美国空军的后勤系统(2.17亿美金),Univac联合航空订票系统(5600万美金)软件出现危机:OS/360负责人Brooks:“......像巨兽在泥潭中垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后......”。软件工程----软件危机软件工程----软件危机对于软件开发商的一些问题:手工作坊式的软件开发项目时间总是推迟,无法保证按期提交项目预算成倍超过项目人员不断流动
............软件工程----软件危机对于客户的问题:为什么项目要这么多费用为什么开发时间要这么长主要开发人员是否能得以保证提交的系统错误太多
............软件工程----软件危机上述问题主要原因是缺乏软件过程能力:开发过程随心所欲时间计划和费用估算缺乏现实的基础管理者主要在应付突发事件对产品质量缺乏客观基础软件开发的成败建立在个人能力基础上首次软件工程会议1968年NATO赞助的软件工程会在德国召开,与会学者和工业界的代表形成了一个会议总结报告,分别出从:1)软件工程与社会2)软件设计3)软件生产4)软件服务,以及5)特别专题等方面讨论了软件工程。在特别专题中提出了:a)软件面临的问题和可能解决方法,b)教育问题,c)软件价格问题。这次会议标志着从“计算机程序艺术”到“软件工程”观念上转变。BornofSoftwareEngineering人们相信,软件的设计、实现和维护,应当与传统工程的立足点是一样的。因此,1967年的NATO研究小组创立了“softwareengineering”这个术语“建造软件与其它工程任务是一样,这个观点得到了NATO在德国慕尼黑会议的肯定软件工程定义21软件工程定义
“软件工程”的概念是为了有效的控制软件危机的发生而被提出来的,它的中心目标就是把软件作为一种物理的工业产品来开发,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。软件工程时代的发展软件工程1.0软件工程2.0软件工程3.023软件工程1.0-传统软件工程产品化:过程决定结果:
阶段性明确,责任明确:文档化:计划性强注重项目管理24软件工程2.0-现代软件工程SaaS(软件即服务):以人为本:拥抱变化:持续性:融合:真正把用户放在第一位:强调价值交付知识管理25软件工程3.0-智能化软件工程数字化:AIGC:极致的持续交付:人机交互智能:以模型和数据为本26本章要点软件工程概述软件工程框架软件工程生存期模型软件工程知识体系复用原则27chapter__1软件项目过程顾客
顾客需求满意产品输入
输出产品实现?软件工程框架软件开发过程软件项目管理软件过程改进chapter__1软件开发
开发过程是软件人员生产软件的过程,例如需求分析、设计、编码、测试等,相当于生产线上的生产过程。软件项目开发路线图需求分析概要设计详细设计编码实施测试产品提交维护软件项目管理
管理过程是项目管理者规划软件开发、控制软件开发的过程,相当于生产线上的管理过程,管理过程是伴随开发过程进行的过程。
chapter__1软件项目管理路线图软件过程改进
过程改进相当于对软件开发过程和软件管理过程的“工艺流程”进行管理和改进,如果没有好的工艺生产不出好的产品,它包括对开发过程和管理过程的定义和改进。软件过程改进路线图启动诊断建立实施评估本章要点软件工程概述软件工程框架软件工程生存期模型软件工程知识体系复用原则36项目生存期的选择维度37项目生存期选择预测型:
提前进行大量的计划工作,然后一次性执行;执行是一个连续的过程。迭代型:
允许对未完成的工作进行反馈,从而改进和修改该工作。增量型:
向客户提供各个己完成的,可能立即使用的可交付成果。敏捷型:
既有迭代,也有增量,便于完善工作,频繁交付。38生存期的项目特征39预测模型40预测型-模型41瀑布模型V模型瀑布模型42需求分析设计编码实施测试维护适合瀑布模型的项目特征43很明确很明确短期项目等
需求方案
类似项目V模型chapter__144接收测试集成测试系统测试用户需求需求分析总体设计详细设计编码和调试集成测试单元测试适合V模型的项目特征45很明确很明确系统性能、安全等有严格要求等
需求方案
类似项目V模型案例chapter__146迭代模型47Or:原型模型原型模型48适合迭代模型的项目特征49不明确复杂性高变更频繁
需求项目
项目迭代模型应对产品内部因素的不确定50增量模型51
核心功能核心功能112123第一增量第二增量第三增量AnalyzeDesginBuildTestDeiveryAnalyzeDesginBuildTestDeiveryAnalyzeDesginBuildTestDeivery核心功能
112123……增量模型实例52增量模型应对产品外部因素的不确定53迭代模型与增量模型的对比54VUCA时代chapter__155敏捷开发(AgileDevelopment)chapter__156敏捷组织提出的一个灵活开发方法应对迅速变化需求的快速软件开发方法是一种迭代、循序渐进的开发方法“以快吃慢”的时代软件行业已经不再是“以大吃小”的时代了,而是转变成了“以快吃慢”的时代57价值驱动目标58敏捷是一种思维模式59它由《敏捷宣言》的价值观所界定,受《敏捷宣言》原则指导,并通过各种实践实现.敏捷宣言chapter__160chapter__161chapter__162技术发展也推动敏捷发展微服务DDD需求的实例化精简编码过程技术中台低代码。。。。。。63敏捷模型64敏捷模型:价值为中心65待开发功能发布
产品100%Tested优先级反馈发布计划阶段计划用户需求敏捷模型运行过程传统与敏捷模型67敏捷模型-敏捷实践的集合68持续交付Devops敏捷模型-重点掌握69敏捷模型Scrum+XPKanbanDevOpsScrum模型1990年代初,肯·施瓦伯在其公司使用了一种方法AdvancedDevelopmentMethods(先进开发方法),这种方法后来发展为Scrum.敏捷模型的代表.chapter__370Scrum模型:3-3-5-5核心要素
713个角色723个工件735个事件74TimeBox1-4week5个事件-4个会议755个价值观76XP(eXtremeProgramming)极限编程模型chapter__377XP(eXtremeProgramming)极限编程是由KentBeck提出的一套针对业务需求和软件开发实践的规则。XP(eXtremeProgramming)极限编程
---最佳实践chapter__178看板Kanban-实例79看板-kanban80看板-kanbanchapter__181DevOps:Development和Operations的组合全程敏捷思维开发和运维工作紧密合作。82运维人员和开发者之间的目标差异83DevOps:融合开发和运维的全程敏捷84DevOps:是一种方法论85DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合。持续交付(CI/CD)86持续集成持续交付持续部署CI(ContinuousIntegration,持续集成)/CD(Continuous
Delivery,持续交付/ContinuousDeployment,持续部署持续集成87持续交付88持续部署89本章要点软件工程概述软件工程框架软件工程生存期模型软件工程知识体系复用原则90SEWBOKchapter__192C-SEWBOK本章要点软件工程概述软件工程框架软件工程生存期模型软件工程知识体系复用原则93chapter__1复用原则
基于复用(重用)的软件工程是比较理想的软件工程策略,在开发过程中可以最大化重用已经存在的软件,尽管复用的效益已经被认可很多年,但是,只是近几年才渐渐将传统的开发过程转向复用的开发过程。复用可以降低软件开发和维护的成本,缩短开发时间,提高产品质量。chapter__195复用的主要方法小结chapter__196软件工程提出与发展软件工程的框架软件工程的模型软件工程知识体系软件工程理论与实践国家十二五规划教材软件工程理论与实践
第2章软件工程模型与方法问题域与解系统的关系软件建模软件工程方法软件模型-解系统模型信息模型:例如E-R图行为模型:例如控制流和数据流结构模型:例如类图、组件图100软件工程建模建模=图形+逻辑+现实的抽象,用图形逻辑地表达现实业务的抽象101建模-图DFD数据流图UML图102UML图示UML图示结构图类图对象图构件图包图部署图行为图用例图活动图状态图交互图103UML图的关系继承:子类继承父类的特性,有的语言仅支持单继承。实现:子类实现父类定义的接口。组合:一个类包含另外的类,但它强调的是一种强关联关系。聚合:也是表达一个类包含另外的类,但它的关联关系比组合要弱。关联:通过一个类可以关联到另外一个类,可分为单向关联和双向关联,一般以类的成员变量体现。依赖:比较弱的一类关联关系,一般是以接口参数的形式体现。104建模-现实的抽象建模是出于某种目的而概括地反映现实一类是直接映射:例如类往上抽象一层映射:例如父子节点的结构隐性抽象:例如新增加一层来实现解耦一样105建模-逻辑时间维度空间维度106时间维度一件事情节点完成之后,会影响后续的事情节点;在电商结算中,当订单支付成功后,结算收单,收单后接受到放款的执行指令,在放款之前需要计算出放款明细信息,如卖家应收到多少钱、公司应收到多少佣金等,最后是打款转账,这个过程就是按照时间节点不断往后驱动,可抽象出如下图的模型。107空间维度空间维度即是结构关系,比如下图中的组织结构,像这样的结构类型,我们还可以找到更多的实际案例,比如交易订单有主子订单结构,执行单包含多个执行明细信息,模型最终呈现出来的就是一个结构,从结构维度也可以将其分解出更小的粒度。108软件工程方法-解系统方法109面向过程(结构化)软件工程方法面向对象软件工程方法方法面向构件软件工程方法模型驱动软件工程方法结构化软件工程方法结构化软件工程过程需求分析概要设计详细设计编码测试维护结构化分析方法结构化分析方法是一种发展成熟、简单实用、使用广泛的面向数据流的分析方法,于20世纪70年代中期由E.Yourdon、TomDemarco等人提出,也称为E.YourdonTomDemarco方法。在结构化需求分析中主要解决的是“需要系统做什么”的问题。常用的描述软件功能需求的工具是数据流图和数据字典。chapter__0111结构化的概要设计结构化的概要设计是以模块化技术为基础的软件设计方法,以需求分析的结果作为出发点构造一个具体的软件产品。其主要任务是在结构化需求分析的基础上建立软件的总体结构,设计具体的数据结构,决定系统的模块结构,包括模块的划分、模块间的数据传送以及调用关系。在进行结构化软件设计时应该遵循的最主要的原理是模块独立。112结构化详细设计结构化详细设计是对概要设计进行进一步的细化,在概要设计基础上描述每个模块的内部结构及其算法,最终将产生每个模块的程序流程图。其目标是为软件结构图中的每个模块提供程序员编程实现的具体算法。113软件工程方法-解系统方法114面向过程(结构化)软件工程方法面向对象软件工程方法方法面向构件软件工程方法模型驱动软件工程方法面向对象软件工程方法115面向对象软件工程过程面向对象需求分析面向对象设计面向对象编程面向对象测试面向对象维护
面向对象分析(OOA)面向对象分析(OOA)强调直接针对问题域中客观存在的各种事物建立OOA模型中的对象。用对象的属性和服务分别描述事物的静态特征和行为。问题域有哪些值得考虑的事物,OOA模型中就有哪些对象。116面向对象设计(OOD)面向对象设计(OOD)是将面向对象分析所创建的分析模型转换为设计模型,是针对系统的一个具体实现运用OO方法进行设计的过程。OOD包括两个方面的工作:一方面是将OOA模型直接搬到OOD,即不经过转换,仅做某些必要的修改和调整;另一方面是针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。117面向对象编程(OOP)面向对象编程(OOP)的工作就是用一种面向对象的编程语言针对OOD模型中的每个部分编写代码。理论上来说,在OOA和OOD阶段对于系统需要设立的每个对象类及其内部构成(属性和服务)与外部关系(结构和静态、动态联系)都应有透彻的认识和清晰准确的描述。chapter__0118面向对象测试(OOT)面向对象测试(OOT)是指对于用OO技术开发的软件,在测试过程中继续运用OO技术进行以对象概念为中心的软件测试。119软件工程方法比较面向过程(结构化)软件工程面向对象的软件工程方法面向过程方法举例:五子棋游戏五子棋游戏的步骤如下:开始游戏,黑子先走,绘制画面,判断输赢,轮到白子,绘制画面,判断输赢,返回步骤2,输出最后结果。121面向对象方法举例:五子棋游戏黑白双方,这两方的行为是一模一样的;棋盘系统,负责绘制画面;规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。122软件工程方法-解系统方法123面向过程(结构化)软件工程方法面向对象软件工程方法方法面向构件软件工程方法模型驱动软件工程方法面向构件软件工程方法chapter__0124面向构件软件工程方法1.构件识别通过接口规约以及其他约束条件判断构件是否能在新系统中复用。2.构件适配针对不同的应用需求,用户可以选择独立开发构件或选择可复用的构件进行组装。3.构件组装构件必须通过某些良好定义的基础设施才能组装成目标系统。4.构件演化基于构件的系统演化往往表现为构件的删除、替换或增加,125软件工程方法-解系统方法126面向过程(结构化)软件工程方法面向对象软件工程方法方法面向构件软件工程方法模型驱动软件工程方法模型驱动开发方法MDE模型驱动开发或称模型驱动工程(Model-DrivenEngineering,MDE),是一种在软件开发的整个生命周期中以模型为核心工件的高级别抽象的开发方法,它使用软件模型完成软件的分析、设计、构建、部署和维护等开发活动。127MDA(model-drivenarchitecture)涵盖了一组实现MDD标准和工具的集合,定义了关于MDD软件开发方法的一种概念框架。MDA的目的是分离业务建模与底层平台技术,以保护软件建模的成果不受技术变迁的影响。chapter__0128MDA定义的三种抽象级别的模型①计算独立模型(Computation-IndependentModel,CIM):描述系统的需求和相关的系统业务上下文。此模型通常描述系统将用于做什么,而不描述如何实现系统。CIM通常用业务语言或领域特定语言来表示,仅当系统的使用是业务上下文的一部分时,才会非常有限地涉及系统的使用。②平台独立模型(Platform-IndependentModel,PIM):描述如何构造系统,而不涉及用于实现模型的技术。此模型不描述用于为特定平台构建解决方案的机制。PIM在由特定平台实现时可能是适当的,或者可能适合于多种平台上的实现。③平台特定模型(Platform-SpecificModel,PSM):从特定平台的角度描述解决方案。其中包括如何实现CIM和如何在特定平台上完成该实现的细节。129模型驱动软件龚程方法MDECIMPIMPSM代码chapter__0130软件工程技术总结比较131软件开发过程132软件开发路线图需求分析概要设计详细设计编码实施测试产品提交维护项目案例说明“多源异构灾情管理系统”项目(以下简称MSHD项目)为贯穿始终的案例,详细介绍这个项目案例的需求分析、概要设计、详细设计、编码实施、系统测试、软件交付、系统维护等过程。134小结软件工程模型与方法介绍软件工程理论与实践国家十二五规划教材软件项目开发流程图需求分析概要设计详细设计编码实施测试产品提交维护软件工程理论与实践
第3章软件项目需求分析类比建筑工程项目:沙盘模型chapter__2139需求管理中的问题举例需求的隐含错误140需求管理中的问题举例用户不断增加需求、变更需求chapter__4141项目失败的原因分析142No.
Top10Factors
平均值
1
Inadequaterequirementsspecification
不充分的需求规范
4.5
2
Changesinrequirements
需求的改变
4.3
3
Shortageofsystemsengineers
缺乏系统工程师
4.2
4
Shortageofsoftwaremanagers缺乏了解软件特性的经理人
4.1
5
Shortageofqualifiedprojectmanagers缺乏合格的项目经理
4.1
6
Shortageofsoftwareengineers缺乏软件工程师
3.9
7
Fixed-pricecontract固定价合同
3.8
8
Inadequatecommunicationsforsystemintegration系统集成阶段,交流与沟通不充分
3.8
9
Insufficientexperienceasteam团队缺乏经验
3.6
10
Shortageofapplicationdomainexperts缺乏应用领域专家
3.6
Scale:5=VerySerious3=Serious1=NoSerious
Source:Carnegie-MellonUniversity,SoftwareEngineeringInstitute本章要点软件需求定义需求管理过程传统需求建模方法敏捷需求建模方法案例分析143现实世界的问题域144软件需求定义需求是指用户对软件的功能和性能的要求。chapter__2145本章要点软件需求定义需求管理过程传统需求建模方法敏捷需求建模方法案例分析146项目失败的原因分析147No.
Top10Factors
平均值
1
Inadequaterequirementsspecification
不充分的需求规范
4.5
2
Changesinrequirements
需求的改变
4.3
3
Shortageofsystemsengineers
缺乏系统工程师
4.2
4
Shortageofsoftwaremanagers缺乏了解软件特性的经理人
4.1
5
Shortageofqualifiedprojectmanagers缺乏合格的项目经理
4.1
6
Shortageofsoftwareengineers缺乏软件工程师
3.9
7
Fixed-pricecontract固定价合同
3.8
8
Inadequatecommunicationsforsystemintegration系统集成阶段,交流与沟通不充分
3.8
9
Insufficientexperienceasteam团队缺乏经验
3.6
10
Shortageofapplicationdomainexperts缺乏应用领域专家
3.6
Scale:5=VerySerious3=Serious1=NoSerious
Source:Carnegie-MellonUniversity,SoftwareEngineeringInstitute项目需求管理将是重要技能借助AI技术,未来可以实现业务人员和AIGC的直接对话,就能生成业务所需的软件,不是经过程序员这层“翻译”。148软件需求定义需求是指用户对软件的功能和性能的要求。chapter__2149本章要点150一二三四软件需求管理过程传统需求建模方法敏捷需求建模方法案例分析软件需求管理的过程chapter__4151需求分析需求规格编写需求验证需求获取需求变更需求确认需求变更正确开发的前提是:知道要开发什么1、需求获取chapter__2152需求理解不同153需求获取的方法chapter__4154用户要求软件需求获取需求打破沟通墙155需求理解不同2、需求分析需求分析是为最终用户所看到的系统建立一个概念模型,是对需求的抽象描述。chapter__4157需求分析模型chapter__41583、需求规格编写需求分析工作完成的一个基本标志是形成了一份完整的、规范的需求规格说明书chapter__4159需求规格文档参考引言系统定义应用环境功能规格性能需求产品提交实现约束质量描述其它签字认证chapter__21604、需求验证需求是正确的吗?需求是一致的吗?需求是完全的吗?需求是实际可行的吗?需求是必要的吗?需求是可检验的吗?需求是可跟踪的吗?最后的签字chapter__41615、需求总在变化chapter__4162软件开发面临的挑战163需求变更管理确定需求变更控制过程建立变更控制委员会(SCCB)进行需求变更影响分析跟踪所有受需求变更影响的工作产品建立需求基准版本和需求控制版本文档维护需求变更的历史记录跟踪每项需求的状态衡量需求稳定性chapter__4164需求变更控制流程165变更申请需求方开发方忽略选择变更方式SCCB评估项目经理自行决定根据评估结果拒绝接受本次修改下个版本再修改修改合同相关信息修改相关需求修改相应的项目计划本章要点软件需求定义需求管理过程传统需求建模方法敏捷需求建模方法案例分析166需求建模的基本方法介绍传统方法:
原型方法基于数据流建模基于UML建模167chapter__2168传统需求建模的基本方法介绍原型方法基于数据流建模基于UML建模1691、原型方法170需求分析原型开发原型评价原型实例171传统需求建模的基本方法介绍原型方法基于数据流建模基于UML建模1722、基于数据流-结构化分析方法20世纪70年发展起来的面向数据流的方法是一种自顶向下逐步求精的分析方法根据软件内部数据传递、变换的关系进行分析的173基于数据流的技术数据流图(DFD)数据字典(DD)系统流程图174半形式化描述银行取款过程的数据流图175学生管理系统-数据流图-顶层176学管科体检科学籍科学生管理信息系统学生处领导学生基本信息学生健康信息学生成绩学生健康情况表学生成绩单查询要求不及格人数人数统计表学生管理系统-数据流图-0层chapter__2177学生管理系统-数据流图-1层chapter__2178学生管理系统-数据流图-1层chapter__2179学生管理系统-数据字典-数据流
学生基本信息:学号十姓名学生健康信息:学号十健康情况学生成绩:学号十{课程名+成绩}
查询要求:[健康查询单|平均成绩查询单l不及格人数查询]
学生健康情况表:优%十良%十一般%十差%学生成绩单:学号十姓名十{课程名+成绩}+总成绩不及格人数统计表:学号十成绩十不及格总人数180传统需求建模的基本方法介绍原型方法基于数据流建模基于UML建模181基于UML方法182基于面向对象的情景分析方法从用户角度出发考虑的功能需求用例是系统向用户提供一个有价值的结果的某项功能UML需求视图用例视图(UsecaseDiagram)顺序图(SequenceDiagram)状态图(StateDiagram)活动图(ActivityDiagram)183半形式化、形式化基于UML方法综述识别出系统的Actor描述需要的Usecase展示用例视图(必要时)展示顺序视图,活动视图,状态视图等184贸易链项目需求实例:角色保险、出口商、存储、海关、检查部门、进口商、贸易管理部门、税务、银行、运输185贸易链项目需求实例:角色186贸易链项目需求实例:主Use
case187贸易链需求实例:Usecase
188贸易链需求实例:-合同执行阶段189贸易链需求实例190贸易链需求实例chapter__2191贸易链需求实例-chapter__4192本章要点软件需求定义需求管理过程传统需求建模方法敏捷需求建模方法案例分析193chapter__4194影响地图(ImpactMapping)chapter__2195需求池Backlog196ProductBacklog:产品待办事项列表需求的来源包含产品想法的一个有序列表一个长短不定列表可以是模糊的或是不具体的逐渐完善,越来越明确chapter__4197真正使用的需求很少chapter__2198真正使用的需求很少199关注点不同200关注价值需求201价值举例(项目目标)202衡量价值的维度203204SprintBacklog:待办事项列表的细化按照迭代计划,逐步细化需求,形成Story(故事),鼓励开发人员、测试人员、业务分析人员和产品负责人合作编写故事,
确保所有的故事都足够小,可以持续交付工作。最好每天完成至少一个故事。205Backlog206RequirementsinAgileprocess
UserStoriesInAgileprocess,userrequirementsareexpressedasuserstories.chapter__4208UserStoriesUserstoriesareshort,simpledescriptionofafeatureTheytypicallyfollowasimpletemplate:Asa<typeofuser>,Iwant<somegoal>sothat<somereason>.chapter__4209半形式化UserStories210211212Story的AC验收标准213214兼容性---操作系统兼容性---运行环境鲁棒性-健壮性兼容性—语言用户故事作用215Gooduserstory?INVEST–Independent–Negotiable–Valuable–Estimatable–Small–Testable216StorycardsandstorywallUserstoriesareoftenwrittenonindexcardsorstickynotes,storedinashoebox,andarrangedonwallsortablestofacilitateplanninganddiscussion.Assuch,theystronglyshiftthefocusfromwritingaboutfeaturestodiscussingthem.Infact,thesediscussionsaremoreimportantthanwhatevertextiswritten.217chapter__4218Storywall219PrioritisationofstoriesUserstoriesmustbeprioritised.–Basedonbusinessvalue–Valuemustalsobesupportedbyapositivereturnoninvestment(ROI)–ConsiderationoftherisksThecustomerchoosesthestoriesforinclusioninthenextreleasebasedontheirprioritiesandthescheduleestimates.
220221MoSCoW比喻222MoSCoWExamplePaymentprocessingstory:–Musthave:abilitytoacceptVisaandMasterCard.–Shouldhave:addAmericanExpress.–Couldhave:addPayPal.–Wanttohave:addgiftcards.223BDD(BehaviorDrivenDevelopment行为驱动开发)224需求实例化工具Given-When-ThenBDD使用一种简单的语法格式称为GherkinGIVEN<asituation>WHEN<anevent>THEN<expectedresult>225BDD场景实例:加法226BDD优点与开发联动与测试联动利用工具进行度量活文档直接作为AC关注行为227本章要点软件需求定义需求管理过程传统需求建模方法敏捷需求建模方法案例分析228需求分析229多源异构灾情管理系统(简称:MSHD)迭代式完成系统用例图230用户故事分解chapter__2231用户地图chapter__2232用户故事233需求管理-小结软件需求管理过程需求获取需求分析需求规格编写需求验证需求变更需求建模的基本方法原型方法基于数据流建模-结构化分析法基于UML建模-面向对象的用例分析法敏捷需求分析chapter__3234本章小结–核心之“道”传统需求管理前提:需求比较稳定描述方法:数据流、UML等管理:需求变更管理流程敏捷需求管理前提:需求不稳定描述方法:UserStory等
管理:优先级迭代式管理chapter__3235软件工程理论与实践国家十二五规划教材软件项目开发流程图需求分析概要设计详细设计编码实施测试产品提交维护软件工程理论与实践
第4章软件项目概要设计本章要点软件设计概念架构设计模块设计数据设计界面设计结构化设计与面向对象设计案例分析239软件设计的定义
软件设计解决的是“怎么做”的问题。软件设计是将需求描述的“做什么”问题变为一个实施方案的创造性的过程。
设计原则高内聚松耦合单一职责原则(SRP:SingleResponsibilityPrinciple)开放-封闭原则(OCP:Open/ClosedPrinciple)Liskov替换原则(LSP:Liskovsubstitutionprinciple)接口隔离原则(ISP:InterfaceSegregationPrinciple)241设计模式结构模式行为模式创建模式242软件概要设计243体系结构设计
模块设计数据设计接口设计本章要点软件设计概念架构设计(体系结构设计)模块设计数据设计界面设计结构化设计与面向对象设计案例分析244架构设计-体系结构设计一个系统的基础组织,包含各个构件之间、构件与环境之间的关系,还有指导其设计和演化的原则。主要的体系结构单体架构(H/T体系结构)客户服务架构 分层架构 分布式架构 SOA(面向服务的体系结构) 微服务架构 领域驱动设计 整洁架构 插件架构 无服务(Serverless)架构 云原生架构 面向工作流引擎 主机/终端体系结构247C/S体系结构248B/S软件体系结构249分层架构chapter__0250分布式架构在分布式软件架构中,中介模式负责客户组件和服务器组件之间的解耦,在组件之间加入中介作为中间层,客户组件和服务器组件只可以通过中介通信。CORBACORBA是一种规范,它定义了分布式对象如何实现互操作。简单地说,CORBA允许应用之间相互通信,而不管它们存在于哪里以及是谁设计的。J2EEJ2EE是Sun公司开发的一组技术规范与指南,其中包含的各类组件、服务架构及技术层次均有共同的标准及规格,因此各种依循J2EE架构的不同平台之间存在良好的兼容性,解决了过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的问题。chapter__0251J2EE252SOA253微服务架构chapter__0254领域驱动设计255BPM256云架构257无服务架构设计258应用程序框架结构应用程序框架结构是一个可以重复使用的,大致完成的应用程序。可以通过对其进行定制开发成一个客户需要的真正的应用程序。应用程序框架前台框架:
Vue,
bootstrap,
javascript,Html5,
jquery,ajax,React.js,Angular.j等业务框架Spring,Severlet,Structs2,SpringBoot,SpringCloud数据框架Hibernate,
Mybatis,。。。整个框架(PythonWeb)Django,
Flask。。。组合框架SSH,
SSM,。。。260应用程序框架结构-例如SSHchapter__0261应用框架的系统chapter__0262本章要点软件设计概念架构设计模块设计数据设计界面设计结构化设计与面向对象设计案例分析263类比:构件(模块)设计构件(模块)设计构件(模块)设计的最终目的是将数据模型、架构模型、界面模型变为可以操作的软件。
构件设计的分解过程构件(模块)设计--例子模块设计的基本原则模块独立性高内聚松耦合268内聚度偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚269耦合度独立耦合数据耦合控制耦合公共耦合270本章要点软件设计概念架构设计模块设计数据设计界面设计结构化设计与面向对象设计案例分析271类比:数据结构设计数据库设计273概念数据模型设计物理数据模型设计物理数据模型设计概念数据模型E-R图示275逻辑数据模型chapter__32760..*11..*10..11物理数据模型chapter__3277物理数据库表—关系图示本章要点软件设计概念架构设计模块设计数据设计界面设计结构化设计与面向对象设计案例分析279类比:界面设计用户界面设计是为人和计算机之间创建一个有效的沟通媒介
界面设计过程界面设计界面实现用户、任务、环境分析建模界面验证界面设计基本原则简易性一致性人性化界面设计-“黄金原则”控制用户的想法尽可能减少用户记忆量界面最好有连续性界面流—采用AxureRP工具界面流界面流界面流界面流界面流界面流界面流本章要点软件设计概念架构设计模块设计数据设计界面设计结构化设计与面向对象设计案例分析292结构化的设计方法面向变换流与事务设计功能模块划分设计输入/输出设计变换流和事务流设计294功能模块划分设计
这个设计方法是根据功能进行分解,分解出一些模块,设计者从高层到低层一层一层进行分解,每层都有一定的关联关系,每个模块具有特定、明确的功能,每个模块的功能是相对独立的,同时是可以集成的模块层次图296模块结构图chapter__0297数据流到结构图298输入/输出设计chapter__0299面向对象的架构体系
面向对象的体系结构,在构造模块的时候是依据抽象的数据类型,每个模块是一个抽象数据类型的实例。面向对象的设计方法
面向对象的设计(OOD)是将面向对象分析方法建立的(需求)分析模型转化为构造软件的设计模型。
面向对象的设计步骤识别对象确定属性定义操作确定对象之间的通信完成对象定义1识别对象识别对象首先需要对系统进行描述,然后对描述进行语法分析,找出名词或者名词短语,根据这些名词或者名词短语确定对象对象可以是外部实体(externalentities)、物(things)、发生(occurrences)或者事件(events)、角色(roles)、组织单位(organizationalunits)、场所(places)、结构(structures)等。3031识别对象—例子家庭安全系统---潜在的对象房主传感器安全系统控制板监控服务……….3042确定属性找出对象的一组有意义的属性研究系统描述,选择合理的与对象相关联的信息。
3052确定属性—例子对象“安全系统”的属性传感器信息=传感器类型+传感器编号+警报临界值报警响应信息=延迟时间+电话号码+警报类型起动/撤销信息=主口令+允许尝试的次数+暂时口令标识信息=系统表示号+验证电话号码+系统状态3063定义操作一个操作以某种方式改变对象的一个或者多个属性值----研究系统的需求描述,选择合理的属于对象的操作进行语法分析,隔离出动词,某些动词是合法的操作,很容易与某个特定的对象相联系
3073定义操作—例子传感器被赋予一个编号和类型”“设置一个主口令使系统处于警报状态或警报解除状态”。3084确定对象之间的通信对象之间必须建立一种通信机制,即消息要求一个对象执行某个操作,就要向它发送一个消息,告诉对象做什么。
3095完成对象定义Object:SystemSystemIDVerificationphonenumberSystemstatusSystemtableSensortypeSensornumberAlarmthresholdAlarmdelaytimeTelephonenumber(s)AlarmtypeMasterpasswordTemporarypasswordNumberoftries
ProgramDisplayResetQueryModifyCall
310敏捷设计思路敏捷设计是一个过程,是持续应用设计原则,保持设计的干净、整洁,不允许软件有腐化的味道311本章要点软件设计概念架构设计模块设计数据设计界面设计结构化设计与面向对象设计案例分析312MSHD项目概要设计313架构设计模块设计数据库设计界面设计微服务架构314模块设计chapter__0315数据设计—概念模型316数据设计—逻辑模型设计317界面设计chapter__0318小结319体系结构设计构件设计数据设计界面设计面向过程与面向对象设计方法软件工程理论与实践国家十二五规划教材软件项目开发流程图需求分析概要设计详细设计编码实施测试产品提交维护软件工程理论与实践
第5章软件项目详细设计类比:详细设计详细设计内容chapter__5324构件(模块)描述算法描述
数据描述
详细设计本章要点详细设计的表示工具结构化详细设计面向对象详细设计敏捷化的整洁设计案例分析325详细设计工具程序流程图的表示方式N-S图描述算法PAD图描述算法表格的设计方式过程设计语言PDL伪代码326程序流程图的表示方式327某报表模块的详细设计流程图328N-S图描述算法329N-S图例子330PAD图描述算法331表格的设计方式-决策表描述不同条件集合下采取行动的若干组合的情况条件桩条件条目行动桩行动条目指定所有输入可能满足的条件指定可能发生的不同行为的集合决策表(判定表)实例C1:a、b、c构成三角形C2:a=b?C3:a=c?C4:b=c?A1:非三角形A2:不等边三角形A3:等腰三角形A4:等边三角形A5:不可能NXYyyyXYyyNXYyNNXYyNYXYNNNXPDL本章要点详细设计的表示工具结构化详细设计面向对象详细设计敏捷化的整洁设计案例分析335结构化的详细设计方法Jackson方法Warnier方法
JSD使用的结构表示法337JSD开发步骤338列出和分配可执行操作数据结构化表示找出输入与输出数据结构的对应关系确定程序结构Warnier方法339Warnier方法340面向结构(过程)详细设计例子341本章要点详细设计的表示工具结构化详细设计面向对象详细设计敏捷化的整洁设计案例分析342面向对象详细设计组成类关系的设计类的详细设计包的设计343类关系设计344类详细设计的例子345一个类的详细描述packagecom.buptsse.spm.action;publicclassMessageActionextendsActionSupport{ /** *查询所有的留言内容 *@return *@throwsException */ publicStringfindMessageList();/** *增加留言方法 *@return *@throwsException */ publicStringinsertMessage(); /** *删除留言方法 *@return *@throwsException */ publicStringdeleteMessage();}346一个方法的设计:
publicStringinsertMessage()方法的流程图347某“登录模块”详细设计348表现层349控制层350业务逻辑层351数据持久层352域模型层353本章要点详细设计的表示工具结构化详细设计面向对象详细设计敏捷化的整洁设计案例分析354敏捷化的整洁设计整洁设计基于TDD的详细设计355整洁设计规则一:运行所有的测试。规则二:持续重构。规则三:不可重复。chapter__0356基于TDD的详细设计TDD的三定律如下:除非为了使一个失败的单元测试通过,否则不允许编写任何产品代码;在一个单元测试中只允许编写刚好能够导致失败的内容;只允许编写刚好能够使一个失败的单元测试通过的产品代码。357基于TDD的详细设计测试用例可以作为详细设计的输出358本章要点详细设计的表示工具结构化详细设计面向对象详细设计敏捷化的整洁设计案例分析359数据管理模块详细设计360数据管理模块详细设计361小结362详细设计概念面向过程详细设计面向对象详细设计软件工程理论与实践国家十二五规划教材软件项目开发流程图需求分析概要设计详细设计编码实施测试产品提交维护软件工程理论与实践
第4章软件项目编程类比:项目编码实施编程范式367编程语言的进化chapter__0368本章要点结构化编程面向对象编程编程模式与策略敏捷编程实践开发规范(标准)项目案例369结构化(面向过程)编程chapter__0370结构化编码控制结构算法数据结构控制结构371算法算法与具体的程序设计语言无关,算法的具体实现就是程序。-372-算法构成构成一个算法的5要素
1)输入
2)输出
3)有穷性
4)确定性
5)可行性-373-TuringmachineATuringmachineisahypotheticalmachinethoughtofbythemathematicianAlanTuringin1936.Despiteitssimplicity,themachinecansimulateANYcomputeralgorithm,nomatterhowcomplicateditis!图灵机是数学家艾伦·图灵在1936年提出的一种假设机器。尽管它很简单,但这台机器可以模拟任何计算机算法,不管它有多复杂!chapter__0374Computingchapter__0375如何评价一个算法?1)正确性2)鲁棒性(健壮性)3)可读性4)简单性5)高效性6)抽象性7)可维护性8)兼容性-376-如何度量一个算法的效率?
1)时间效率使用时间复杂度来计算
2)空间效率使用空间复杂度来计算
一般采用上述两种方法对算法进行事先估算来进行评价。-377-时间复杂度频度:每条语句执行的次数时间耗费:所有语句执行次数的总和-378-时间耗费计算求下面这段代码的时间耗费(n>0)?for(inti=0;i<n;i++)n+1for(intj=i;j<n;j++)n*(n+3)/2 x++;n*(n+1)/2
2026/9/1-379-时间耗费:
T(n)=n2+3n+1时间复杂度时间复杂度T(n)本质:所有语句频度之和,一般为问题的规模的函数记作:T(n)=O(f(n))n->无穷大表示:随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。
例如:
limT(n)/n2=lim(n2+3n+1)/n2=1说明T(n)和n2是同价的,记作O(n2).-380-时间复杂度x=x+1;
for(inti=0;i<n;i++)x++;
for(inti=0;i<n;i++)for(intj=0;j<m;j++)x++;
for(inti=1;i<n;i=2*i)
++x;-381-O(1)O(n)O(n*m)orO(n2)O(log2n)空间复杂度算法在执行过程中,需要的辅助空间的数量。辅助空间是指除了算法本身和输入和输出以外临时开辟的空间。也是问题规模n的函数,计算方法与时间复杂度类似。-382-软件(程序)复杂度软件(程序)复杂度是软件的一组特征,它由软件内部的相互关联引起。随着软件的实体(模块)的增加,软件内部的相互关联会指数式增长,直至无法被全部掌握和理解。软件的高复杂度,会导致在修改软件时引入非主观意图的变更的概率上升,最终在做变更的时候更容易引入缺陷。在更极端的情况下,软件复杂到几乎无法修改。在软件的演化过程中,不断涌现了诸多理论用于对软件复杂度进行度量,比如,Halstead复杂度、圈复杂度、JohnOusterhout复杂度等等。chapter__0383Halstead复杂度Halstead复杂度(霍尔斯特德复杂度量测)(MauriceH.Halstead,1977)是软件科学提出的第一个计算机软件的分析“定律”,用以确定计算机软件开发中的一些定量规律。Halstead复杂度根据程序中语句行的操作符和操作数的数量计算程序复杂性。384运算子与运算元385程序复杂性指标386计算这个程序的复杂度387统计运算子和运算元388计算复杂度指标如下chapter__0389Halstead方法优点不需要对程序进行深层次的分析,就能够预测错误率,预测维护工作量;有利于项目规划,衡量所有程序的复杂度;计算方法简单;与所用的高级程序设计语言类型无关。390Halstead方法的缺点仅仅考虑程序数据量和程序体积,不考虑程序控制流的情况;不能从根本上反映程序复杂性。给我的直观感受是他能够对软件复杂性进行度量,但是很难讲清楚每一部分代码是好还是坏。391圈复杂度(Cyclomaticcomplexity)圈复杂度(Cyclomaticcomplexity)是一种代码复杂度的衡量标准,在1976年由ThomasJ.McCabe,Sr.提出。在软件测试的概念里,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数,即合理的预防错误所需测试的最少路径条数。圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系,一般来说,圈复杂度大于10的方法存在很大的出错风险。392McCabe计算方法计算公式1:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。计算公式2:V(G)=区域数=判定节点数+1。圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数。计算公式3:V(G)=R。其中R代表平面被控制流图划分成的区域数。393McCabe计算方法(三种)(1)控制流图中区域的数量对应于环形复杂度(2)给定控制流图G的环形复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中节点的数量。(3)V(G)=P+1,P是流图G中的判定节点数。394图中的圈复杂度,计算如下:流图中有四个区域;V(G)=10条边-8结点+2=4;V(G)=3个判定结点+1=4。McCabe计算方法(三种)上述代码程序的圈复杂度画出流程图如下,通过计算得出其圈复杂度为4396圈复杂度与代码质量关系397JohnOusterhout的复杂度定义JohnOusterhout(约翰欧斯特霍特),在他的著作《APhilosophyofSoftwareDesign》中提出,软件设计的核心在于降低复杂性。他选择从认知的负担和开发工作量的角度来定义软件的复杂性,并且给出了一个复杂度量公式:398本章要点结构化编程面向对象编程编程模式与策略敏捷编程实践开发规范(标准)项目案例399面向过程与面向对象编程的对比400OO编程结构401面向对象与数据结构面向对象的编程语言最大的特色就是可以编写自己所需的数据类型数据结构与面向对象具有天然的对应
本章要点结构化编程面向对象编程编程模式与策略敏捷编程实践开发规范(标准)项目案例403面向组件编程(COP)组件(component):实现了一组服务Spring框架中就采用了COP的思路,将系统看作一个个的组件,通过定义组件之间的协作关系(通过服务)来完成系统的构建。404面向服务编程面向服务以服务为出发点,组织和协调相关的对象来提供目标服务,对外提供必要的参数输入接口,将服务的结果作为输出,而“服务”本身的计算过程和组织则被封装在一起,对用户透明。405面向切面编程406低代码开发平台低代码开发平台是一种aPaaS(ApplicationPlatformasaService),它是仅需少量编码甚至无需编码(0代码)即可快速通过可视化拖拽(drag&drop)的方式完成应用程序开发的平台。该名词最早于2014年6月由ForresterResearch最先提出。407低代码开发平台特点:可视化集成开发环境(VisualIDE);大量可重用且支持拖拽的组件(drag&drop)等等408低代码模式409编码策略自顶向下自底向上自顶向下和自底向上相结合线程410本章要点结构化编程面向对象编程编程模式与策略敏捷编程实践开发规范(标准)项目案例411重要敏捷实践TDD(测试驱动的开发)Refactor(重构)简单设计结对编程412TDD+Refactor:红绿蓝循环红-绿-蓝循环之红震情编码单元-测试用例chapter__0414红-绿-蓝循环之绿415红-绿-蓝循环之绿执行测试用例,测试通过(绿,单元代码测试通过416图红-绿-蓝循环之蓝(重构)chapter__0417重构前后代码质量对比418整洁代码-
Clean
Code整洁代码-
Clean
Code开发规范介绍----SPM命名规范格式规范声明规范语句规范注释规范开发目录规范版本管理规范开发规范文档本章要点结构化编程面向对象编程编程模式与策略敏捷编程实践开发规范(标准)项目案例423MSHD项目案例–编码构建开发环境编码交付424编码标准和规范425开发环境426TDD&Refactor开发模式427基本震情编码模块为例1、编写测试用例chapter__04282、执行测试用例,测试失败(红)chapter__0429)3、根据测试用例编写单元代码4304.再次执行测试用例,测试通过(绿)4315.重构代码重构if-else,简化判断逻辑。chapter__04326、重构代码质量的提升433小结434面向过程编码面向对象编码编码模式与编码策略敏捷实践软件工程理论与实践国家十二五规划教材软件项目开发流程图需求分析概要设计详细设计编码实施测试产品提交维护软件工程理论与实践
第7章软件测试-测试概述类比:测试什么是测试?
为了发现软件系统的错误而执行的过程。破坏的过程软件测试是质量控制的重要手段chapter__7定义:什么是测试?
(4195835/3145727)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电器附件装配工安全防护知识考核试卷含答案
- 无机盐生产工技能安全竞赛考核试卷含答案
- 野生动物疫病防治工工艺规程能力考核试卷含答案
- 超重型汽车列车挂车工岗中安全生产规范考核试卷含答案
- 钼钨冶炼辅料制备工持续改进模拟考核试卷含答案
- 乙丙橡胶装置操作工改进能力考核试卷含答案
- 社会体育指导员安全强化评优考核试卷含答案
- 小学一年级浙教版认识人民币应用题专项卷
- 2026年西师版小学四年级英语上册Module5《CanSamplayfootball》Unit2教案
- 2026年小学成语故事《胯下之辱》隐忍励志教学设计教案
- 员工离职离开协议书
- 《税收征收管理法》课件
- 2019配电网工程典型设计电缆分册
- 安宁疗护中的营养支持措施
- 《社会调查》课件
- 股权投资入股协议书范本
- 中小学生预防校园暴力主题班会《做一个品德优良的学生》课件
- DB44-T 2508-2024 自助加油站建设及管理规范
- GB/T 4008-2024锰硅合金
- 高教社杯全国大学生数学建模竞赛A题 葡萄酒的评价
- 第七章 固体表面化学
评论
0/150
提交评论