目录
一、软件工程
1.需求
1.1 需求分类
1.2 需求分析
2.UML
2.1 类图
2.2 对象图
2.3 构件图
2.4 组合结构图
2.5 用例图
2.6 顺序图
2.7 通信图
2.8 定时图
2.9 状态图
2.10 活动图
2.11 部署图
3.软件架构
4.软件设计
4.1 设计模式分类
4.2 能力成熟度模型CMMI
5.软件测试
5.1 测试方法分类
5.2 测试类型
5.3 国网公司的信息系统测试
6.软件集成
二、信息安全
1. 信息安全概念
2.信息安全技术
2.1 防火墙
2.2 入侵检测与防护
2.3.VPN
2.4 安全扫描
2.5 蜜罐技术
3.信息系统的安全保护保护
4.计算机系统安全防护能力的五个等级
5.加密技术
6.数字签名
三、新技术
1.大数据
2.云计算
2.1 云计算的三类服务
2.2 云计算的分类
3.人工智能
4.区块链
需求的特点是完整性、无二义性、一致性、可测试性、确定性等等。不过在实际过程中,需求经常会出现变化,领导可能过几天就换了个想法,刚根据原来的想法做完顶层设计,又要改,所以为了避免或者减少这样情况发生,让事儿更顺一些,要做需求管理,找个会议或者什么形式,把已经确定好的需求定下来,以此作为需求基准,也叫需求基线,以后所有的内容都以这个版本来。
书上说,需求分析主要有俩方法,一个是结构化方法SA,就是使用ER图、数据流图、状态转换图来做数据模型、功能模型和状态模型;一个是面向对象方法OO,用类和对象那一套来搞。
不过这两种方法都不能称之为方法,实际上我们也没完全这么干,拿到一个需求后,首先第一个事儿是要搞懂这个需求是要干啥(这就是传说中的需求的确定性,无二义性,可验证性等等),然后就直接想业务模块了,比如要做一个供应链公共服务平台,实现能源产业链上下游企业数据联通共享。那供应链都有啥?设备制造企业、物流企业、运维服务商、招标代理机构等等,这一步是干啥,是识别这个需求都涉及哪些用户群体,然后针对这些用户群体,我们的系统能给他们提供哪些服务,到这一步就可以根据经验或者根据领导意思写了,比如能给制造企业做能效分析,帮你省电费,可以帮你做流水线改造,帮你提质增效等等,其他的也一样。然后呢,这只是几个功能模块,那怎么实现这业务需求呢?要把这产业链打通,那这几个模块之间肯定得有关系,啥关系呢?数据交互呗,哪个模块给哪个模块啥数据,能干啥,提供啥服务,能落地啥场景。嗯,这样,整体的一个简单的业务架构就出来了。所以实际中,SA和OO都没有完全用,但是理念是通的,只是在你脑海里有这么一个短暂的过程。
需求分析的过程,在国网公司,就是写文档的过程,最终的产物是业务需求规格说明书和软件需求规格说明书(SRS)。一般的文档也得七八十页,每个功能需求点是啥,业务流程是啥,需要啥样的硬件,并发量多少等等,都会有,前面说的功能性、非功能性和设计约束都会有的。
PS:国网公司有自己的技术路线,所以设计约束是规定好的。
需求验证是啥?其实就是你写完的需求规格说明书中提到的需求有人认领,是用户或者甲方提出来的需求,不能是自己杜撰的,一般的形式就是搞需求评审会,甲方乙方都会参加,把需求过一遍(肯定就是过ppt或者excel,功能模块或者功能点级别的,基本不会过word,毕竟字数太多了),然后该改的改,该加的加。然后评审完之后,改完之后,找甲方再看看,没啥问题签字,嗯这就算需求验证完了,里边所有的需求甲方都认,这样你系统的范围就固定了,免得干了一些甲方不认的活,扯皮,嗯。
UML是一种可视化的建模语言,它不是过程,也不是方法,适用于迭代式开发过程。
UML有4种关系,分别是依赖、关联、泛化、实现。我一开始学这玩意的时候也不懂,后来就记例子,比如依赖是啥,鱼依赖水,水没了,那鱼也就死了,鱼和水就是依赖关系;关联呢?其实就是有关系的意思;泛化就是面向对象中的继承的含义;实现就是编程语言中类和接口的关系。
UML中类的关系有关联、依赖、泛化、聚合、组合和实现这6种。把下面这个图多画画,就行了。

UML有5种视图,分别是逻辑视图、进程视图、实现视图、部署视图、用例视图。太抽象了,我不太理解。
UML有14种图,分别是类图、对象图、构件图、组合结构图、用例图、顺序图、通信图、定时图、状态图、活动图、部署图、制品图、包图、交互概览图。
能看到类跟类之间的关系,也能看到类的属性、方法。

跟类图差不多,只是描述一堆对象之间的关系。

其实是类图的变种,也是看内部结构和之间的关系,都是静态的。

顾名思义,就是组合的构件图。
用例图里边有参与者,用活动,谁跟谁,能干啥事儿都能看到,简单的识别了干系人和权限。

谁先干啥,干完之后有啥反馈,都能看到,是按照时间顺序的交互图。

顾名思义,把对象之间的消息也放上去了,我能给你啥,他能给我啥,也能看到,所以也是交互图,通信图也叫协作图。

不同参与者参与这个事儿的时间分布,能看到不同参与者的贡献度或者分布,所以也是交互图。




相关名词:敏感点指的是一个或多个构件的特性;权衡点是影响多个质量属性的特性。
软件架构风格主要分为5类:
软件架构评估技术主要分为3类,分别是基于调查问卷的方式、基于场景的方式和基于度量的方式。基于场景的评估方式最常用。
基于场景的评估方式主要包括:
基于场景的架构评估中,一般采用刺激、环境和响应三方面来对场景进行描述,分别解释一下。
软件设计主要分为结构化设计和面向对象设计。
软件设计的原则是高内聚、低耦合。
它是用来衡量一个组织(公司)软件工程的过程管理能力。每一种CMMI学科模型都有两种表示法:阶段式表示法和连续式表示法。不同表示法的模型具有不同的结构。连续式表示法强调的是单个过程域的能力,从过程域的角度考察基线和度量结果的改善,其关键术语是“能力”;而阶段式表示法强调的是组织的成熟度,从过程域集合的角度考察整个组织的过程成熟度阶段,其关键术语是“成熟度”。
CMMI共有5个级别,代表软件团队能力成熟度的5个等级,数字越大,成熟度越高,高成熟度等级表示有比较强的软件综合开发能力。
此外,企业CMMI资格有可能在招投标中有要求,好多招标文件中会写,要求CMMI4及以上资格。当然CMMI跟ISO9001有点像,只是CMMI偏向软件开发和系统集成这样的企业,ISO9001全行业通用。
国网公司信息系统上线有一套非常规范的流程,我简要在这里说两句,改天详细说。一般信息系统自己内部测试完毕后,需要找第三方进行第三方测试,测试内容包括3大项,分别是功能测试、非功能测试和安全测试。这个非功能测试也可以称之为性能测试,安全测试又分为安全功能测试、代码扫描测试和渗透测试。这五项测试都通过后,拿到第三方的三方测试报告,才能申请后续的上线流程,申请生产环境资源啊,部署啊啥的。
而且,一般来说,国网公司统建项目都要找中国电科院来测试,虽然制度上说的是有CNAS认证的都行,一般来说都找中国电科院,如果是二级单位自建项目,也大多数找电科院,尤其是移动端信息系统。
啥叫软件集成,就是把不同的软件的数据、功能、模块揉在一起,主要分为5类。
信息安全非常重要,国网公司安监部专门来管安全这方面,当然也包括信息系统安全,比如代码有没有漏洞啊,会定期扫描,扫描到漏洞还要限期整改,整改不完就要扣分,扣分就是被考核,影响工资的。
信息安全属性。
信息安全划分为如下四个层次。
硬件系统安全和操作系统安全是信息系统安全的基础。
密码和网络安全是关键技术。其中,网络安全技术包括防火墙、VPN、IDS、身份认证、安全审计、网络隔离等。
防火墙是一种较早使用、实用性很强的网络安全防御技术,它阻挡对网络的非法访问和不安全数据的传递,使得本地系统和网络免于受到许多网络安全威胁。在网络安全中,防火墙主要用于逻辑隔离外部网络与受保护的内部网络。
防火墙主要是实现网络安全的安全策略,而这种策略是预先定义好的,所以是一种静态安全技术
在策略中涉及的网络访问行为可以实施有效管理,而策略之外的网络访问行为则无法控制。
入侵检测系统:注重的是网络安全状况的监管,通过监视网络或系统资源寻找违反安全策略的行为或攻击迹象,并发出报警。大多数都是被动的。
入侵防护系统:倾向于提供主动防护,注重对入侵行为的控制。预先对入侵活动和攻击性网络流量进行拦截,避免其造成损失。
连接由客户机、传输介质和服务器三部分组成。不是采用物理的传输介质,而是使用称之为“隧道”的技术作为传输介质这个隧道是建立在公共网络或专用网络基础之上的。
常见的隧道技术包括: 点对点隧道协议 (PPTP)、第2层隧道协议 (L2TP) 和IP安全协议 (IPSec)。
安全扫描是通过扫描器的软件来完成,是最有效的网络安全检测工具之一,它可以自动检测远程或本地主机、网络系统的安全弱点以及所存在可能被利用的系统漏洞,主要包括:漏洞扫描、端口扫描、密码类扫描(发现弱口令密码)。
蜜罐是一种主动防御技术,是入侵检测技术的一个重要发展方向,也是一个“诱捕”攻击者的陷阱
蜜罐系统是一个包含漏洞的诱骗系统,它通过模拟一个或多个易受攻击的主机和服务,给攻击者提供一个容易攻击的目标。
对称加密:加密和解密是同一个密钥。如SDBI、IDEA(128bit)、RC4、DES(64bit)、3DES(128bit)
非对称加密:加密和解密是不同密钥。如RSA、ELGamal。

新技术=“大云物移智链”=大数据、云计算、物联网、移动互联网、人工智能、区块链,其实底层都是算法或者通信,这里有点偏概念。
主要过程:数据准备、数据存储和管理、计算处理、数据分析、知识展现。
云计算比较好理解。现在的百度云、阿里云、腾讯云服务器都是云计算的范畴,我自己没有设备,阿里有设备,通过Internet直接访问他们的硬件资源。
云计算的特性:动态易扩展、虚拟化。
人工智能的领域非常多,如音频、视频、图像、搜索、博弈等等等等。所有智能化的都算人工智能领域。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。本质是一个去中心化的数据库,同时是比特币的底层技术。