软考学习中
前言
这篇文章是我突发奇想后,开始写的。目的是为了巩固学过的知识。
下面的内容是关于软考之中的中级软件设计师方面的。
一、基础知识部分
病毒篇
震网,指一种蠕虫病毒。它的复杂程度远超一般电脑黑客的能力。这种震网病毒于2010年6月首次被检测出来,是第 一个专门定向攻击真实世界中基础(能源)设施的“蠕虫”病毒,比如核电站,水坝,国家电网。
此外,引导区病毒破坏的是引导盘、文件目录等;宏病毒破坏的是OFFICE文件相关;木马病毒的作用一般强调控制操作。
操作系统
I/O管理软件
用户级I/O层:
中断处理程序:
设备驱动程序:
设备无关I/O层:
硬件:
设备管理
I/O软件隐藏了I/O操作实现的细节
I/O软件向用户提供的是逻辑接口
I/O软件将硬件与较高层次的软件隔断开来
协议篇
MIME它是一个互联网标准,扩展了电子邮件标准,使其能够支持,与安全无关。
与安全电子邮件相关的是S/MIME安全多用途互联网邮件扩展协议。
SSL(文件安全)和HTTPS涉及到(SMTP)邮件传输过程的安全。
GP(全称:Pretty Good Privacy,优良保密协议),是一套用于信息加密、检验、查看、解析、收藏、证明的应用程序,可用于加密电子邮件内容。
URL格式:协议://主机名.域名.域名后缀或ip地址(:端口号)/目录/文件名
FTP文件共享(可靠但不安全)
TFTP文件共享(不可靠但不安全)
TELNET:远程登录
IPSec工作于网络层,为IP数据报文进行加密
PP2P工作于数据链路层,用于链路加密
HTTPS是HTTP与SSL的结合体,为传输层以上层次数据加密
TLS安全传输层协议用于在两个通信应用程序之间提供保密性和数据完整性.
软件工程篇
数据流图遵循自顶向下,由抽象到具体的原则。
数据结构与算法基础
算法策略
动态规划:最优子结构,重叠子问题
贪心:
分治:
回溯:深度搜索
分支限界:广度搜索
树与二叉树的特性
叶子结点个数:[n*(k-1)+1]/k
系统开发基础
软件质量保证
1.发现功能、逻辑或实现的错误
2.证实经过评审的软件的确满足需求
3.保证软件的表示符合预定义的标准
4.得到一种一致的方式开发的软件
5.使项目更易管理
测试分类与阶段任务划分
自顶向下集成
软件过程改进/成熟度模型
CL0(未完成的):未执行或未得到
CL1(已执行的):可标识的输入产品转换为可标识的输出产品
CL2(已管理的):集中于已管理的过程的制度化
CL3(已定义级):集中于已定义的过程的制度化
CL4(定量管理的):集中于可定量管理的过程的制度化
CL5(优化的):使用量化手段改变和优化过程域
数据流图与数据字典
基本加工的描述公式:
结构化语言、判断表(决策表)、判断树(决策树)
基本加工逻辑描述的基本原则:
- 对数据流图的每一个基本加工,必须有一个基本加工逻辑说明
- 基本加工逻辑说明必须描述基本加工如何把输入数据流变换为输出数据流的加工规矩
- 加工逻辑说明必须描述实现加工的策略而不是实现加工的细节
- 加工逻辑说明中包含的信息应是充足的,完备的,有用的,无冗余的
数据流图绘制:
数据流、加工、数据存储和外部实体命名
数据字典
数据流、数据项、数据存储和基本加工
概要设计与详细设计
详细设计阶段的主要任务:
- 对模块内的数据结构进行设计
- 对数据库进行物理设计
- 对每个模块进行详细的算法设计
- 代码设计、输入/输出设计、用户界面设计等
概要设计阶段的主要任务:
- 软件系统总体结构设计,将系统划分成模块
- 确定每个模块的功能
- 确定模块之间的调用关系
- 确定模块之间的接口,即模块之间传递的信息
- 评价模块结构的质量
- 数据结构及数据库设计
软件维护相关概念
软件维护工具
1、版本控制工具
2、文档分析工具
3、开发信息库工具
4、逆向工程工具
5、再工程工具
6、配置管理支持工具
架构设计
管道过滤器
1、具有良好的隐蔽和高内聚、低耦合的特点
2、允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成
3、支持软件重用
4、支持并行执行
5、允许对一些如吞吐量、死锁等属性的分析
软件设计
MVC:可视化界面(View)、UI处理逻辑(Controller)和业务逻辑(Model)
分离、解耦后
1、有利于代码重用
2、提高系统的可维护性
3、提高系统的开发效率
4、由于需要分层调用,所以不能提高系统的运行效率
开发模型
增量模型:
计算机网络篇
ISO七层模型
会话层:负责创建、管理喝维护会话,接收来自输出层的数据,负责建立、管理和终止表示层实体之间的通话会话,支持它们之间的数据交换。
应用层:为计算机用户、各种应用程序以及网络提供接口,也为用户直接提供各种网络服务。
表示层:负责数据编码、格式转换、数据加密,提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
传输层
网络层
数据链路层
物理层
程序设计语言的基本成分包括数据、运算、控制和传输等。
程序设计语言的控制成分包括顺序、选择和循环3种结构。
IPv6:128
IPv4:32
2^128/2^32 = 2^96
协议应用提升
MIME:多用途互联网邮件扩展类型
SMTP:邮件传输协议
POP3:邮件收取协议
IMAP4:交互式数据消息访问协议第四个版本
ARP协议
ARP协议:地址解析协议,作用是由IP地址转换成MAC地址
RARP协议: 反地址解析协议,作用是MAC地址转换成IP地址
对于ARP而言,请求是广播发送,ARP响应是单播发送
故有ARP Request采用广播进行传送,ARP Response采用单播进行传送
计算机网络常用命令
网络命令
netstat:监控TCP/IP
nslookup:监测DNS域名解析
ping:测试目标地址连通性
tracert:路由跟踪实用程序
常见的TCP/IP协议基础
- 输入要访问的域名
- 进行域名解析获取IP地址
- 建立TCP连接
- 进行FTP控制连接和数据连接
- 最后响应TCP命令
知识产权
著作权:
修改权、署名权和保护作品完整权是永久保护的。
其他著作权保护期限是作者终身及其死后50年。商标权可以延长。
模块设计原则
原则
1.高内聚,低耦合
2.模块的大小要适中
3.深度和宽度适当
模块域
模块控制域: 这个模块本身以及所有直接或间接从属于它的模块的集合
模块作用域: 指受该模块内一个判定所影响的所有模块的集合
模块的作用域应该在控制域范围之内
耦合类型
内聚类型
设计模式
分类:
创建型(抽象了实例化过程,帮助系统独立于如何创建、组合和表示它 的那些对象,如Singleton模式:保证类只能有一个实例)
结构型(采用继承机制灵活地组 合类和对象以获得更大的结构)
行为型(使用继承机制在类间分派行为,描述对象或类的 模式以及其通信模式,如 Observer 模式:一旦模型发生变化所有视图都会得到通知)
项目成本估算模型
1.应用组装模型:对象点
2.早期设计阶段:功能点
3.体系结构模型:代码行数
后缀表达式(逆波兰式)-->后序遍历
信息安全
网络攻击
重放攻击:攻击者发送一个目的主机已接受过的包,来达到欺骗系统的目的。
拒绝服务:通过向服务器发送大量垃圾信息或干扰信息的方式
数据截取攻击:黑客通过窃取或截取网络中传输的数据包,来获得敏感信息
数据流分析攻击:攻击者对网络流量进行捕获、分析和处理,从而获取其中的敏感信息
主动攻击:拒绝服务攻击、分布式拒绝服务、信息篡改、资源使用、欺骗、伪装、重放
被动攻击:嗅探、信息收集
网络安全协议
HTTPS = HTTP + SSL
IPSec:网络层,为IP数据报文进行加密
PP2P:数据链路层,用于链路加密
TLS:传输层,用于在两个通信应用程序之间提供保密性和数据完整性
对称加密与非对称加密
非对称加密:RSA
信息摘要:SHA-1、MD5
对称加密:RC-5(适合大量的明文加密)
线程
共享:进程代码段,进程的共有数据,信号的处理器,进程XXX都可以共享
独有:线程ID,寄存器组的值,错误返回码,线程的堆栈
总结:单单进程出现,一般可以共享,线程参与,只能独有
软件工程开发模型
喷泉模型
面向对象,迭代无间隙,以用户需求为动力
计算机性能指标
可靠性:MTTF/(1+MTTF)
可用性:MTBF/(1+MTBF)
可维护性:1/(1+MTTR)
面向对象
1.特殊(子元素)/一般关系(父元素)==(泛化关系)
2.多态
参数多态:应用广泛,最纯的多态
包含多态:运动,子类型化
过载多态:同一名上下文有不同类型
强制多态:编译程序把类型强行变换
3.设计原则
共同重用:重用一个类相当于重用了包中所有类
开放封闭:对扩展开放,对修改封闭
接口隔离:使用多接口比单接口好
共同封闭:可以改变包中所有的类,却不能改变别的包
单一责任原则:设计目的单一的类
无环依赖原则:包的依赖关系图中不允许存在环
依赖倒置原则:依赖抽象,针对接口编程
里氏替换原则:子类可以替换父类
基本概念
动态绑定:运行时
静态绑定:编译时
参数绑定:一种实现参数值传递给方法或函数的过程
过载绑定:实现多态
开发阶段
设计阶段
识别类及对象
定义属性
定义服务
识别关系
识别包
活动(分析阶段)
认定对象(名词)
组织对象(抽象成类)
对象间的相互作用
基于对象的基本操作
程序设计
程序设计范型
选择一种OOPL
测试
算法层
类层
模板层
系统层
UML
对象图:某一时刻一组对象
类图:一组对象、接口、协作
用例图:一组用例、参与者
多重图:1(A)对n(B),1(B)对1(A)
组件图:一组组件之间的组织和依赖
通信图:交互图,强调收发消息的对象或参与者的组织结构
部署图:软件中组件与硬件之间的物理关系
类图
关联关系:链
依赖关系:一件事物发生改变影响另一件事件
聚合关系:整体与部分生命周期不同
组合关系:整体与部分生命周期相同
数据库
分布式数据库
1.共享性:数据存储在不同的结点数据共享
2.自治性:每个结点对本地数据都能独立管理
3.可用性:某一处瘫痪,不会导致其他也瘫痪
4.分布性:不同场地上的存储
三级模式两级映射
外模式(用户模式):视图
模式(概念模式):表
内模式(存储模式):存储文件
触发器:更新机制,但不安全
存储过程:定义代码供用户使用,安全
视图:查询数据,不能更新数据,安全
索引:提高查询效率,不能更新数据
三级模式结构
模式/内模式的映像:
外模式/模式的映像:
数据仓库
OLAP:提供用户一个便利的多维度观点和方法
Data Extraction:从数据源中提取数据的过程
OLTP:面向交易订单处理过程
ETL:将数据从来源段经过抽取、转换、加载至目的端的过程
数据结构与算法
顺序存储:逻辑和物理相对位置一致
链表存储:指针链接次序
索引存储:存放数据元素与元素关系的存储方式
哈希存储:哈希函数+哈希地址
计算机组成与体系结构
在冯诺依曼结构中,程序指令与数据存在同一个存储器中。
海明校验码
2^r = n+r+1
码制
[-1,(1-2^-(n-1))],共2^n个数。
Cache
全相联映像块冲突最小,其次是组相联映像,直接映像块冲突最大。
计算机性能指标
可靠性:MTTF/(1+MTTF)
可用性:MTBF/(1+MTBF)
可维护性:1/(1+MTTR)
存储器
分类
DRAM集成率相对较高,功耗相对较小,需要动态更新
SRAM集成率相对较低,功耗相对较大,不需要动态更新
类型
DRAM:动态随机存取存储器(主存)
SRAM:静态随机存取存储器,周期性更新
FLASH:闪存,电子可擦除只读存储器
EEPROM:电擦除可编程的只读存储器
层次化存储体系
A.掉电后信息不会丢失,属于非易失性存储器
B.以块为单位进行删除操作
C.在嵌入式系统中可以用Flash来代替ROM存储器
存储设备访问速度:通用寄存器 >Cache >内存 >硬盘
中断
程序现场信息保存在堆栈部分
流水线
RISC简单、少、硬布线逻辑
CISC复杂、多、微程序
网络防护(防火墙)
防火墙配置ACL
包过滤防火墙/网络层防火墙
程序设计语言基础
编程器工作过程
记号流:词法分析的输出,语法分析的输入
字符流/字节流:
源程序:
分析树:
括号不匹配是典型的语法错误,会在语法分析阶段检测出来
词法分析器:读入源程序,对其进行一定的切分,得到记号流
语法分析:对结构上的正确的源程序进行上下文有关性质的审查,进行类型审查
编译器:将源代码转换成目标机器的指令集,这个过程叫做目标代码生成
Python
[1,2]*2=>[1,2,1,2]:*2重复两次
不可变数据:Number,String,Tuple
可变数据:List,Dictionary,Set
语义特点:跨平台,开源,面向对象,可移植性,解释性(语言),可扩展性,动态编程
域名
输入要访问的域名之后,
先域名解析获得IP地址,
再建立TCP连接,
再进行TFP控制连接和数据连接,
最后响应TCP命令。
嵌入式操作系统
特点:
1.微型化
2.可定制性
3.实时性
4.可靠性
5.易移植性
寻址方式
立即寻址>寄存器寻址>直接寻址
总线
PCI总线:并行内总线
SCSI总线:并行外总线
注:并行可以提高效率
输入/输出技术
直接查询控制:无条件传送和程序查询方式,CPU没空做别的事
中断方式:CPU无需等待
DMA:直接寄存器采取方式,不需要CPU干涉
机器周期:把指令的执行过程划分
指令周期:取出一条指令并执行这条指令的时间(执行一条指令的时间)
总线周期:CPU访问一次I/O接口的时间
存储周期:连续启动两次操作所间隔的最小时间,体现主存的速度
加密算法
非对称加密:RSA、ECC
公钥加密:RSA、EICGama,背包算法
对称加密:DES、3DES、AES
流加密:数据流,SEAL、RC4、ORYX
分组加密:模块,DES、AES
信息摘要:数字摘要,MD5、SHA、MAC
语义分析阶段
分析各语法结构的含义,检查是否有包含静态语义错误
符号表:记录符号
决策表:用于测试
广义表:数据结构
索引表:数据库的逻辑与物理的关系
敏捷统一工程(AUP)
在大型任务上连续
在小型活动上迭代
采用经典的UP阶段性活动,即初始、精化、构建和转换
敏捷方法
极限编程:轻量级的开发方法,四大价值观,五大原则。
水晶法:强调经常交付,认为每一种不同的项目都不需要一套不同的策略、约定和方法论。
并列征求法:核心是迭代、增量交付,按照30天进行迭代开发交付可实际运行的软件。
自适应软件开发:三个非线性的,重迭的开发阶段:猜测、合作、学习。
ISO/IEC
软件质量特性:
可移植性:
适应性
易安装性
一致性
易替换性
可维护性:
功能性:
可靠性:
易使用性:
效率:
软件工程
测试
需求分析==系统测试,验收测试
概要设计==集成测试
详细设计==单元测试
软件实现==编码部分
需求分析
文档
可行性研究报告、总体规划报告、项目开发计划
用户手册是开发完成后交付给客户的。
详细设计
软件详细设计阶段的主要任务包括:对模块内的数据结构进行设计,对数据库进行物理设计,对每个模块进行详细的算法设计,代码设计、输入/输出设计、用户界面设计等其他设计。
软件概要设计阶段的主要任务包括:
(1)软件系统总体结构设计,将系统划分成模块,确定每个模块的功能;确定模块之间的调用关系,确定模块之间的接口,即模块之间传递的信息;评价模块结构的质量。
(2) 数据结构及数据库设计
概要设计
进行软件体系结构设计、初步的类设计/数据设计、结构设计。
软件维护
系统可维护性:
可理解性
可测试性
可修改性
类型:
改正性维护
完善性维护
预防性维护
适应性维护
数据字典中加工逻辑
数据字典包含4类条目: 数据流、数据项、数据存储和基本加工
基本加工条目是用来说明DFD中基本加工的外理逻辑的,由于下层的基本加工是由上层加工分解而来只要有了基本加工的说明就可理解其他加工。
对每一个基本加工,都应该有一个加工逻辑来说明。
加工描术了输入数据流到输出数据流之间的编号,也就是输入数据流经过什么外理后变成了输出数据流。
加工逻辑对其进行说明,也就是描述了该过程的加工规则。
加工逻辑是位于需求分析阶段,此时具体的数据结构和算法并没有进行设计。
常用的加工逻辑描述方法有结构化语言、判定表和判定树三种。
CPU组成
程序计数器PC:存储下一条要执行的指令的地址
指令寄存器IR:存储即将要执行的指令
累加(寄存)器:存放算术逻辑运算部件ALU运算的结果信息
地址寄存器:保存当前CPU所要访问的内存单元地址
主存寄存器MAR:保存当前CPU所访问的内存单元的地址
条件寄存器PSW:存储状态标志与控制标志
数组与矩阵
稀疏矩阵:三元顺序表+十字链表
算法
排序
直接插入排序:是在有序序列中插入一个元素后,保持序列有序。排序时在插入最后一个元素之前,若待插入的元素小于有序序列的所有元素,则有序序列的所有元素需后移,因此,在第一趟排序结束后,不能保证将序列中的某个元素在最终有序序列中的位置确定下来。
洗择类排席:每一轮会选择最值(最大值或最小值)与第一个位置进行交换,此时确定第一人元素位置。
冒泡排序: 每一轮会让最值相邻交换直至放到最终的位置,
快速排序:每一轮会根据基准元素划分左右数组,此时基准元素的位置可以确定,因此的也满足要求
归并排序:以二路归并排序为例,是将两个有序子序列合并为一个有序序列,第一趟处理的对象是若干人有序子序列,归并后子序列个数会少一半,但是还不能确定任何一个元素在最终序列中的位置。
软件开发方法
统计过程模型(软件开发生命周期):
移交阶段:关注于软件提交方面的工作,产生软件增量
精化阶段:在理解了最初的领域范围之后进行需求分析和架构演进
构件阶段:关注系统的构建,产生实现模型
起始阶段:专注于项目的初创活动
面向对象
软件测试
系统层:把各个子系统组装成完整的面向对象软件系统,在组装过程中同时进行测试
算法层:测试类中定义的每个方法,基本上相当于传统软件测试中的单元测试
类层:测试封装在同一个类中的所有方法与属性之间的相互作用。
模块层:测试一组协同工作的类之间的相互作用
面向对象开发各阶段划分及任务
面向对象分析:认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息。
面向对象设计:识别类及对象、定义属性、定义服务、识别关系
面向对象程序设计:程序设计范型、选择一种OOPL
对象测试:算法层、类层、模板层、系统层
项目管理
风险管理
风险暴露/风险曝光度:风险的优先级
配置管理
版本控制
变更控制
过程支持
持续更新中…………