软考高级系统分析师知识点整理
系统分析师知识点整理
信息化战略体系
- 企业战略规划:企业如何达到目标
- 信息系统战略规划:信息系统如何支撑这些目标
- 信息技术战略规划(IT战略规划):需要哪些信息技术支撑信息系统
- 信息资源规划:信息化建设具体项目的实施。(功能建模、数据建模、ER模型)
企业战略与信息化战略集成方法
- 业务与IT整合(BITA):重心是找业务与现有IT系统之间的不一致,并给出转变计划
- 企业IT架构(EITA):帮助IT企业建立IT的原则规范、模式和标准
信息系统战略规划方法
- 第一阶段,以数据处理为核心,围绕职能部门需求
- 企业系统规划法(BSP)
- 关键成功因素法(CSF)
- 战略集合转化法(SST)
- 第二阶段,以企业内部管理信息系统(MIS)为核心,围绕企业整体需求
- 战略数据规划法(SDP)
- 信息工程法(IE)
- 战略栅格法(SG)
- 第三阶段,综合考虑企业内外环境,以集成为核心,围绕企业战略需求
- 价值链分析法(VCA)
- 战略一致性模型(SAM)
信息系统开发方法
- 结构化法
- 将系统的生命周期划分为系统规划、系统分析、系统设计、系统实施和系统维护等阶段
- 开发目标清晰化;开发工作阶段化;开发文档规范化;设计方法结构化
- 精髓是自顶向下、逐步分解(求精)和模块化设计
- 适合数据处理领域的问题,不适用于规模较大、比较复杂的系统开发,局限性体现在开发周期长,难以适应需求变化,很少考虑数据结构。
- 原型法
- 根据用户初步需求,利用系统开发工具,快速建立一个系统模型展示给用户,在此基础上与用户交流,最终实现用户需求。
- 适用于需求不明确的开发
- 包括抛弃型原型和演化型原型
- 面向对象方法
- 系统的描述及信息模型的表示与客观实体相对应,符合人们的思维习惯
- 更好的复用性
- 当前大型信息系统的开发,通常把结构化开发方法和面向对象开发方法结合起来(去找描述的例子,准备论文)
- 面向服务的方法
- 三个抽象级别:操作、服务、业务流程
- 底层的操作代表单个逻辑单元的事务,类似于对象的方法,第二层的服务代表操作的逻辑分组,最高层的业务流程是为了实现特定业务目标而执行的一组长期运行的动作或活动。
- 接口的定义与实现解耦
- 粗粒度、松散耦合和基于标准的服务
商业智能(BI)
现代化的业务操作会产生大量数据,怎样从业务数据中提取有用的信息,然后根据这些信息采取明智的行动,就是商业智能的功能。
BI系统主要包括:
- 数据预处理:整合原始数据的第一步,包括ETL三大过程,分别是抽取(extraction)、转换(transformation)和加载(load)。
- 建立数据仓库: 处理海量数据的基础
- 数据分析:体现系统智能的关键,包括两大技术:
- OALP:进行数据汇总、切片、切块、下钻、上卷和旋转等数据分析功能
- 数据挖掘:目标是挖掘数据背后隐藏的知识,通过关联分析、聚类和分类等方法建立分析模型,预测企业未来发展趋势和将要面临的问题。
- 数据展现:保障系统分析结果的可视化
数据仓库
- 面向主题:数据按主题组织
- 集成:消除源数据的不一致,提供整个企业的一致性全局信息
- 相对稳定:主要进行查询,少量的修改和删除
- 反映历史变化:记录企业过去某一时刻到当前各个阶段的信息,可对发展里成和未来趋势做定量分析和预测
数据挖掘
- 关联分析:挖掘出隐藏在数据间的相关关系
- 序列模式分析:侧重点是分析数据间的前后关系(因果关系)
- 分类分析:为每一个机理赋予一个标记在按标记分类(监督学习)
- 聚类分析:分类分析法的逆过程。(非监督学习)
供应链管理(SCM)
- 理念:强强联合,打通信息孤岛,严格的数据交换标准
- 整合和优化“三流”:
- 信息流:核心,需求信息流,如:客户订单、生产计划、采购合同等;供应信息流,如:入库单、完工记录等。
- 资金流
- 物流
企业应用集成
- 表示集成(界面集成):把各应用系统的界面集成起来,统一入口,产生整体的感觉
- 数据集成:应用集成和业务流程集成的基础,吧不同来源、格式、特点性质的数据在逻辑上或物理上有机地集中,为企业提供全面的数据共享,ETL、数据仓库、联邦数据库都可以视为数据集成。
- 控制集成(功能集成、应用集成):业务逻辑层级集成,可以借用过程、方法调用或面向消息的中间件等技术
- 业务流程集成(过程集成):对各种业务信息的交换进行定义、授权和管理,一遍改进操作、减少成本、提高响应速度。
- 消息集成:适用于数据量小但要求频繁、立即、异步的数据交互场合。
- 共享数据库:实时性强,可以频繁交互,数据的交互属于同步方式
- 文件传输:适用于数据量大、交换频度小、即时性要求低的情况。
项目可行性分析
- 经济可行性:项目的底线,主要评估项目的建设成本、运行成本和项目建成后可能的经济收益。
- 技术可行性:也称为技术风险分析,研究的对象是信息系统需要事先的功能和性能,以及技术能力约束,
- 法律可行性(社会可行性):需要从政策、法律、道德、制度等社会因素来论证信息系统建设的现实性。
- 用户使用可行性(执行可行性):从信息系统用户的角度来评估系统的可行性,包括企业的行政管理和工作制度、使用人员的素质和培训要求等。
成本效益分析
- 固定成本:不受业务量变动的影响而保持固定不变的成本,如房屋租金、固定资产折旧费、员工培训费等
- 变动成本:随业务量的变动而成正比例变动的成本,如直接材料费、产品包装费、外包费用、开发奖金等。
- 混合成本:混合了固定成本和变动成本性质的成本,如水电费、电话费等,通常有一个基数,超过这个基数就会碎业务量的增大而增大。
- 直接成本:直接投入在项目上
- 间接成本:分摊到项目上
- 沉没成本:已经支出的成本,对于未来的决策而言,无论项目是否继续,成本都已花掉,收不回来了。
信息系统生命周期
- 系统规划:初步调查、分析系统目标,产物:
- 系统设计任务书
- 系统分析:业务流程分析、数据与数据流程分析、软件需求分析、网络需求分析,产物:
- 系统需求规格说明书
- 软件需求规格说明书
- 系统测试计划
- 系统设计:软件架构设计、概要设计、详细设计、网络设计,产物:
- 架构设计文档
- 概要设计说明书
- 详细设计说明书
- 详细测试计划
- 系统实施:软件编码、软件单元/集成/系统测试、综合布线,产物:
- 源码
- 单元测试、集成测试报告
- 操作手册
- 系统验收:确认测试、试运行,产物:
- 确认测试报告
- 项目验收报告
软件开发模型
- 瀑布模型:结构化方法,适用于需求很明确的情况,软件开发的各项活动严格按照线性方式进行,每个阶段都有文档产出。
- 演化模型
- 针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现
- 第一次迭代(需求->设计->实现->测试->集成) -> 反馈 -> 第二次迭代(需求->设计->实现->测试->集成) -> 反馈-> ……
- 重复执行的多个“瀑布模型”。
- 增量模型
- 各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品,然后不断增加新的模块。
- 第一个增量往往是实现基本需求的核心产品。
- 螺旋模型:
- 以原型为基础,配合瀑布模型,同时用到迭代思想
- 考虑了风险
- 特别适合于大型复杂的系统
- 快速原型模型
- 针对需求不明确的情况
- 关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃
- 无完整的需求说明,只有一些基本要求
- 喷泉模型
- 面向对象
- 具有更多的增量和迭代性质
- 项目的整个生存期中还可以嵌入子生存期,就像水喷上去又可以落下来,可以落在中间,也可以落在最底部
- V模型
- 强调测试贯穿始终,尽早测试
- 包含了底层测试(单元测试)和高层测试(系统测试)
- 自上而下逐步求精,每个阶段分工明确,便于整体项目的把控
敏捷方法
思想:给开发人员减负,加强沟通,适用于小项目
- 自适应方法
- 水晶方法:探索用最少纪律约束而仍能成功的方法
- 特性驱动开发(FDD):开发人员分成两类:首席程序员和“类”程序员,首席程序员经验丰富,是项目的协调者、设计者和指导者,“类”程序员主要做源码的编写
- SCRUM:明确定义了可重复的方法过程只限于在明确定义了的可重复环境中
- 极限编程(XP)
4大价值观
-
- 沟通
- 简单
- 反馈
- 勇气
5大原则
-
- 快速反馈
- 简单性假设
- 逐步修改
- 提倡更改
- 优质工作
12大最佳实践
-
- 计划游戏;2. 结对编程;3. 小型发布;4. 案例代码所有制; 5. 隐喻;6. 持续集成
- 简单设计;8. 每周工作40小时;9. 测试先行;10. 现场客户;11. 重构;12. 编码标准
逆向工程
抽象层次由低到高:
- 实现级:包括程序的抽象语法树、符号表、过程的设计表示
- 结构级:包括反映程序分量之间相互依赖关系的信息,如调用图、结构图、程序和数据结构
- 功能级:包括反映程序段功能级程序段之间关系的信息,如数据和控制流模型(DFD)
- 领域级:包括反映程序分量或程序各实体与应用领域概念之间相应关系的信息,如实体关系模型(ER图)、UML
需求工程
需求开发是需求管理的基线,需求管理支持需求开发。
需求开发
- 需求获取
- 需求分析
- 需求定义(需求规格说明书)
- 需求验证
需求管理
- 变更控制
- 版本控制
- 需求跟踪
- 需求状态跟踪
需求获取
- 用户访谈:1对1-3,有代表性的用户
- 问卷调查:用户多,无法一一访谈
- 现场观摩:针对较为复杂的流程和操作
- 联合需求计划(JRP):高度组织的群体会议,各方参与
- 阅读历史文档:对收集数据性的信息较为有用
- 抽样调查:统计方法,降低成本
样本大小 = α * (可信度系数 / 可接受的错误) ^2
α一般取0.25
需求分析-SA
数据流图(DFD)
SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程。由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。
- 数据流
- 加工
- 数据存储
- 外部实体
数据字典,对数据流图的补充描述。
实体关系图(ER图)
属于数据模型。
- 实体:数据模型中的数据对象,如学生
- 属性:数据对象所具有的属性,例如学生具有姓名、学号、年级等属性
- 关系:表现数据对象与数据对象之间的联系,例如学生的实体和成绩表的实体之间有一定的联系
面向对象(OOA)
- 对象:属性+方法+对象ID
- 类
- 实体类:对必须存储的信息和相关行为建模的类
- 控制类:描述一个用例所具有的事件流控制行为,控制一个用例中的事件顺序
- 边界类:描述外部参与者与系统之间的交互
- 用户界面类:帮助与系统用户进行通信的类
- 系统接口类:帮助与其他系统进行通信的类
- 设备接口类:为用来监测外部事件的设备(如传感器)提供接口的类
- 继承与泛化:复用机制
- 封装:隐藏对象的属性和实现细节,仅对外公开接口
- 多态:不同对象接收到同样的消息产生不同的结果
- 接口:特殊的类,只有方法定义,没有实现
- 重载:一个类可以有多个同名而参数类型不同的方法
OOA-UML类图
UML由三个结构构成:
- 基本构造块
- 规则
- 名字
- 作用域
- 可见性
- 完整性
- 执行
- 公共机制
- 规格说明:事物语义的细节描述,模型的真正核心
- 修饰:通过修饰来表达更多信息
- 公共分类:类与对象、接口与实现
- 扩展机制:允许添加新的规则
基本构造块包括事物、关系和图。
事物
- 结构事物:最静态的部分,包括:类、接口、协作、用例、活动类、构件和节点
- 行为事物:代表时间和空间上的动作,包括:消息、动作次序、连接
- 分组事物:看成是个盒子,如:包、构件
- 注释事物:解释部分,描述、说明和标注模型的元素
关系
- 依赖关系:一个事物发生变化影响另一个事物。带箭头的虚线,指向被使用者
- include
- extend
- 泛化关系:特殊 → 一般的关系。带三角箭头的实线,箭头指向父类
- 关联关系:描述了一组链,链是对象之间的连接
- 聚合关系:整体和部分生命周期不同,如车子坏了,但车上的零部件还可以用。带空心菱形的实心线,菱形指向整体
- 组合关系:整体和部分生命周期相同,如人挂了,鼻子、耳朵就没有意义了。带实心菱形的实线,菱形指向整体
- 实现关系:接口与类之间的关系。带三角箭头的虚线,箭头指向接口
图
重点记忆交互图
- 通信图:也叫协作图,它展现了多个对象在协同工作达成共同目标的过程中互相通信的情况,强调对象之间的组织结构。
- 序列图:也叫顺序图,描述对象之间发送消息的时间顺序,显示多个对象之间的动态协作。强调时序。
- 时间图:具体描述单个或多个对象状态变化的时间点以及维持特定状态的时间段。相当于在顺序图中添加时间约束就可以形成时间图
- 交互概述图:将活动图和序列图嫁接在一起的图
其他图:
- 活动图:描述的是系统的一个活动到另外的一个活动的控制流程。区别于交互图,强调的是对象到对象的控制流
- 用例图:描述角色以及角色与用例之间的连接关系,说明的是谁要使用系统,以及他们使用该系统可以做些什么
- 状态图:描述一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态之间的转移
- 类图:描述一组类、接口、协作和它们之间的关系。
- 对象图:描述一组对象及它们之间的关系,描述了在类图中所建立的事物实例的静态快照。
- 构件图:描述一个封装的类和它的接口、端口以及由内嵌的构件和连接件构成的内部系统。
- 部署图:描述对运行时的处理节点及在其中生存的构建的配置,给出了架构的静态部署视图。
OOA-UML-4+1视图
OOA-需求建模
用例模型
- 识别参与者
- 合并需求获得用例
- 细化用例描述(规约)
- 用例名称
- 简要说明
- 事件流
- 非功能需求
- 前置条件
- 后置条件
- 扩展点
- 优先级
- 调整用例模型
- 包含关系
- 扩展关系
- 泛化关系
分析模型
- 定义概念类
- 识别类之间的关系
- 为类添加职责
- 建立交互图
业务流程建模
- 标杆瞄准
- IDEF:一系列建模、分析和仿真方法的统称
- IDEF0:业务流程(功能)建模
- IDEF1:信息建模
- IDEF1X:数据建模,如ER模型
- IDEF2:仿真建模设计
- IDEF3:过程描述获取
- IDEF4:面向对象设计
- ...
- IDEF12:组织结构建模
- IDEF13:三模式映射设计
- IDEF14:网络规划
- DEMO
- Petri网
- 业务流程建模语言
- 基于服务的BPM
软件架构
需求分析 → 架构 → 软件设计
架构设计就是需求分配,即将满足需求的职责分配到组件上。
- 为软件提供了一个结构、行为和属性的高级抽象
- 明确了对系统实现的约束条件
- 可传递和可服用的模型,通过研究软件架构可能预测软件的质量
- 核心问题是能否达到架构级的软件复用
软件架构风格
定义了用于描述系统的术语表和一组指导构建系统的规则
- 数据流风格:批处理序列、管道过滤器
- 调用/返回风格:主程序/子程序、面向对象、层次结构
- 独立构件风格:进程通信、事件驱动系统(隐式调用)
- 虚拟机风格:解释器、基于规则的系统
- 仓库风格:数据库系统、超文本系统、黑板系统
结构化设计
- 抽象化
- 自顶而下、逐步求精
- 信息隐蔽
- 模块独立(高内聚、低耦合)
高内聚 → 低内聚
功能内聚、顺序内聚、通信内聚、过程内聚、瞬时内聚、逻辑内聚、偶然内聚
低耦合 → 高耦合
非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合
包括
- 概要设计:设计软件的结构,包括组成模块、模块的层次结构、模块的调用关系、每个模块的功能等等。同时还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系。产物:软件结构图、数据流图、数据字典等
- 详细设计:为每个模块完成的功能进行具体的描述,要把功能描述转变为精确的、结构化的过程描述。
面向对象设计原则
- 单一职责原则:设计目的单一的类
- 开放-封闭原则:对扩展开放,对修改封闭
- 里氏替换原则:子类可以替换父类
- 依赖倒置原则:要依赖于抽象而不是具体实现;针对接口编程,不要针对实现编程
- 接口隔离原则:使用多个专门的接口比使用单一的总接口好
- 组合重用原则:尽量使用组合,而不是继承关系达到重用目的
- 迪米特原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解
设计模式
- 架构模式:软件设计中的高层决策,如C/S结构就数域架构模式,反映了开发软件系统过程中所做的基本设计决策
- 设计模式:主要关注软件系统的设计,与具体的实现语言无关
- 惯用法:最低层的模式,关注软件系统的设计与实现
创建型模式
- 工厂方法模式:定义一个创建对象的接口,但由子类决定需要实例化哪一个类。工厂方法使得子类实例化的过程推迟。速记:动态生产对象
- 抽象工厂模式:提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类。速记关键字:生产成系列对象
- 原型模式:用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象。速记:克隆对象。
- 单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点。速记:单实例
- 构建器模式:讲一个复杂类的表示与其构造分离,相同的构建过程能得出不同的表示。速记关键字:复杂对象构造
行为型模式
- 职责链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 模板方法模式
- 访问者模式
结构型模式
- 适配器模式
- 桥接模式
- 组合模式
- 装饰模式
- 外观模式
- 享元模式
- 代理模式
Web应用设计
- 架构:MVC、MVP、MVVM、Rest、Webservice、微服务
- 缓存:MenCache、Redis、Squid
- 并发分流:集群(负载均衡)、CDN
- 持久化:Hibernate、Mybatis
- 分布存储:Hadoop、FastDFS
- Web应用服务器:Apache、WebSphere、WebLogic、Tomcat、JBoss
测试与评审
- 尽早、不断地进行测试
- 程序员避免测试自己设计的程序
- 既要选择有效、合理的数据,也要选择无效、不合理的数据
- 修改后要进行回归测试
- 尚未发现的错误数量与该程序已发现错误数成正比
动态测试
- 黑盒测试法
- 等价类划分
- 边界值分析
- 错误推测
- 因果图
- 白盒测试法
- 基本路径测试
- 循环覆盖测试
- 逻辑覆盖测试
- 语句覆盖、判定覆盖、条件覆盖、条件判断覆盖、点覆盖、边覆盖、路径覆盖
- 灰盒测试法
静态测试
- 桌前检查
- 代码审查
- 代码走查
测试阶段
- 单元测试
- 集成测试
- 确认测试
- 内部确认测试
- Alpha测试:在开发环境或实验室内进行的测试,一般由内部人员进行
- Beta测试:在生产环境进行的测试,由最终用户进行
- 系统测试
- 安全性测试
- 压力测试
- 性能测试
- 负载测试
- 强度测试
- 容量测试
- 可靠性测试
- 可用性测试
新旧系统转换策略
遗留系统的处理
-
- 高技术水平,低商业价值:集成
- 高技术水平,高商业价值:改造
- 低技术水平,低商业价值:淘汰
- 低技术水平,高商业价值:继承,兼容功能性模型和数据模型
系统运行与维护
可维护性
- 易分析性
- 易改变性
- 稳定性
- 易测试性
维护类型
- 改正性维护:改bug
- 适应性维护:适应技术和管理的需求变化
- 预防性维护:
- 完善性维护:扩充功能和改善性能为以后的维护做准备
TCP/IP协议
网络层
- IP:Internet协议,无连接、不可靠
- ICMP:网际报文控制,专用发送差错报文,PING命令来自该协议
- ARP:地址解析协议,实现IP地址向物理地址(MAC地址)的转换
- RARP:逆地址解析协议,实现物理地址(MAC地址)向IP地址的转换
- IGMP:负责IP 组播成员管理的协议,用来在IP 主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系
传输层
- TCP:传输控制协议,是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过**三次“对话”**才能建立起来。可靠
- UDP:用户数据报协议,非连接的协议,传输数据之前源端和终端不建立连接,不可靠,但有助于提高传输速率
应用层
- POP3:110端口,邮件收取
- SMTP:25端口,邮件发送
- FTP:20数据端口/21控制端口,文件传输协议
- HTTP:80端口,超文本传输协议,网页传输
- DHCP:67端口,IP地址自动分配
- SNMP:161端口,简单网络管理协议
- DNS:53端口,域名解析协议,记录域名与IP的映射关系
DHCP协议
- 租约默认为8天
- 租约过半时,客户机需要向DHCP服务器申请续租
- 租约超过87.5%时,如果仍然没有和放出提供IP的DHCP服务器联系上,则开始联系其他的DHCP服务器,
- windows系统假IP:169.254.X.X;linux系统假IP:0.0.0.0
DNS协议
- 递归查询:服务器必须回答目标IP与域名的映射关系
- 迭代查询:服务器收到一次迭代查询回复一次结果,不一定是目标IP与域名的映射,也可以是其他DNS服务器的地址。
主机向本地域名服务器的查询采用递归查询,本地域名服务器向根域名服务器的查询差用迭代查询。
如果服务器有向外的箭头,则为递归,没有向外的箭头,则为迭代。
网络故障诊断
- Ping:检查网络是否连通
- tracert:确定IP数据包访问目标所采取的的路径,若网络不通,能定位到具体哪个结点不同
- ipconfig:显示TCP/IP网络配置值,如:IP地址,MAC地址,网关地址等
- Netstat:显示网络连接、路由表和网络接口信息
网络规划与设计
- 需求规范
- 通信规范
- 逻辑网络设计:利用需求分析和现有网络体系分析的结果来设计逻辑网络结构,得到逻辑网络设计文档,包括:
- 逻辑网络设计图
- IP地址方案
- 安全方案
- 照片和培训网络员工的具体说明
- 对软硬件、服务、员工和培训的费用初步估计
- 物理网络设计:对逻辑网络设计的物理实现,通过对设备的具体物理分布、运行环境等确定,输出如下内容:
- 网络物理结构图和布线方案
- 设备和部件的详细列表清单
- 软硬件和安装费用的估算
- 安装后的测试计划
- 用户的培训计划
- 实施阶段
综合布线系统
- 工作区子系统(Work Area):用户工作区域,主要包括插座面板、模块、跳线。
- 水平干线子系统(Floor distributor):从各区域配线间至工作区用户信息插座,由水平电缆、中间配线设备等组成
- 管理区子系统(Telecommunications room):设置在楼层配线房、弱电井内,是水平系统电缆端接的场所,也是主干系统电缆端接的场所
- 垂直干线子系统(Building backbone cabling):把各分层配线架与主配线架相连,用主干电缆提供楼层之间通信的通道,使整个布线系统组成一个有机的整体
- 设备间子系统(Eqiupment):大楼中数据、语音垂直主干线缆终接的场所,就是我们常说的机房
- 建筑群子系统(Campus distributor):涉及两幢上的建筑
PV操作
- P:通过
- V:释放
- S:信号量
进程开始先进行P操作,对信号量减1,如果小于0则阻塞,不允许通过
进程结束后进行V操作,对信号量加1,如果小于等于0则从阻塞进程中拿出进程。
软件能力成熟度(CMM)
- 初始级:未加定义的随意过程,软件过程的特点是无秩序的
- 可重复级:规则化和纪律化的过程,以建立了基本的项目管理过程,可用于对成本、进度和功能特性进行跟踪。有章可循并能重复以往取得的成功
- 已定义级:标准的和一致的过程,用过管理的和工程的软件过程均已文档化、标准化
- 已管理级:可预测的过程,软件过程和产品质量有详细的度量标准。软件过程和产品质量得到了定量的认识和控制
- 优化级:持续改进的过程,通过对来自过程、新概念和新技术等方面的各种有用信息的定量分析,不断地、持续性地对过程进行改进
嵌入式操作系统
- 微型化:从性能和成本角度考虑,希望占用资源和系统代码量少
- 可定制:从减少成本和缩短研发周期考虑,要求嵌入式操作系统能运行在不同的微处理器平台上,能针对硬件变化进行结构与功能上的配置,以满足不同应用需要
- 实时性:嵌入式操作系统主要应用于过程控制、数据采集、传输通信等需要迅速响应的场合,实时性要求高
- 可靠性:系统构件、模块和体系结构必须达到应有的可靠性,对关键要害应用还要提供容错和防故障措施
- 易移植性:采用硬件抽象层和板级支持包的底层设计技术,提高系统的易移植性
IP地址与子网划分
IP地址: 网络前缀,主机号
32位2进制数值表示
- A类地址:0.0.0.0~127.255.255.255
- B类地址:128.0.0.0~191.255.255.255
- C类地址:192.0.0.0~223.255.255.255
A类地址前8位是网络前缀,B类地址前16位是网络前缀,C类地址前24位是网络前缀
子网掩码:用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。
如:地址202.115.192.0/19,把网络分成31个子网,则子网掩码为?
- /19表示前19位是网络为
- 31个子网需要 5 位表示(2^5 ≥ 31,2^4≤31)
- 所有前19+5位是掩码位,即前24位为1,后8位为0
- 故子网掩码为:255.255.255.0
再如:将B类IP地址168.195.0.0划分为若干子网,每个子网内有主机700台,则子网掩码为?
- B类地址前16位为网络位
- 700台主机需要10个主机位(2^10 ≥700,2^9≤700)
- 所以前22位为网络位,用掩码1覆盖
- 故子网掩码为255.255.252.0 (11111111.11111111.11111100.00000000)
防火墙
- 网络级:保护整个网络不受非法入侵,隔离内网和外网
- 包过滤
- 状态检测
- 应用级:控制对应用程序的访问, 即允许访问某些应用程序而阻止访问其他应用程序
- 双穴主机
- 屏蔽主机
- 屏蔽子网:安全性最高。在内网和外网之间建立隔离区,称为DMZ非军事区,存放对外通讯的服务器(堡垒机)
数据库并发控制
事务:访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。
- 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
- 一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
- 隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
- 持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
并发产生的问题:
- 丢失更新:两个进程在读取同一组数据时,一组commit了更新,另一组未同步此更新,故发生丢失更新
- T1进程,读A=10,写A=A-5写回
- T2进程,读A=10,写A=A-8写回此时由于进程T1操作,数据库中A已经等于5,但T2进程还是用的A=10进行计算写回,数据库中值为2,覆盖了5的值,造成丢失更新。
- 不可重复读:一个进程两次读取数据的结果不同,原因是另一个进程在两次读取过程中修改了数据
- T1进程,读A=20,B=30,求和A+B=50,第二次读(验算)A=70,B=30,求和A+B=100。两次读取计算的结果不同。
- T2进程在T1进程两次读操作之间修改了A的值为70。
- 读脏数据:两个进程,一个进程对数据进行修改,还未提交,另一个读取了这个未提交的数据,视为脏数据。或者进程提交之后回滚了提交,回滚前的数据视为脏数据。
反规范化
由于规范化会使表不断地拆分,从而导致数据表过多,这样虽然减少了数据冗余,提高了增删改的速度,但是增加了查询的作量,系统需要进行多次连接才能查到数据,使得系统的效率大大的下降。
技术手段:
- 增加派生列:在表中增加可以由本表或其他表中数据计算生成的列,减少查询时的连接操作并避免计算或使用集合函数。
- 增加冗余列:在多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作
- 重新组表:如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
- 分割表:
- 垂直分割表:对列进行分割,把主键和部分列放到一个表里,主键和其他列放到另一张表里,减少查询的是I/O次数
- 水平分割表:对行进行分割,把某个范围的数据单独拿出放到一张表里,主要用于表数据规模很大,表中数据相对独立或数据需要存到多个介质上时使用。
可能带来的问题:
- 数据的重复存储,浪费了磁盘空间,可能出现数据的完整性问题。
- 为了保障数据的一致性,增加了数据维护的复杂性,会降低修改速度