1 数据库设计
数据三要素:程序、数据、文档。
-
1 NF 指的是表结构的原子性,不能再划分,比如 xx 市 xx 区 xx 路分开成多列。
-
2 NF 消除部分依赖,比如下面这个表:
学生ID | 学生姓名 | 课程名称 | 教师姓名 | 教师办公室 |
---|---|---|---|---|
001 | 张三 | 数学 | 李老师 | 101室 |
001 | 张三 | 物理 | 王老师 | 102室 |
002 | 李四 | 数学 | 李老师 | 101室 |
002 | 李四 | 英语 | 赵老师 | 103室 |
其中学生 ID 和课程名称是联合主键,但是教师姓名和教师办公室只依赖于课程名称,称为部分依赖。学生 ID 主键确定不了教师姓名和教师办公室非主键字段。
2 NF 表中的任一主键可以确定除该主键外的所有的非主键值。
- 3 NF 消除传递依赖,比如下面这个表:
学号 | 姓名 | 班级 | 班主任 |
---|---|---|---|
001 | 小黄 | 一年级(1)班 | 高老师 |
其中学号是主键,能确定所有非主键字段,但是班主任也可以用班级推导出,称为传递依赖。
3 NF 不能存在某非主键字段 A 可以确定某非主键字段 B。
- ER 图
矩形代表实体,菱形代表关系,椭圆代表属性。
关系分为 1 对 1,1 对 n,m 对 n。
ER 图存在三种冲突:属性冲突(有的部门把学号定为浮点型,有的整数型)、命名冲突(同名异义或异名同义)、结构冲突(属性当成实体,同一个实体在不同位置有不同属性,同一个联系有多种对应)。基本 ER 图要消除数据冗余(某个属性可以推导出来)、关系冗余(某个关系可以推导出来)。
- 视图
CREATE VIEW 可以把表连接起来形成一个虚拟表,称为视图。它不存储物理数据,因此不会造成数据冗余。
但是视图不是缓存,建立的视图看上去像是把很多表连接起来了,但是实际执行时仍然用底层表逐步执行 SQL 语句。
- 存储过程
CREATE PROCEDURE 类似编码中的“函数”,是预编译的 SQL 代码集合。使用一个存储过程相当于执行了一串 SQL 语句。
- 触发器
TRIGGER 是一种特殊的存储过程,同样是预编译代码集合,但是它满足触发条件后会自动执行。
2 流图
流图即“流程图”。
数据流图 DFD 由四部分组成:
-
实体:起止点,用正方形表示。(人员作为实体,子系统作为处理)
-
处理:用圆形或圆角矩形表示。(第 0 层 DFD 用 1,2,3,第 1 层 DFD 用 1.1,1.2,1.3,如果已经有处理的“结果”就直接写箭头上)
-
数据存储:用开口矩形表示。(D:Document / F:File,数字不要重复,比如应 D1,F2,F3)
-
数据流:用箭头表示流动方向。(单向 / 双向,箭头上写流动事物)
控制流图 CFD 从 1 开始标号,每个节点代表一个基本块,即一段没有任何跳转或跳转目标的直线代码(可以是多行代码)。
业务流图 TFD(transaction)类似活动图,既可以只用矩形、菱形、箭头,也可以用泳道画法。
3 类图
箭头分类:
-
泛化(继承):实线空心三角,子类完全继承父类的所有特性。
-
接口(实现):虚线空心三角,子类必须实现接口中定义的方法。
-
组合(整体由部分构成,整体消失部分不再存在):实线实心菱形,只涉及子类的生命周期与父类有关,不需要继承什么或者实现什么。
-
聚合(整体由部分构成,整体消失部分仍然存在):实线空心菱形,它不管理成员对象的生命周期。
-
关联(类成员变量包含关联的实参):实线箭头,仅表示对象之间的协作。
-
依赖(调用的方法用到依赖的形参):虚线箭头,仅限于单个方法内暂时使用。
关系强弱排序:泛化 > 实现 > 组合 > 聚合 > 关联 > 依赖
4 用例图
用例本质上是事件流。
用例规约(用例描述)包括参与者,前置条件(启动用例之前必须满足的条件),后置条件(用例执行完成后应达到的状态),主事件流,备选事件流。
用例图是由小人 Actor 和椭圆 Use Case 以及它们之间的关系组成。
-
包含:<<include>>
-
扩展:<<extend>>
-
泛化:实线空心三角
使用 UML 中的时序图(顺序图)可以图形化地表现出参与者和系统之间的交互。
5 版本控制
软件的任何组成部分(源代码、数据、文档、硬件、各种环境)都可以随着软件生命周期中的时间而更新。
-
软件配置管理(SCM):追踪和控制软件的变化。
-
供应链管理:包括修订控制和建立基线。
-
软件配置项(CI):软件中发生变化的基本单元(如文件)。
-
基线:软件持续变化过程中的“稳定时刻”(如对外发布的版本),不仅是稳定的产品。
-
CMDB:配置管理数据库存储软件的各配置项随时间发生变化的信息和基线(如 repository,包含完整版本历史)。
-
HEAD:程序员正在其上工作的版本(如 HEAD 指向 master)。
版本控制系统分为本地(在本地磁盘上维护文件的不同版本)、集中式(CVCS,如 SVN,一个中央服务器来存储所有文件的版本历史,每个副本只包含最新版本)、分布式(DVCS,如 Git,每个副本都包含完整的版本历史)。
-
git clone:远程操作的第一步,通常是从远程主机克隆一个版本库。该命令会在本地主机生成一个目录,与远程主机的版本库同名,默认克隆全部历史。
-
git pull:取回远程主机某个分支的更新,再与本地的指定分支合并。
-
git push:用于将本地分支的更新,推送到远程主机(全流程是从本地目录 add -> commit -> push 到远端仓库,从远端仓库 clone/fetch -> checkout 到本地目录)
Git 文件分为三类:已追踪的(tracked)、被忽略的(.gitignore,常常是 asset 类大文件)以及未追踪的(untracked)。
Git 的每个提交包含了一个指针,指向它的“父提交”(parent commit,指向早期的),从而能够查看历史变化。
6 杂项
系统:如果对象集至少包含两个元素,且元素间按照一定方式联系,则称之为系统。
软件系统:在一定的软件开发与应用环境下,为了达到某一目的而相互联系、相互作用的若干个软件要素所组成的有机整体。
客户需求:分为基本型、期望型、兴奋型需求,应交给用户对需求排序。需求分析的三步大致为:拆解归纳、去伪、定优先级。
项目经理(Project Manager):处理用户需求。
经典三层架构:表示层、业务逻辑层、数据访问层。
CMM:现在已经被更先进的 CMMI 替代。CMM:初始级、可重复级、已定义级、已管理级、优化级;CMMI:初始级、管理级、定义级、量化管理级、优化级。
用户故事:改进需求分析文档的缺点。“作为 xx 我希望 xx 以便于 xx”,多个用户故事可以拼成故事地图,通常包括将所有用户故事按照用户的活动流程(大故事,从左到右表示时间或优先级的顺序)和实现的优先级(小故事,从上到下表示优先级)进行排列。
用户故事原则:Independent(高内聚)、Negotiable(可协商)、Valued(有价值)、Estimable(可评估)、Sized Appropriate(大小适中)、Testable(可测试)。
DevOps:主要是为了开发和运维的沟通,采用持续集成(CI)持续部署(CD),一旦写完代码就自动构建部署减少错误,解决了“在我的机器上能运行”的问题。
敏捷:核心是增量和迭代,包括 Scrum、XP 开发模型等。敏捷是大类,Scrum 是其中一种实践。
敏捷宣言:
-
个体和互动 高于流程和工具
-
可工作的软件 高于详尽的文档
-
客户合作 高于合同谈判
-
响应变化 高于遵循计划
鱼骨图:包括一个主线(鱼的脊椎)指向一个特定的问题,其余的“鱼骨”分支则代表导致该问题的各种原因(也称“因果图”)。以风险分析为例,鱼骨分支可以是技术风险、进度风险、需求风险、人员风险,分别再衍生出更细的鱼骨等。
组织功能矩阵:公司的主要功能部门(如市场营销、销售、开发等)作为行,关键的业务流程作为列,单元格内详细说明了特定部门在特定业务流程中的责任和任务。
功能数据类矩阵(Use/Create 矩阵):矩阵中的行表示功能(如财务计划、销售、会计、发运等),列表示数据库(如成本、加工、计划、客户),C表示这类数据由相应功能产生,U表示这类功能使用相应的数据类。整理、移动某些行或列,把字母 C 尽量靠近 U/C 矩阵的对角线,可得到 C 符号的适当排列。
工程网络图(PERT):每一个结点用圆表示,圆的左侧是事件序号,右上方是最早开始时间,右下方是最晚开始时间,箭头上写事件持续时间。关键路径上的最早开始时间与最晚开始时间相等。注意只能有一个起点,一个终点,不满足的需要引入虚作业。
MVC、SOA(Service Oriented Arch)、微服务架构:Model(核心业务逻辑)、View(用户界面)、Controller(接受从用户界面的输入,决定使用哪个模型来处理数据,然后选择一个视图显示模型输出)构成,用户面对的是 View。SOA 强调的是大服务,相当于一个 API 用多件事,一个“客户服务”就是一个 SOA 服务。微服务是一种小型的 SOA。
7 Scrum
敏捷开发中一般迭代称为 iteration。Scrum 是一种最常见的敏捷开发模型,这里的迭代周期称为 Sprint。
Scrum 的产品负责人(Product Owner)、教练(Scrum Manager)与开发团队(Team):如果比喻为一个龙舟,PO 相当于在后面掌舵指明方向,教练相当于在前面加油协调成员,团队成员相当于划桨手。
MVP(Minimum Viable Product):是每个迭代后的最小可行产品,其中只包含足以满足早期采用者的核心功能,指导未来产品的完善和迭代。
Backlog:分为产品待办列表(Product Backlog,由 PO 管理,列出全部需求)和迭代待办列表(Sprint Backlog,由开发团队管理,教练更多是一个促进者而不直接决定)。
三种会议:迭代计划会议(迭代 backlog)、迭代评审会议(决定迭代成功与否)、迭代回顾会议。
8 模型
Scrum 流程:
业务流程建模:
数据流程建模:
用例建模:
实体关系设计:
故事地图设计:
标签:迭代,箭头,Scrum,系统分析,用例,版本,设计,主键 From: https://www.cnblogs.com/Arcticus/p/18156832