风险管理
概念
风险管理是指识别、评估和应对项目中可能发生的不确定事件,以最大程度地减少对项目目标的影响。风险具有不确定性,可能会造成损失的特征。风险不可避免,但可以通过相关措施进行预防、干预,以减少损失,
风险管理步骤:
风险识别:
通过搜集信息、讨论、经验教训和专家意见等方式,识别可能影响项目目标的各种风险。
- 软件项目的风险分类
- 项目风险:项目预算、进度、用户和需求等方面的问题
- 人员风险:人员离职、人手不足等问题
- 技术风险:采用的技术所可能带来的风险
- 商业风险:与市场、产品策略等有关的商业风险
- 10个项目死亡的信号
- (1)第一版做太多功能;(2)太依赖新技术平台
- (3)与公司另一个有份量的产品竞争;
- (4)团队人手不足
- (5)复杂的问题,需要复杂的解法;
- (6)成员开始隐藏进度落后的事实和原因;(7)不断更改、增加的需求;
- (8)2.0 症候群一非要更大、更强、更美;
- (9)产品没有市场立足点;
- (10)你根本无法解决的大问题
- 风险评估:
对识别到的风险进行定性和定量的评估,确定其可能性和影响程度。
- 风险应对:
制定相应的风险应对策略。常见的应对策略包括避免、转移、减轻和接受。避免是指通过改变项目计划
- 风险监控:
在项目执行过程中,定期监控项目风险的发生情况,并根据需要及时调整风险应对策略。
pert图
概念
PERT图是一种网络图,用于描述项目任务之间的依赖关系,以及任务的预计完成时间。在PERT图中,任务用节点表示,任务之间的依赖关系用箭线表示。PERT图的特点是它能有效地表示出任务之间的不确定性,以及这种不确定性对项目整体进度的影响。
- 结点(事件):图中的圆,表示流入结点任务的结束,并开始流出节点的任务只有当流入该结点所有任务均结束,结点事件才出现,流出结点任务才开始,
- 关键路径:图中花费时间最长的事件和活动的序列。
- 最早时刻:此刻之前从该事件出发的任务不可能开始。
- 最迟时刻:从该事件出发的任务必须在此时刻之前开始,否则整个工程不能如期完成。
- 松弛时间:表示不影响整个工期前提下完成该任务的机动余地。
找关键路径:
计算出各个路径长度,取最长。
第一步:
①最早时刻=前驱最早时刻+路径上的时间
②最迟时刻=后继最迟时刻-路径上的时间
第二步:
每个节点的 最迟时刻-最早时刻=0就是关键路径
多个流入最早开始时刻取最大值,多个流出最晚开始时刻取最小值;
松弛时间/最晚开始时间:
松弛时间=最迟时刻-最早时刻
关键路径上的松弛时间为 0
多个流入最早开始时刻取最大值,多个流出最晚开始时刻取最小值
另一种算法,松弛时间=关键路径-所求活动的最长时间路径
面向对象设计
面向过程-面向对象-概念
二者都是一种思想,面向对象是相对于面向过程而言的。
面向过程(Procedure Oriented):以过程为核心,强调事件的流程、顺序,如:C语言,
面向对象(0bject Oriented):以对象为核心,强调事件的角色、主体,如:C++、Java。
面向对象-类和对象
类(设计图):是对象共同特征的描述
对象:是真实存在的具体东西
面向对象编程语言中,必须先设计类,才能获得对象
面向对象-属性和方法
属性是对象具有的各种特征,方法是对象执行的操作。
面向对象-继承
继承是类之间的一种关系,其中子类可以继承(获得)父类的属性和方法,同时可以添加自己独有的属性和方法。
面向对象设计原则
面向对象设计原则-单一责任
单一职责原则(Single Responsibility Principle,SRP),一个类应该只专注于做一件事,应该仅有一个引起它变化的原因。这样做的好处是,当你需要修改某个功能时,只需要关注一个类,而不用担心影响其他功能。
面向对象设计原则-开放封闭
开放封闭原则(Open Closed Principle,OCP)软件实体应当对扩展开放,对修改关闭。这个原则意味着可以扩展现有的代码,但不需要修改已有的代码。允许新功能的添加,而不会影响到已经运行良好的功能。
面向对象设计原则-里氏替换
里氏替换原则(The Liskov Substitution Principle,LSP),子类应当可以替换父类并出现在父类能够出现的任何地方(通俗理解:子类可以扩展父类的功能,但不能改变父类原有的功能)。
面向对象设计原则-依赖倒置
依赖倒置原则(Dependence Inversion Principle,DIP),实现依赖于抽象,抽象不要依赖于实现。要针对接口编程,不要针对实现编程。高层模块不应该依赖于低层模块(上层不依赖下层,下层也不依赖上层,双方共同依赖于抽象。)。二者都应该依赖于抽象。
面向对象设计原则-迪米特原则
迪米特原则(LOD:Law ofDemeter),也称最少知识原则,一个类对于其他类知道的越少越好,对于被依赖的类来说,对外除了提供的public方法,向外公开的方法应该尽可能的少。通俗来讲也就是:就是一个对象对其他对象应尽可能少的了解(别八卦他人)
面向对象设计原则-接口分离
接口隔离原则(Interface Separate Principle,lSP),一个类对另外一个类的依赖应当是建立在最小的接口上。一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口当中,
包设计的原则-共同重用
共同重用原则(Common Reuse Principle,CRP)强调的是如果重用了包中的一个类,那么就应该重用包中的所有类,这个原则鼓励将紧密相关的类组织在同一个包中,以便它们可以一起被重用,从而避免只重用包中的部分类而导致的潜在问题。
包设计的原则-共同封闭
共同封闭原则(Common Closure Principle,CCP)包中的所有类对于同一类性质的变化应该是共同封闭一个变化若对一个包产生影响,则将对该包中的所有类都产生影响,而对于其他的包不影响。
包设计的原则-无环依赖
在包的依赖图中,不允许存在环。
UML
UML(Unified Modeling Language)是一种用于软件系统设计的建模语言,与程序设计语言并无直接关系。它是一种独立于编程语言的图形化表示技术,旨在帮助开发人员在软件开发过程中进行系统设计和建模。
结构事物:模型的静态部分,如类、接口、用例、构件等;
行为事物:模型的动态部分如交互、活动、状态机
分组事物::模型的组织部分,如包;
注释事物:模型的解释部分,依附于一个元素或一组元素之上对其进行约束或解释的简单符号
依赖:一个事物的语义依赖于另一个事物的语义的变化而变化
关联:是一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合,都是部分和整体的关系
泛化:一般/特殊的关系,子类和父类之间的关系
实现:一个类元指定了另一个类元保证执行的契约。
类图:
展现一组对象、接口、协作和它们之间的关系,静态模型展示的是问题的静态结构视图,它不随时间的变化而变化。
多重度:指在一个关系中,同一对象在另一个关系中出现的次数,一般有:一对一,多对一,多对多,
1 :表示一个集合中的一个对象对应另一个集合中1个对象。
0..*:表示一个集合中的一个对象对应另一个集合中的0个或多个对象(可以不对应)
.表示一个集合中的一个对象对应另一个集合中的一个或多个对象(至少对应一个):表示一个集合中的一个对象对应另一个集合中的多个的对象,等价于“0..”
对象图
展现某一时刻一组对象及它们之间的关系,为类图的某一快照。在没有类图的前提下,对象图就是静态设计视图。
UML-用例图
用例图:静态图,展现了一组用例、参与者以及它们之间的关系用例图中的参与者是人、硬件或其他系统可以扮演的角色;用例是参与者完成的一系列操作用例之间的关系:包含(include)、扩展(extend)、泛化。
包含(include):一个用例包含了另一个用例的行为,强调的是功能的复用和共享扩展(extend):一个用例扩展了另一个用例的行为,侧重于为基用例添加新的行为或目标
UML-序列图
序列图:即顺序图,动态图,是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动
UML-通信图
通信图:动态图,即协作图,是顺序图的另一种表示方法,也是由对象和消息组成的图,只不过不强调时间顺序,只强调事件之间的通信,而且也没有固定的画法规则,和顺序图统称为交互图。
UML-交互概览图
交互概览图强调控制流,描述业务过程中的控制流概览,软件过程中的详细逻辑概览。
UML-状态图
状态图:动态图,描述单个对象在多个用例中的行为,包括简单状态和组合状态。图中方框代表状态,箭头上的代表触发事件,实心圆点为起点和终点。下图描述的就是一个图书的状态变化。
转换:转换(Transition)是两个状态之间的关联。表示对象在第一个状态(Source state)中执行一定的动作,并在某个特定事情发生并且某个特定的条件满足时进入下一个状态(TargetState)。
源状态(Source State):源状态就是被转换影响的状态。
目标状态(Target State):转换完成后,对象状态发生变化,这时对象所处的状态
触发事件(Trigger):引起转换的事件,这里所指的事件可以是信号、调用、时间段或状态的一个改变
监护条件(Guard Condition):是一个方括号括起来的布尔表达式,它被放在触发事件的后面。
结果(Effect):对象状态转移后的结果
UML-活动图
活动图:动态图,是一种特殊的状态图,展现了在系统内从一个活动到另一个活动的流程,活动的分岔和汇合线是一条水平粗线,每个分岔的分支数代表了可同时运行的线程数。活动图中能够并行执行的是在一个分岔粗线分支上的活动.
UML-构件图
构件图(组件图):静态图,为系统静态实现视图,展现了一组构件之间的组织和依赖
UML-部署图
部署图:静态图,用来对面向对象系统的物理方面建模的方法。展现了运行时处理结点以及其中构件(制品)的配置,通常展示软件组件和硬件的关系。
UML-包图
包图 是用于把模型本身组织成层次结构的通用机制,不能执行,展现由模型本身分解而成的组织单元以及其间的依赖关系,包可以拥有其他元素,可以是类、接口、构件、结点、协作、用例和图,甚至是嵌套的其他包
设计模式
设计模式-概念
在软件设计领域中,为解决常见问题而被反复使用、被广泛认可的一种设计思想。它是一种经过实践验证的被认为是最佳解决方案的经验总结。
创建型模式 5种
口诀:单抽元(原)件(建)厂
这类模式提供创建对象的机制,能够提升已有代码的灵活性和可复用用性。
设计模式-拿分关键词 | 抽象接口 |
---|---|
创建对象接口、子类决定实例化、推迟 | 单例 |
只有一个实例 | 构造器 |
类和构造分离 | 抽象工厂 |
结构型模式 7种
设计模式-行为型模式 11种
口诀:外侨(桥)组员(元)戴(代)配饰
监听、主动发出通知、观察者、自动更新 | 观察者 |
---|---|
适配、一个接口转换成另一接口 | 适配器 |
给对象添加新功能、不修改原代码 | 装饰器 |
抽象和实现分离、独立的变化 | 桥接 |
致的外观、简化接口 | 外观 |
对象外保存对象内、恢复 | 备份 |