目录
一、软件工程
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.区块链
一、软件工程
1.需求
1.1 需求分类
业务需求:反映企业或者客户对系统的高层次的目标要求。一般来说是高层提出来的。比如领导说要做一个客户关系管理系统,用来统一管理公司的客户和签订的合作协议,方便后续合作事项落地跟踪汇总。这一句话就是业务需求。这个一般比较笼统,后续还需要拆解。用户需求:描述用户的具体目标。就是为了实现业务需求,拆解出来核心功能模块和功能点个人理解拆分到模块就算用户需求了,再细致可能就算系统需求了,比如国家电网公司的数字化项目都会拆为三级功能点,类似于下图。系统需求:分为功能需求、非功能需求和设计约束。功能需求不多说,就是那些系统功能点,非功能需求比如并发量、响应速度、交互方式、用户体验等等;设计约束比如必须采用企业中台架构,必须部署到信息内网等等。1.2 需求分析
需求的特点是完整性、无二义性、一致性、可测试性、确定性等等。不过在实际过程中,需求经常会出现变化,领导可能过几天就换了个想法,刚根据原来的想法做完顶层设计,又要改,所以为了避免或者减少这样情况发生,让事儿更顺一些,要做需求管理,找个会议或者什么形式,把已经确定好的需求定下来,以此作为需求基准,也叫需求基线,以后所有的内容都以这个版本来。
书上说,需求分析主要有俩方法,一个是结构化方法SA,就是使用ER图、数据流图、状态转换图来做数据模型、功能模型和状态模型;一个是面向对象方法OO,用类和对象那一套来搞。
不过这两种方法都不能称之为方法,实际上我们也没完全这么干,拿到一个需求后,首先第一个事儿是要搞懂这个需求是要干啥(这就是传说中的需求的确定性,无二义性,可验证性等等),然后就直接想业务模块了,比如要做一个供应链公共服务平台,实现能源产业链上下游企业数据联通共享。那供应链都有啥?设备制造企业、物流企业、运维服务商、招标代理机构等等,这一步是干啥,是识别这个需求都涉及哪些用户群体,然后针对这些用户群体,我们的系统能给他们提供哪些服务,到这一步就可以根据经验或者根据领导意思写了,比如能给制造企业做能效分析,帮你省电费,可以帮你做流水线改造,帮你提质增效等等,其他的也一样。然后呢,这只是几个功能模块,那怎么实现这业务需求呢?要把这产业链打通,那这几个模块之间肯定得有关系,啥关系呢?数据交互呗,哪个模块给哪个模块啥数据,能干啥,提供啥服务,能落地啥场景。嗯,这样,整体的一个简单的业务架构就出来了。所以实际中,SA和OO都没有完全用,但是理念是通的,只是在你脑海里有这么一个短暂的过程。
需求分析的过程,在国网公司,就是写文档的过程,最终的产物是业务需求规格说明书和软件需求规格说明书(SRS)。一般的文档也得七八十页,每个功能需求点是啥,业务流程是啥,需要啥样的硬件,并发量多少等等,都会有,前面说的功能性、非功能性和设计约束都会有的。
PS:国网公司有自己的技术路线,所以设计约束是规定好的。
需求验证是啥?其实就是你写完的需求规格说明书中提到的需求有人认领,是用户或者甲方提出来的需求,不能是自己杜撰的,一般的形式就是搞需求评审会,甲方乙方都会参加,把需求过一遍(肯定就是过ppt或者excel,功能模块或者功能点级别的,基本不会过word,毕竟字数太多了),然后该改的改,该加的加。然后评审完之后,改完之后,找甲方再看看,没啥问题签字,嗯这就算需求验证完了,里边所有的需求甲方都认,这样你系统的范围就固定了,免得干了一些甲方不认的活,扯皮,嗯。
2.UML
UML是一种可视化的建模语言,它不是过程,也不是方法,适用于迭代式开发过程。
UML有4种关系,分别是依赖、关联、泛化、实现。我一开始学这玩意的时候也不懂,后来就记例子,比如依赖是啥,鱼依赖水,水没了,那鱼也就死了,鱼和水就是依赖关系;关联呢?其实就是有关系的意思;泛化就是面向对象中的继承的含义;实现就是编程语言中类和接口的关系。
UML中类的关系有关联、依赖、泛化、聚合、组合和实现这6种。把下面这个图多画画,就行了。
UML有5种视图,分别是逻辑视图、进程视图、实现视图、部署视图、用例视图。太抽象了,我不太理解。
UML有14种图,分别是类图、对象图、构件图、组合结构图、用例图、顺序图、通信图、定时图、状态图、活动图、部署图、制品图、包图、交互概览图。
2.1 类图
能看到类跟类之间的关系,也能看到类的属性、方法。
2.2 对象图
跟类图差不多,只是描述一堆对象之间的关系。
2.3 构件图
其实是类图的变种,也是看内部结构和之间的关系,都是静态的。
2.4 组合结构图
顾名思义,就是组合的构件图。
2.5 用例图
用例图里边有参与者,用活动,谁跟谁,能干啥事儿都能看到,简单的识别了干系人和权限。
2.6 顺序图
谁先干啥,干完之后有啥反馈,都能看到,是按照时间顺序的交互图。
2.7 通信图
顾名思义,把对象之间的消息也放上去了,我能给你啥,他能给我啥,也能看到,所以也是交互图,通信图也叫协作图。
2.8 定时图
不同参与者参与这个事儿的时间分布,能看到不同参与者的贡献度或者分布,所以也是交互图。
2.9 状态图
2.10 活动图
2.11 部署图
3.软件架构
相关名词:敏感点指的是一个或多个构件的特性;权衡点是影响多个质量属性的特性。
软件架构风格主要分为5类:
数据流风格:包括批处理序列和管道/过滤器两种风格。调用/返回风格:包括主程序/子程序、数据抽象和面向对象以及层次结构。独立构建风格:包括进程通信和事件驱动的系统。虚拟机风格:包括解释器和基于规则的系统。仓库风格:包括数据库系统、黑板系统和超文本系统。
软件架构评估技术主要分为3类,分别是基于调查问卷的方式、基于场景的方式和基于度量的方式。基于场景的评估方式最常用。
基于场景的评估方式主要包括:
架构权衡分析法(ATAM)软件架构分析法(SAAM)成本效益分析法(CBAM)
基于场景的架构评估中,一般采用刺激、环境和响应三方面来对场景进行描述,分别解释一下。
刺激:场景中解释或描述项目干系人怎么引发与系统的交互部分。环境:描述刺激发生时的情况。响应:系统是如何通过架构对刺激做出反应的。、
4.软件设计
软件设计主要分为结构化设计和面向对象设计。
软件设计的原则是高内聚、低耦合。
4.1 设计模式分类
按照处理范围不同,分为类模式和对象模式。类模式处理类和子类的关系,在编译时刻就被确定;对象模式是动态的。按照目的和用途不同,分为创建型模式、结构型模式和行为型模式。4.2 能力成熟度模型CMMI
它是用来衡量一个组织(公司)软件工程的过程管理能力。每一种CMMI学科模型都有两种表示法:阶段式表示法和连续式表示法。不同表示法的模型具有不同的结构。连续式表示法强调的是单个过程域的能力,从过程域的角度考察基线和度量结果的改善,其关键术语是“能力”;而阶段式表示法强调的是组织的成熟度,从过程域集合的角度考察整个组织的过程成熟度阶段,其关键术语是“成熟度”。
CMMI共有5个级别,代表软件团队能力成熟度的5个等级,数字越大,成熟度越高,高成熟度等级表示有比较强的软件综合开发能力。
CMMI一级,执行级。在执行级水平上,软件组织对项目的目标与要做的努力很清晰,项目的目标可以实现。但是由于任务的完成带有很大的偶然性,软件组织无法保证在实施同类项目时仍然能够完成任务。项目实施能否成功主要取决于实施人员。CMMI二级,管理级。在管理级水平上,所有第一级的要求都已经达到,另外,软件组织在项目实施上能够遵守既定的计划与流程,有资源准备,权责到人,对项目相关的实施人员进行了相应的培训,对整个流程进行监测与控制,并联合上级单位对项目与流程进行审查。二级水平的软件组织对项目有一系列管理程序,避免了软件组织完成任务的随机性,保证了软件组织实施项目的成功率。CMMl三级,明确级。在明确级水平上,所有第二级的要求都已经达到,另外,软件组织能够根据自身的特殊情况及自己的标准流程,将这套管理体系与流程予以制度化。这样,软件组织不仅能够在同类项目上成功,也可以在其他项目上成功。科学管理成为软件组织的一种文化,成为软件组织的财富。CMMI四级,量化级。在量化管理级水平上,所有第三级的要求都已经达到,另外,软件组织的项目管理实现了数字化。通过数字化技术来实现流程的稳定性,实现管理的精度,降低项目实施在质量上的波动。CMMI五级,优化级。在优化级水平上,所有第四级的要求都已经达到,另外,软件组织能够充分利用信息资料,对软件组织在项目实施的过程中可能出现的次品予以预防。能够主动地改善流程,运用新技术,实现流程的优化。
此外,企业CMMI资格有可能在招投标中有要求,好多招标文件中会写,要求CMMI4及以上资格。当然CMMI跟ISO9001有点像,只是CMMI偏向软件开发和系统集成这样的企业,ISO9001全行业通用。
5.软件测试
5.1 测试方法分类
静态测试。程序不在机器上运行的测试,就是挺扯淡,干用眼睛瞪。跟代码review差不多把。没啥乱用。动态测试。程序在机器上运行的测试,包括白盒测试和黑盒测试。白盒测试是知道代码逻辑,根据代码逻辑进行测试,争取把每个判断条件,每个情况都跑一遍,也就程序员自己用;黑盒测试是不知道代码逻辑,使劲干,只要系统出来的结果跟期望不一样,那就测出问题了,很常用。5.2 测试类型
单元测试。也叫模块测试,程序员自己测。集成测试。测试的是模块之间通不通,数据对不对。确认测试。我们一般叫用户确认测试,一般有用户参与。分三类。内部确认测试、Alpha测试和Beta测试。其中,内部确认测试是项目组自己根据需求规格说明书的内容自己测;ALpha测试是让用户在开发环境上测试;Beta测试,其实就是验收测试,验收前,让用户在真实环境上用一用,点一点,看一看。系统测试。对象是完整的、集成的计算机系统,在真实系统工作环境下,验证完整的软件配置项是否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要求。挺扯淡的,没太理解,既然都验收了,为啥还搞系统测试呢?不懂。配置项测试。首先说啥是配置项,各个阶段活动的产物经审批后即可称之为软件配置项。比如合同、项目计划表、评审会的资料、批准变更的会议纪要、代码、数据库软件等等。这些玩意测啥?不懂。回归测试。回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。5.3 国网公司的信息系统测试
国网公司信息系统上线有一套非常规范的流程,我简要在这里说两句,改天详细说。一般信息系统自己内部测试完毕后,需要找第三方进行第三方测试,测试内容包括3大项,分别是功能测试、非功能测试和安全测试。这个非功能测试也可以称之为性能测试,安全测试又分为安全功能测试、代码扫描测试和渗透测试。这五项测试都通过后,拿到第三方的三方测试报告,才能申请后续的上线流程,申请生产环境资源啊,部署啊啥的。
而且,一般来说,国网公司统建项目都要找中国电科院来测试,虽然制度上说的是有CNAS认证的都行,一般来说都找中国电科院,如果是二级单位自建项目,也大多数找电科院,尤其是移动端信息系统。
6.软件集成
啥叫软件集成,就是把不同的软件的数据、功能、模块揉在一起,主要分为5类。
表示集成。就是页面集成,把别的系统的页面嵌入到这个系统中,纯黑盒集成。数据集成。把别的系统是数据拿过来,纯白盒集成。控制集成。就是接口集成,在业务逻辑层面上,通过调用API,获取他们的数据、权限等东西,也是黑盒集成。业务流程集成。有点虚,但是也有,比如国网统推的系统,协同办公,有一套流程是固定的,有一套流程是企业可以自定义的,怎么把公文从上级弄到下级,然后阅办。这种算业务流程集成。企业间的应用集成。嗯,字面意思吧。
二、信息安全
信息安全非常重要,国网公司安监部专门来管安全这方面,当然也包括信息系统安全,比如代码有没有漏洞啊,会定期扫描,扫描到漏洞还要限期整改,整改不完就要扣分,扣分就是被考核,影响工资的。
1. 信息安全概念
信息安全属性。
秘密性:信息不被未授权者知晓的属性。完整性:信息是正确的、真实的、未被篡改的、完整无缺的属性。可用性:信息可以随时正常使用的属性。
信息安全划分为如下四个层次。
设备安全:是信息系统安全的首要问题,主要包括稳定性、可靠性和可用性。数据安全:安全属性包括秘密性、完整性和可用性。内容安全:是信息安全在政治、法律、道德上的要求。行为安全:是动态安全,主要是强调过程安全。行为有秘密性、完整性、可控性。
2.信息安全技术
硬件系统安全和操作系统安全是信息系统安全的基础。
密码和网络安全是关键技术。其中,网络安全技术包括防火墙、VPN、IDS、身份认证、安全审计、网络隔离等。
2.1 防火墙
防火墙是一种较早使用、实用性很强的网络安全防御技术,它阻挡对网络的非法访问和不安全数据的传递,使得本地系统和网络免于受到许多网络安全威胁。在网络安全中,防火墙主要用于逻辑隔离外部网络与受保护的内部网络。
防火墙主要是实现网络安全的安全策略,而这种策略是预先定义好的,所以是一种静态安全技术
在策略中涉及的网络访问行为可以实施有效管理,而策略之外的网络访问行为则无法控制。
2.2 入侵检测与防护
入侵检测系统:注重的是网络安全状况的监管,通过监视网络或系统资源寻找违反安全策略的行为或攻击迹象,并发出报警。大多数都是被动的。
入侵防护系统:倾向于提供主动防护,注重对入侵行为的控制。预先对入侵活动和攻击性网络流量进行拦截,避免其造成损失。
2.3.VPN
连接由客户机、传输介质和服务器三部分组成。不是采用物理的传输介质,而是使用称之为“隧道”的技术作为传输介质这个隧道是建立在公共网络或专用网络基础之上的。
常见的隧道技术包括:点对点隧道协议 (PPTP)、第2层隧道协议 (L2TP) 和IP安全协议 (IPSec)。
2.4 安全扫描
安全扫描是通过扫描器的软件来完成,是最有效的网络安全检测工具之一,它可以自动检测远程或本地主机、网络系统的安全弱点以及所存在可能被利用的系统漏洞,主要包括:漏洞扫描、端口扫描、密码类扫描(发现弱口令密码)。
2.5 蜜罐技术
蜜罐是一种主动防御技术,是入侵检测技术的一个重要发展方向,也是一个“诱捕”攻击者的陷阱
蜜罐系统是一个包含漏洞的诱骗系统,它通过模拟一个或多个易受攻击的主机和服务,给攻击者提供一个容易攻击的目标。
3.信息系统的安全保护保护
第一级。个人合法权益造成损害。第二级。个人合法权益严重损害,社会利益遭到损害。第三级。社会利益严重损害,国家安全遭到损害。第四级。社会利益特别严重损害,国家安全遭到严重损害。第五级。国安安全遭到特别严重损害。4.计算机系统安全防护能力的五个等级
用户自主保护级。普通内联网用户。系统审计保护级。适用于内联网或国际网进行商务活动,需要保密的非重要单位。安全标记保护级。适用于地方各级国家机关、金融单位机构、邮电通信、能源与水源供给部门、交通、大型工商与信息技术企业、重点工程建设等单位。结构化保护级。适用于中央级国家机关、广播电视部门、重点物资存储单位、社会应急服务部门、尖端科技企业集团、国家重点科研单位机构和国防建设等部门。访问验证保护级。适用于国家关键部门和依法需要对计算机信息系统实施特殊隔离的单位。5.加密技术
对称加密:加密和解密是同一个密钥。如SDBI、IDEA(128bit)、RC4、DES(64bit)、3DES(128bit)
非对称加密:加密和解密是不同密钥。如RSA、ELGamal。
6.数字签名
定义:只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。说明:事后不能抵赖;其他人不可伪造;如果当事双方对签名的真伪发生争执,需要找仲裁者来确认真伪。方法:通过RSA非对称加密技术。过程:发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用发送方的私钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再公钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该报文是发送方的。三、新技术
新技术=“大云物移智链”=大数据、云计算、物联网、移动互联网、人工智能、区块链,其实底层都是算法或者通信,这里有点偏概念。
1.大数据
主要过程:数据准备、数据存储和管理、计算处理、数据分析、知识展现。
2.云计算
云计算比较好理解。现在的百度云、阿里云、腾讯云服务器都是云计算的范畴,我自己没有设备,阿里有设备,通过Internet直接访问他们的硬件资源。
云计算的特性:动态易扩展、虚拟化。
2.1 云计算的三类服务
IaaS:基础设施即服务。向用户提供计算机能力、存储空间等基础设施方面的服务。说白了就是向别人出租我自己的硬件设备。PaaS:平台即服务。向用户提供操作系统、数据库管理系统、web应用等服务。比如购买腾讯云服务器,我可以把自己的照片、视频存储到云上,然后用这个云服务器搭建个网站,谁都可以访问。这就使用了腾讯云平台的价值。SaaS:软件即服务。向用户卖软件,比如在微信上的微信小程序。2.2 云计算的分类
公有云:谁都可以通过互联网访问的云。私有云:只有自己可以访问的云。比如国网公司买的阿里云,就是私有云,只能国网公司访问,别人是访问不了的,毕竟要安全嘛。混合云:私有云+公有云的混合。3.人工智能
人工智能的领域非常多,如音频、视频、图像、搜索、博弈等等等等。所有智能化的都算人工智能领域。
4.区块链
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。本质是一个去中心化的数据库,同时是比特币的底层技术。