EBU6304 Software Engineering 知识点总结_5 项目管理_上

Software architecture

功能需求和软件架构关系紧密,非功能需求是软件架构的选择结果(好的架构运行效率高之类的)。可以以表格或图的形式,比如UML图。

设计难以更改。敏捷开发的早期阶段就是设计系统架构。

好处:

  • system analysis:利于分析系统是否满足非功能需求。
  • large-scale reuse:架构可重用,更安全、更快。
  • Stakeholder communication:可以 成为一个讨论点。

Project management

让项目能在有限的时间和预算范围内按预期保质落地。

软件工程比较灵活,没有标准的完全正确的方案,需要随机应变,敏锐的洞察力。

Project planning

最耗时的环节。

计划只有在项目完成时才算完成,因为计划在项目开发阶段也不断变化。

计划可能包括多种,如质量计划,员工开发计划……

Activity organisation

活动应该组织成切实的输出以及可以判断的进度。

milestone:标志阶段的结束,不一定是能输出给用户的成果。比如文档,或者逻辑阶段的结束。

Deliverables:可以交付给用户的设计,规格等成果。

image-20230602221047262

Project scheduling

估计项目时间预算的花费,并按顺序排布。

比较难估计。通常根据过往项目经验估计。

先把大项目分解为几个小项目,然后并发的组织任务——尽可能充分利用劳动力 workforce,以及 Minimise task dependencies 尽量减少因为前面的任务没完成对后面任务的延误。

要对错误有预期,没错误是不可能的。约30%预料到的问题+20%未预料到的问题。

通常用图表表示:

任务表:

1685724379869

活动网:最长的是关键路径,因为这条路径任务要是延期了,整个工期都要延期。

1685724395138

甘特图:

1685724424966

Monitoring/Reporting:定期周会周报监督进度。

Metrics

代码行数,代码中的缺陷,测试用例通过情况。

People in the process

选择成员,管理,激励他们,解决大家遇到的技术和非技术问题。

  • Consistency:对大家态度一致。
  • Respect:大家拥有技能不同,互相尊重。
  • Inclusion:让大家都参与进项目,聆听所有人的意见。
  • Honesty:进度保持诚实。

Group working

不仅仅是个人的集合。团队能力的组成,凝聚力,沟通,大型团队的层次结构。

敏捷开发的团队合作方法:Scrum approcah,有一个Scrum master,日会,跟随进度,记录决策,和客户等沟通。

项目被分解为易于管理和理解的小部分。不稳定的需求不影响项目进度。团队成员对项目把控更到位 visibility,客户能常常看到项目进度,双方交流更相信彼此。

Risk management

失败是常有的事。我们要做好备选方案,推迟时间或者放弃目标。

风险管理是预测可能的失败,决定该在什么地方制定备选方案 alternative plans 。

Project risks:项目开发或者资源的问题。比如项目员工走了;原材料没法及时收到了;项目要求时间提前了。

Product risks:产品质量和性能的问题。比如开发软件出bug了,开发出的软件质量不行,用户对gui不满意,有没考虑到的错误。

Business risks:开发,采购组织的问题。比如上市了发现其他公司的技术,竞品比我们的好;负责该系统的组织因财务原因倒闭了。

Project+Product:需求一直变;分析阶段太慢了;开发团队技能能力不行;项目比预想的要大。

Risk Identification

识别风险。

Risk Analysis

评估风险的影响。

Risk Planning

制定应对风险的计划。

Risk Monitoring

在项目开发过程中监控风险。

Avoidance Strategies

尽量使用熟悉的模式,但是也接受新技术,时刻关注市场动向;

对员工合理培训,确保技术没被掌握在一个人手中;创造良好的工作环境;

员工不要欺瞒进度,高管要时刻了解进度以及其对项目的重要性。

Contingencies 突发事件

换人,换工具,换资源。

改变,舍弃一部分目标。

争取做的改动最小,但是损失也降到最小。

我们知道敏捷开发持续提交小版本,因此经常进行测试修改当阶段错误。但是缺陷在于敏捷开发不注重长远眼光 long term planning,因此可能带来一些问题。

Quality Management

对质量的评估,最好从软件开发过程中抽离出来。因为开发的过程会错误影响开发者自己对质量的评估(我都这么努力了,做出来的东西肯定很好吧)。

瀑布模型中在系统实现后单独测试软件质量。敏捷开发在每次发布新版本的时候测试。因为主要是在实际使用场合的测试,因此会比“为了达成测试而开发”的系统想的更多一些。

好的软件符合目的 Fitness for purpose,标准好,易于使用,高效,代码写的好(当然从用户角度来说他看不到这一层。但是代码写得好是前提,比如时间复杂度运行得快)。开发者需要考虑用户的需求前提下,自己用专业知识思维去想:这个需求实现合理吗。然后多喝用户沟通表达看法。

区分bug和特性:正常运行的是特性。有的时候哪怕系统除了意想不到的bug,但是功能意外的很合适,这也可以是特性。

特性很难移除,当用户开始依赖特性功能的时候,移除用户可能不乐意不习惯;而且向后(版本)兼容变得很难。

软件标准有很多好处,新员工快速入手,大家更熟悉项目等,但是标准可能对一些过去常常发生而现在不怎么出现的问题采取忽略的态度,从而兼容性上出现问题;而且可能浪费很多时间填文书。注重标准好的部分。

Design principle

设计的软件不仅要正确,高效运行,还要在限定时间,人力,软件,经济条件下。差代码后期可能要花很多时间弥补隐患;而且不同模块的代码经常交互,差代码还会有安全隐患。

我们仅仅想着怎么“正确”地编写代码是不够的,还要更省事省力地去开发。

Software lifespan:软件生命周期,软件是一直在持续开发的,比如新技术,客户新需求。

Software scale:项目大多数规格很大,很多人开发,代码多,多次修订。

Decomposition:项目分解为小模块开发。有Locality(实现一个模块可以不用检查其他模块的实现)和Modifiability(修改一个模块也不用考虑用使用这个模块的模块)的特点。

Specification and implementation:规范连接了设计和实现,规定了模块应该提供哪些服务以及如何使用服务。模块之间的交互应该仅仅限于规范,以此实现分解后模块的locality和modifiability。

Classes and Methods:面向对象思想中的模块为类。

Separation:分开考虑一个模块要实现的功能what和如何实现how。一个应用程序级别,一个实现级别。

Splitting Methods and Classes:设计方法和类的时候好好考虑如何拆分方法和类。类太大了考虑一下要不要拆,几个变量模式比较常用考虑一下要不要抽象成类。

Helper Methods and Classes:有一些方法和类只是为了抽象出来辅助拆分代码用的,这种一般是私有的helper method和嵌套的nested class,只在特定类里起作用,对其他类是private的。

Reuse:用以前的代码重复实现功能,节约代码,而且一改全改。重用代码可能厂商提供,编程语言提供,早期开发者开发。

Abstraction and generalisation:抽象是提取一些概念,比如接口,类;泛化是提取一些重复元素,以便代码重用,比如父类。

UML class diagrams:比代码更高的层次,是面向对象编程很重要的内容。

Static v. Dynamic:匹配静态内容和代码运行时产生的内容。对应UML中的类图 class diagram 和顺序图 sequence diagram。

图源:UML类图与顺序图_顺序图和类图的关系_lingchen336的博客-CSDN博客

img

img

class and objects:类和对象。对象是类的实例 instance。两者关系很像static 中的method和动态中的method call。

static:静态方法只能被类自己和其附加类调用。静态类实例化的对象是只有一个通用的对象,而不是实例化出无数个对象。

Variables and referencing:java中变量是对对象的引用,比如var2=var1不是赋值而是改变var2指向var1的引用。包括一个变量的自带方法的

image-20230603233317997

1685806438306

Scope and garbage collection:对象的作用域只要有变量还在引用这个对象,他就活着。没有人引用的时候就自动垃圾回收。

基本设计原则:设计对象指代目标;对象方法指代其能做的操作;Locality和Modifiability;对象只能通过方法调用交互。

Client-Contractor model:一种思想,一个对象调用其他对象的方法得到返回值来使用它,像客户和承包商一样。现代社会大进步的原因就是大家各专其职,因此项目中各个类各专其职也能在同样的量的前提下发挥更多的作用。

  • 客户给承包商的合同就类似定义类和方法的规范specification。代码编写者有义务Obligations拿了钱benefits,就确保软件正确执行,不做破坏的事等。

  • Design by Contract:一种思想。客户端代码应当满足承包商的先决需求pre-conditions;应当对异常做处理(exception);后置条件post-conditions在测试中作为断言assertions合并到程序中。(前置条件:前提;后置条件:方法运行后的状态)

Single Responsibility Principle (SRP)

单一责任原则:每个类有一个职责 responsibility,其所有对象都服务于这个职责。Leads to highly cohesive 内聚性高

Open-Closed Principle (OCP)

开放闭合原则:模块(类和方法)open to extension,close to modification 可以对外扩展,但是不能让外界修改。比如一个类以不同对象形式表现这就是扩展,因为需求改变或者有新需求。

Do not Repeat Yourself principle (DRY)

不要复读机原则(不要重复自己原则)。本模块中如果发现重复内容,建议再抽象为方法和类。

**Liskov Substitution Principle (LSP) **

Liskov替代原理:重写方法,不应该抱着”修改其方法“的想法。不能加强 strengthen 前置条件,不能削弱 weaken 后置条件。

比如父类people方法AddPeople(String name, int age) 子类Student构造方法AddPeople(String name, int age)里先校验一下学生年龄,如果年龄大于25岁则不允许add,这就修改了原来方法。这就是前置条件加强了,要求年龄的限制多了。

后置条件比如原来返回值大于0,现在返回值可以小于0了,那么返回值限制弱了,后置条件削弱了,不满足里氏原则。

参考:设计模式六大原则(二)----里式替换原则 - 盛开的太阳 - 博客园 (cnblogs.com)

Association, Aggregation and Composition:association是两个不同东西的对应,比如家长和孩子。另外两个是子集,aggregation是彼此可以独立存在,比如班级和学生。composition是可以彼此独立存在,比如house和room。

1685957816284

有的时候继承满足不了LSP(比如令正方形为矩形的子类),可以使用聚类来防止破坏LSP。

Interface-Segregation Principle (ISP)

接口隔离原则:首先接口应该尽量分解为小接口。客户端每个类不应该依赖他不使用的方法。就是接口用啥实现啥,别多实现。

Dependency-Inversion Principle (DIP)

依赖倒置原则:

如果高层模块直接调用低层模块提供的服务,那么就是具体耦合关系,这样高层模块依赖于低层模块就不可避免。但是,如果我们使用抽象耦合关系,在高层模块和低层模块之间定义一个抽象接口,高层模块调用抽象接口定义的方法,低层模块实现该接口。这样,就消除了高层模块和低层模块之间的直接依赖关系。现在,高层模块就不依赖于低层模块了,二者都依赖于抽象。同时也实现了“抽象不应该依赖于细节,细节应该依赖于抽象”。

面向对象基础设计原则:4.依赖倒转原则 - 知乎 (zhihu.com)

img

依赖倒置原则(Dependency Inversion Principle) - sangmado - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/354255.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

OGL(教程16)——基础贴图映射

原文地址:http://ogldev.atspace.co.uk/www/tutorial16/tutorial16.html 背景知识: 贴图的映射的意思是应用任何类型的图到3D模型的多个面上。这个图叫做纹理,它可以是任何东西。如砖头、树叶、贫瘠的土地,使用这些贴图增加场景的…

【UE4】官方课程笔记

【UE4】官方课程笔记 Blueprint Project Config project-specific settings Content content folder Intermidiate 可删除,暂时性文件 Saved 一旦删除不可恢复的文件 DDC DRIVE DATA CACHE C Project .sln文件 可删除,再次打开时recreated Sourc…

shader graph_在Shader Graph中使用表面梯度框架进行法线贴图合成

shader graph A recent Unity Labs paper introduces a new framework for blending normal maps that is easy and intuitive for both technical artists and graphics engineers. This approach overcomes several limitations of traditional methods.

OpenGL学习笔记(四)-光照-材质-光照贴图

参考网址:LearnOpenGL 中文版 哔哩哔哩教程 第二章 光照 2.1 颜色 现实生活中人眼看到某一物体的颜色,是它所反射的颜色。如将白光照在红色的玩具上,玩具会吸收白光中除了红色以外的所有子颜色,不被吸收的红色光被反射到我们的…

三维建模贴图技巧

作者:关宇 #一、概述 整个三维项目中建模制作为核心环节,决定了整个项目的框架基础。在制作的时候参考数据尤为重要决定了模型的精度。 一个完整的三维模型包括白模和贴图,白模决定了模型的外形结构,而贴图赋予色彩和细节。 个人…

提升树叶渲染性能

树的渲染的大部分消耗都是花在树叶上,为了是树叶看起来很茂密,美术一般会加很多叶子的三角形,但是三角形太多的话会让vs压力很大,因为树叶的动画都是在vs里完成的,因此大多游戏都采用的是Leaf Card也就是Billboard Lea…

【Unity Shader】树叶晃动效果原理及实现

1 树叶晃动原理 在模型空间下,对顶点进行X轴和Y轴上的偏移。 1.1 方法 通过计算顶点与Y轴单位向量的点积求得stage1。通过计算顶点与X轴单位向量的点积,加上时间分量_Time.y,求其正弦值stage2。将stage1/stage2与向量(0.001, 0, 0.001)相乘…

blender 2.8制作面片树叶的shading node设置

1. 创建Pricipled BSDF材质,并设置材质Settings的Blend Mode为Alpha Blend模式! 2. 在shading窗口内设置节点: 添加下列节点 Texture Coordinate Mapping Image Texture Image Texture Transparent BSDF Principled BSDF Mix Shader Material Output…

【UE4 Material 101学习笔记】 :Lec08/10/11/12 视差贴图的应用/布料着色/体积冰效果/树叶摇动

Lec08 视差贴图 原理 LearnOpenGL视差贴图 1. 使用高度图偏移UV 未使用高度贴图偏移UV时 使用之后,表面不平坦产生的阴影会更为明显一些。 当角度较大时,失真比较明显。 2. 视差遮蔽映射(Parallax Occlusion Mapping) 可弥…

UE风格化Day19-树叶材质

材质蓝图的基础技巧 补充一些材质蓝图的基础技巧,虽然比较基础,但是刚开始学的时候完全没有教程专门提到这个: 材质的管理一般分为:材质函数、材质、材质实例 首先网格体一般挂的材质就是用材质实例,当然也可以直接挂…

Quixel megascans模型材质贴图合集包

Quixel megascans是一个在线高分辨率扫描模型和贴图库,一致的PBR校准的表面,植被,和三维扫描模型,还包括用于管理的桌面应用、混合和输出你的扫描数据的程序。它的产品已经与游戏和电影工作室合作。 quixel megascans可以帮助您创…

自动化测试Junit

目录 Junit5注解TestDisabledBeforeAll、AfterAll、BeforeEach、AfterEach 参数化单参数多参数CSV获取参数方法获取参数 测试用例执行顺序断言 assert断言相等断言不相等断言为空断言不为空 测试套件 自动化测试项目1. 熟悉项目2. 针对核心流程设计手工测试用例3. 将手工测试用…

解释PBR纹理贴图(texture-maps)

纹理贴图,不管你是学习sp绘制纹理,还是利用渲染器创造艺术作品,接触到PBR流程,总要面对各种贴图。我在学习的时候,有时候搞得懂,有时候糊里糊涂,我想还是要做个笔记的,好记性不如烂笔…

PBR贴图基础知识

PBR贴图基础知识 一,基础知识二,PBR贴图类型传统次世代方式PBR次世代方式1,金属度粗糙度流程---Base ColorMetallicRoughness2,反射度光滑度流程---Diffuse/AlbedospecularGlossiness/Smoothness3,通用贴图类型法线贴图…

UE4 Material 101学习笔记——08-12 凹凸和视差贴图/纹理压缩/布料/体积冰/摇曳树叶

UE4 Material 101学习笔记——08-12 凹凸和视差贴图/纹理压缩/布料/体积冰/摇曳树叶 Lec08 凹凸和视差贴图 Bump Offset and Parallax Occlusion MappingLec09 纹理压缩与设置 Texture Compression and SettingsLec10 布料着色器 Cloth Shading10.1 了解布料10.2 布料shader Le…

技术美术个人笔记(十四)——Houdini程序化树木

前言:关于大地形美术资产制作部分的houdini程序化树木部分,原houdini内置有Labs Quick Basic Trees节点,以下步骤均基于此节点优化魔改; 效果预览: tip:其中树叶贴图及地形颜色变化通过在材质中对贴图采样…

CSS3+js绘制3D圣诞树

最近大家都在用代码写圣诞树,我也跟个风吧! 主要技术: 1.CSS3的3D变换 2.DOM动态添加节点 开发环境:vscode 目录 一.引入 二、基本知识 1.CSS3的3D变换 (1).空间直角坐标系 (2).transform详解 (3).transform-style 2.DOM节点…

unity透明通道加颜色_树叶透明贴图的制作原理及渲染!

对于很多刚开始接触渲染模块的同学来说,不知道透明贴图的制作原理,以及如何渲染出好的效果,今天结合案例给大家讲解一下,先打开我们需要的素材,如下图: 在制作之前我们先给树叶一个普通的blinn材质&#xf…

SpringBootWeb案例-2(上)

前面我们已经实现了员工信息的条件分页查询以及删除操作。 关于员工管理的功能,还有两个需要实现: 新增员工修改员工 首先我们先完成"新增员工"的功能开发,再完成"修改员工"的功能开发。而在"新增员工"中&…

微调样本质量胜于数量 LIMA: Less Is More for Alignment

1、总体介绍 大型语言模型的训练分为两个阶段:(1)从原始文本中进行无监督的预训练,以学习通用的表征;(2)大规模的指令学习和强化学习,以更好地适应最终任务和用户的偏好。 作者通过…