系统分析与设计复习
系统分析首节
需求的本质?
kano模型的用户需求分解?
用户基本需求处于哪一个阶段?
产品功能需求和用户需求
基本型、期望型、魅力型、无差异性、逆向型;
系统分析阶段;
本节思维导图
系统分析与设计概述
系统的特性:
软件危机的定义;
系统分析的过程/步骤:
软件没有银弹的含义是什么?
现代软件系统的特点?
devops的五个要素?
瀑布模型是谁提出的。
整体性、目的性、层次性、环境适应性、相关性;
延时性、超出成本、新的技术和工具不能成熟地使用;
明确问题,设立目标;收集材料,制定方案;分析计算,评价比较;检验核实,做出决策;
软件工程中的根本问题和次要问题划分;
复杂性(状态多)、一致性(接口)、可变性(需求的不断变化)和不可见性(无法直接感受);
文化、自动化、精益(持续改善,持续交付)、度量(有效地监控与度量手段)、分享(不同职能和产品之间分享经验);
1970 年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到20 世纪80 年代早期,它一直是唯一被广泛采用的软件开发模型,瀑布模型是由瀑布开发模型演变而来的。
- devops是敏捷理念从开发领域向运维领域的延伸;
- devops关键模式与时间:
- 人:自治团队、全栈工程师、融合团队、服务式管理者;
- 流程:MVP,CI/CD,TDD;
- 技术:开发者自服务,基础设施即代码,集成工具链;
- 文化:合作文化、持续体验;
重要的图表
devops生命周期过程:
系统规划
系统开发生命周期的各个阶段组成是怎样的?
系统开发和系统规划之间的关系?
系统规划的组成成分是什么?
系统规划的原则是什么?
总体规划准备阶段需要干什么?
谁是系统所有者?
系统用户的构成?
什么是组织机构调查?
什么是定义管理目标?
资源的生命周期有几个阶段?分别是什么?
定义数据类的方法有哪些?
如何定义信息系统结构?
计算机逻辑配置中的网络设计构成有哪些?
诺兰的阶段模型构成?
能力成熟度模型的作用?构成?
什么是关键成功因素法?
如何分析出关键的成功因素?
系统规划、系统分析、系统设计、系统实施、系统运行维护;
系统规划是系统开发的前提条件、是系统验收评价的标准;
在总体上确定系统开发的优先顺序,进行计算机的逻辑配置;
支持组织的总目标,着眼高层和企业过程,整体性,便于实施;
组织队伍,收集数据,准备调查表,开动员会;
客户,对于信息系统而言一般是经理或者主管;
内部用户、远程和移动用户、外部用户;
各部分之间的隶属关系和联系(资金流动、物资流动);
对总目标进行细分,标明经营方针和实现目标的约束条件;
产生阶段、获得阶段、服务阶段和归宿阶段;
实体法和功能法;
构建数据类矩阵,排列数据类一行,使得矩阵中C靠近对角线,然后再对角线上划分功能组,让C尽量被圈入方框中。
C/S模式;B/S模式;综合模式
初装、蔓延、控制、集成、数据管理和成熟;
评估组织的信息系统开发以及管理过程和产品成熟度的框架;初始级、可重复级、已定义级、已管理级、优化级
在一个组织中的若干能够决定组织在竞争中能否获胜的因素。
头脑风暴;
- 系统规划指根据组织的战略目标和用户提出的需求,从用户现状出发。
- 实体法:
- 可以独立考虑的变为实体;
- 计划型、统计型、文档型、业务型;
- 功能法:
重要的图表
总体规划的步骤:
组织功能矩阵:
网络设计中的综合模式:
鱼骨图的绘制:
基本u/c矩阵:
其中C表示功能的产生,U表示功能的使用。
敏捷项目管理
- 敏捷宣言:
- 个体和交互胜过过程和工具;
- 可以工作的软件胜过面面俱到的文档;
- 客户合作胜过合同谈判;
- 响应变化胜过遵循计划;
- 软件开发中的浪费:
- 部分完成的工作;
- 未应用的特性;
- 过度作业;
- 传递;
- 任务切换;
- 等待;
- 缺陷;
- 敏捷团队的三个核心角色:
系统需求分析
需求如何进行分类?
什么是需求分析?
需求分析的三个步骤有哪些?
什么是SWOT分析,组成部分是什么?
价值曲线评价法的过程是怎样的?
竞争的分级?
竞品分析的步骤?
竞品分析的结果?
kano模型分析的三种类型?
什么是用户画像的主要思路?
用户画像的过程是怎样的?
需求管理的方法是什么?
大众和小众、强需求和弱需求、高频需求和低频需求;
深度理解用户的需求,挖掘用户的深层次需求;
获取需求、用户画像、分析整合;
对组织的优势、劣势、机会和威胁进行分析;
确定关键因素、用户打分、绘制、评价价值曲线、监控价值曲线;
直接竞争、间接竞争、行业领先者/不同行业竞争;
明确背景的目的、找到竞争对手、产品定位分析、产品设计分析、核心策略分析、竞品数据分析、分析报告撰写;
竞品分析报告;
基本型、期望型、兴奋型;
谁+在什么场景下+做什么,针对目标群体真实特征进行勾勒,是深刻理解真实数据的基础上得出的一个虚拟用户。
定性研究、定量研究、聚类分析、角色描述;
需求池管理;
- 刚需:某一类人的必要要求,注意实操工具和刚需之间的区别;
- 需求分析的步骤:
- 用户研究:定性分析(大概有什么需求)和定量分析(不同需求用户占比);
- 市场分析;SWOT分析、价值曲线评价法;
- 数据分析;
- 用户反馈;
- 价值曲线评价法的注意事项:
- 各行业的服务质量关键要素不同;
- 打分的准则:期望、重要/非重要、开放性;
- 可以通过减少属性从而提高价值曲线;
- 四象限分析法:将事务的两个重要指标作为分析的依据,进行分类关联分析,找出研究问题。
- 需求减法的核心要点是产品定位;
- 最小化可行产品:最小化的验证,方便客户反馈和迭代的进行;
重要的图表
SWOT分析得到的图表:
产品价值曲线:
四象限分析法:
KANO模型的实现:
项目管理
什么是信息系统项目管理?
项目管理分类是怎样的?
什么是工作分解结构?交付物是什么?
可行性分析的三个组成:
甘特图的横轴和纵轴分别代表什么?
在指定时间内用最少的费用开发可以接受的系统的管理过程,具体内容包括确定范围、计划、人员安排、组织、指导和控制;
单纯型项目组织、职能型项目组织、矩阵型项目组织;
根据项目特点,选择合适的方式将项目总体工作范围逐步分解为合适的粒度;交付物是工作包;
操作、经济、技术;
横轴代表人物,纵轴代表经历的任务数量;
- wbs分解原则:
- 一个工作包只能一个人负责;
- 一个具体任务对应一个工作包;
- 应当合理且适应性强;
- 文档化显著;
- 项目管理的具体过程:
- 项目启动:
- 确定可行性:
- 定义目标:可行性影响表格;
- 确定资源:三方面分析;
- 判断可行性:
- 估计所需的时间;
- 项目进度管理;
- 网络图:
- 开始节点和结束节点均是惟一的;
- 在相邻的两个时间节点之间,最多只能由一条相连;
重要的图表
工作分解结构图:
成本效益
什么是pieces框架?
系统收益的分类?
吞吐量和响应时间(put out)、information,economy,control,effective,service
有形收益和无形收益;
社会成本=内在成本+外在成本
社会效益=内在效益+外在效益
社会净效益=社会效益-社会成本
流程建模——业务流程图
模型的类型有哪些?
系统分析设计阶段创建的模型?
数学模型(精确的公式和数学符号)、描述模型(备忘录和报表)和图形模型(化解较难表达的关系);
逻辑模型(数据流图、类图、用例图、顺序图、状态图、活动图)和物理模型(系统流程图、结构图、部署图);
重要的图表
业务流程图的常用符号:
类似泳道图的业务流程图(业务流程调查与分析):
数据流图和结构图
什么是数据流图?
系统部件的组成有哪些?
什么是数据字典?
数据字典的构成是什么?
结构图的组成模块有什么?
内聚的类型有哪些?(由低到高进行排序)
以图形的方式刻画业务系统中的数据处理过程和数据流;
系统的外部实体、处理过程、数据存储和系统中的数据流;
数据字典是一种关于数据的数据参考书;
数据流、数据结构、数据元素和数据存储;
输入和输出、逻辑功能、运行程序、内部数据;
偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚
- 系统的外部实体构成源点和终点;
- 系统处理从数据存储中提取数据,也将处理的数据返回数据存储;
- 数据流图的分层表示:
- 数据流图的基本原则:
- 所有的图形符号必须是前面所述的四种基本元素;
- 数据流必须封闭在外部实体之间;
- 处理过程至少有一个输入数据流和输出数据流;
- 任何一个数据流子图必须与它的父图上的一个处理过程对应;
- 内聚:
- 偶然内聚:模块的各部分无联系;
- 逻辑内聚:把几种相关功能组合在一个模块内;
- 时间内聚:模块完成的功能必须在同一时间内执行;
- 过程内聚:各部件相关且仅有控制联系;
- 通信内聚:使用相同的输入和输出;
- 顺序内聚:必须按顺序执行;
- 功能内聚:模块所有成分完成一个功能;
重要的图表
数据流图的组成部分:
过程规范
什么是过程规范?
小说明,是整个项目规范的一部分;
过程规范和结构化图
用例图和活动图
重要的图表
活动图(泳道图):
面向对象设计——用例描述
用例描述的制作方法:
面向对象设计——类图和时序图
uml中类的四种关系?
关联、聚合、组合和依赖(泛化和实现);
数据库设计
人工管理数据存在的弊端?
文件管理数据存在哪些弊端?
什么事数据实体?
数据库设计的完整流程?
什么事数据模型?数据模型的主要类型有哪些?
若两个实体类之间存在联系,如何确定他们的主键?
三大范式的定义?
程序不具有独立性,灵活性差;应用程序之间不能共享数据;数据不能永久保存;
数据冗杂和不一致;并发访问异常;缺乏灵活性;安全性差;
必须保存信息的人、地点、事务或者时间;
需求分析、概念模型 、逻辑模型、物理模型、实施、运行和维护;
描述数据与数据之间的关系、存储、处理特征的模型;关系模型、网状模型和层次模型;
若联系为1:1,则每个实体类的键均是该关系模式的候选键;若联系为1:n,则主键为n端实体类中的键;
确保每个属性具有原子性、除了主键以外的其他列都依赖于主键(涉及到关系的分解)、、
重要的图表
ER图实例:
层次模型:
系统设计概述
系统设计的任务要求是什么?
评价信息系统的标准是什么?
良好的结构设计是怎样的?
软件设计常见的问题?
系统设计的组成部分?
如何理解MVC架构模式的组成?
制定信息系统的物理模型(一个逻辑模型可以延伸出多个物理模型);
信息系统的功能、系统的效率、系统的可靠性、系统的工作质量、系统的可变更性(最重要的指标)和系统的经济性。
结构简单和变动灵活;
僵化性、脆弱性、固化型、只粘性、不必要的复杂性、不必要的冲独行和晦涩性;
总体设计(体系结构、软件结构、接口和服务)和详细设计;
模型代表数据,适用对象及其属实现;控制器和视图
系统总体设计
什么是软件架构?
常见的软件架构模式有哪些?
三层架构的组成是什么?
什么是SOA架构?
一个应用程序或计算系统的软件架构是一个或一组结构,内部关系;
三层架构、MVC,SOA、微服务架构;
表示层、业务逻辑层和数据访问层;
面向服务为原则的分布式计算模式;
重要的图表
MVC架构的示意图:
系统持续集成设计
版本控制系统的作用?
常见的版本控制系统有哪两类?
分支合并的类型有哪些?
git的使用协议有哪些?
如何计算圈复杂度?
代码检查的分类?
减轻开发人员的负担,降低错误和冗杂;
集中式版本控制系统和分布式版本控制系统;
非快进式合并(两个分支的末端和共同祖先进行合并)、分支衍合;
http,ssh,git
V(G) = ****e ****– n + 2
静态分析和动态分析;
- git是一款开源的分布式版本控制系统,而svn是一种集中式的版本控制系统工作模型;
- git的分支功能更加强大、有更加灵活的发布控制、能够隔离开发、提交审核、对合并更好的支持,有更少的冲突和更好的解决冲突;
- git的基本概念:
- 工作拷贝:存放本地工作目录;
- 索引:存放数据的缓存区;
- 本地库:远程库的完整拷贝;
- 远程库;
- 中心库:远程库的一种;
- 快照:版本库在某个时间点的所有文件的集合;
- 圈复杂度在数量上表现为独立线性路径条数,程序的可能错误和高的圈复杂度有很大的关系;
git相关命令 | 命令含义 |
---|
git branch | 新建分支 |
git checkout | 切换到某一个分支 |
git commit | 提交 |
git branch --merged | 查询已经合并的分支 |
git branch --no-merged | 查询未合并的分支 |
git branch -d | 删除某个分支 |
分支名 | 代表含义 |
master | 稳定分支 |
develop | 测试分支 |
topic | 开发分支 |
系统持续交付设计
蓝绿部署的过程是怎样的?
什么事灰度发布?
devcloud应用自动化部署的流程?
什么是CLSAP?
准备两个相同的环境,平时在蓝老板环境通过负载运行业务。升级时:将负载切换到绿环境,蓝环境部署新版本并测试。测试完成后负载切换到蓝环境,更新绿环境;
灰度发布是在原有版本可用的情况下,同时部署新版本;
新建部署模板、添加授信机器】创建部署环境、选择部署模板、天街部署参数、运行任务、查看结果和日志;
综合的轻量应用安全过程;
软件开发安全设计
如何定义软件安全?
软件能力成熟度集成模型的构成是什么?
使伤害或损害的风险控制在可接受的水平内;
初始级、可重复级、定义级、定量管理级、优化级;
- 在软件安全保障中,需要贯彻风险管理的思想;
- 软件安全漏洞:
- SQL注入:欺骗服务器执行恶意的SQL
- 失效的验证和会话管理:攻击者通过手段获取用户凭证和session id;
- 跨站脚本(XSS):向web中添加恶意html代码;(影响面最广的web安全漏洞)
- 不安全的直接对象引用:暴露服务器上具体文件名;
- 安全配置错误:服务器配置采用默认配置;
- 敏感信息泄露:加密处理或者加密强度不够;
- 功能级访问控制缺失:隐藏的url,管理员通过直接输入进入url;
- 跨站请求伪造(CSRF):构造恶意url请求,然后诱骗合法用户访问url,达到获取权限的目的;
- 使用含有已知漏洞的组件;
- 未验证的重定向和跳转:未经验证的重定向目标进行钓鱼;
- 常见编程安全问题:
- 整数赋值错误问题;
- 带符号和无符号整型比较问题;
- size_t导致的死循环:size_t为无符号整数;
- 临时变量溢出;
- short的范围使用问题;
- 定长字符串的越界问题;
- 字符串截断问题;
- 与函数无关的字符串错误问题;
- 字符串比较错误;
- 数组越界问题;
- 数组定义、初始化出错;
- 标量和数组的区分;
- 二维数组内存泄露;