如何“从无到有”设计一个企业信息系统?本文将探索这个话题。
备注:
在实际企业中,并不一定是企业信息化软件系统,也可以数字化系统、也可以是新产品。
企业信息化,并不一定是自己开发软件系统,也可以是外购来构建企业信息化系统。
信息系统规划属于项目开发的前端,在需求分析之前就开始了。通常是产品部门或规划部门的职责。
备注:
单系统开发,可以是自研一个软件系统,也可以是从无到有构建一个软件系统。
构建一个信息化系统时,可以是甲方,也可以是乙方,也可以是自研外销,因此信息化系统,不仅仅用于软件研发企业,也适合任何需要信息化系统辅助企业战略的企业、公司、政府机构等。
实施可以是自研,也可以外购、外包等形式,
信息化,无论是甲方,还是乙方,都是为了完成目标企业的战略目标。
甲方实施信息化:是为了满足自身的战略需求和业务重组、优化。
乙方开发信息化系统:满足客户信息化的需求,同时也实现自身组织的价值。
备注:信息化是为企业业务服务的,不能为了信息化而信息化。
第一阶段:内部数字化
第二阶段:内部集成化
第三阶段:内外集成化
备注:
信息系统应用包括:
用于企业运营管理的通用软件系统,如ERP, 供应链管理等等。
用于企业运营生成的专有软件系统,如银行、化工、通信、生产等,都是行业特定应用软件。
需求分析:企业业务的需求分析,而不是信息系统的需求分析,输出是立项书。
总体规划:又称为系统规划/计划,输出是可行性研究报告。
系统分析:系统需求分析,输出是需求规格说明书。
结构化:按照时间阶段进行结构化划分,适合需求非常明确,可以逐步分解的仓和。
原型:适合需求不明确的场合。
备注:
首先,在现有的系统上恢复系统的抽象模型。
然后,对现有模型进行优化,设计出新的符合自身业务需求的系统。
最后,基于新的模型,开发出新的软件系统。
软件模型:是开发过程某种约定和套路。
模型是是开发方法的进一步细化和落地,是最佳实践的总结与抽象。
因此,开发模型是构建在开发方法之上的。
基于架构驱动软件开发的方法论。
这种开发方法,以架构为核心,从软件领域模型、到软件需求、到架构设计、以及软件测试、软件评估,
备注:
架构中包含的设计的各种组件,需要进一步完成组件/构件的设计和实现。
软件产品线(software product line)是指具有一组可管理的公共特性的软件密集性系统的合集。
软件产品线是指具有一组可管理的公共特性的软件密集性系统的合集。
软件产品线是指具有一组可管理的公共特性的软件密集性系统的合集,这些系统满足特定的市场需求或任务需求,并且按预定义的方式从一个公共的核心资产集开发得到。
软件产品线:适合行业软件的开发
备注:
大平台的开发就是一种核心资源的开发。
产品开发注重满足客户的需求的产品。
需求:功能、性能、行为、约束条件
业务:目标,宏观业务角度提出的概述性的需求
用户:行为,细化后的用户行为需求,从用户操作的角度提出的需求。
功能:细化后的软件需求,从软件实现的角度提出的需求。
系统:功能、性能、约束
适合结构化软件开发方法,在结构化软件开发流程中,处于需求分析阶段。
功能:外部实体、数据流、数据加工
行为:外部实体、状态图、消息交互图
实体:内部实体、关系、联系
备注:数据流图,与硬件原理图类似!!!
类似与绘制硬件原理图
适合面向对象的软件开发方法,在面向对象的软件开发方法流程中,处于需求分析阶段。
多态:继承于相同的父类的不同的子类对象,通过父类指针传递相同的消息,不同的子类对象,执行不同的功能。
备注:在面向对象中,实体/事物不仅仅是名词,还包括动词。
名词:结构性事物、分组事物、注释事物
动词:动作、行为性事物
备注:
用例图被定为动态图还是静态图是有争议的。
软考中,把用例图定义为动态图。
视图的目的是化繁为简、从不同的角度展示目标软件系统。
备注:类似流程图
备注:多进程之间有相互协助关系的流程图。
备注:封装后的类与它的接口。
形态:SRS需求规格说明书
文本
图形
人:客户、需求分析人员、管理人员
内容:变、多、不准确
形式:精简
输入:业务流程分析
架构是业务需求的在软件功能上的分配
架构是软件系统越来越丰富、种类越来越多之后的产物。
架构和框架的区别
架构Architecture:是目标软件系统的抽象,不涉及到软件代码。
框架Framework:是目标软件系统的框架,是代码的实现,在此代码框架下,很容易扩展新的功能。
备注:
软件架构提供了软件系统在结构、行为、属性的高级抽象!!!
备注:
4+1是UML的升级和简化
基本思想:分解、拆解、化繁为简、抽象
框架模型:反映的是软件的整体结构
静态结构模型:反映各种功能组件的关系(横向)
静态功能模型:分层模型 (纵向)
动态行为模型:系统的对外行为
过程模型:构建目标系统的步骤和过程
备注:不同的视图,反应了不同视角的架构展示。
架构风格:是一类经典业务问题的、通用的软件解决方案。
复杂软件系统中,是各种风格的有机组合、混合!!!复杂系统,很少见到单一风格。
软件架构类似公司的组织架构!!!
复用是软件系统永恒的追求,架构设计的核心问题:架构级的复用!!!
架构就是软件系统众多结构和语义的抽象!!!
因此,抽象的能力是架构的关键!!!
数据流风格没有一个统一的集中调度者,每个环节是环环相扣,它们之间只是先有处理的时序关系,没有主从关系。
数据流风格适合:对数据进行pipeline处理的场合,如数据通信、网络数据协议栈、5G通信中的数据面、控制面、管理面、同步面等各个面的数据处理+严格的处理流程!!!!
网络播放器一边下载,一边播放,就是流式处理!!!
调用返回风格,在现有的软件系统中,无处不在,main函数调用各种子函数、网络协议栈,都是调用返回风格。
分层的目的:降低耦合度!!!
分层的缺陷:数据在层与层之间传递,需要有额外的开销以及数据的拷贝,会牺牲系统的性能!!!
备注:
注册和通知机制,就是独立架构风格。
应用程序、组件Component之间相互解耦,每个组件与中间管理者关联。
QT UI的事件与slot函数调用之间的关系,就属于隐式调用。
如IPTable机是基于规则的系统架构!!!
解释器或规则解析系统对动态创建的规则和代码进行解释!!!
能够根据指定或可编排的任务和顺序进行执行程序也属于解释器风格。
分布式数据库就是采用这种风格的架构
黑板:就相当于一个全局的数据库,所有的程序都监控全局数据库!!!
备注:
黑板系统与数据库系统总体结构是一致的。
不同的是:黑板的目的不是存储数据,而是为了广播信息、传递。
黑板内容的变化会引发观察者行为的变化!!!!
适合于工业控制领域,不如恒定温度控制,如PID控制等 。
层次架构风格归属于调用返回风格。
备注:
把容易变化的后台业务处理部分,从客户端平移到服务器端执行,这样增加了系统的可修改性。
因为在服务器端改动逻辑的灵活性远远大于在分布式的客户端修改程序。
CS架构,需要在客户端安装客户端程序!!!
View:前台显示
Controller:后代业务逻辑处理
Model:数据库访问
远程从服务器下载程序到本地,然后在本地执行。
备注:
服务是架构在构件之上
服务是规范化后的构件
服务是可用独立部署的构件
各种服务通过企业服务总线ESB(中介者)连接起来
应用程序通过ESB访问各种服务
服务与服务之间是松散耦合
服务:服务的提供者,网络中有大量的服务的提供者
应用程序性:服务的使用者,少量的服务的使用者
备注:分层协议
备注:
容器、自动化部署为微服务的普及提供的底层的技术基础。
敏捷团队、敏捷思想:为微服务的开发提供了组织和文化基础!!!
备注:
备注:ADL是使用的是伪语言,图形描述语言。
DSSA关注的是行业软件的通用架构!!!!
备注:
就是以架构为导向,把行业领域的共性特征,抽离出来,形成通用的行业软件架构过程,就是特定领域软件架构设计,得到的架构就是特定领域软件架构。
实际上,各行业都有专门的软件人员或公司在设计和软件行业软件的通用架构,以支撑行业的各种应用。
有些公司是专门做行业平台,为行业应用提供通用的解决方案,这种方案是通用的,有些公司都在行业应用。
而有些大公司,既做自己企业内部的行业平台,这种平台是企业专有的,也做自己的行业应用。
绝大部门软件,最终都是在行业内得到体现了!!!!
在通用个人电脑开发的软件,如PC机,办公软件,都是通用软件。
而解决特定行业应有的软件,如化工、生产、银行等,都属于特定的行业软件,产生的软件架构,就是行业软件架构!!!!
这个领域的架构需要的技能:
领域知识 =》 系统需求
公共架构知识 =》 可复用的软件架构
备注:
上述各种人员,包括软件开发人员,都需要领域技能知识。
通过评软件架构的质量,来推测软件系统的质量。
软件架构的质量是通过软件功能性和非功能性质量来评估的!!!
软件开发流程的流程本身的质量
流程的完备程度
流程的复杂度
软件开发流程中每个环境输出的质量
软件需求(功能与非功能需求)的质量
架构的质量
软件编程的质量
测试的质量
软件开发流程中每个环节人的质量
技能水平
工作态度
项目管理的质量
风险点:影响大
敏感点:敏感
权衡点:多方权衡
可靠与可用性是具有相同的因素,又是不完全相同的概念
相同点:
可用和可靠都关注软件能够持续为用户提供服务的能力
不同点:
可用性:关注正常场景下提供服务的能力
可靠性:关注异常场景下提供服务的能力
调查表:定性、主观,获取专家的经验与意见
量化度量:定量,难度大
场景评估:先细化业务应用场景,客观性,获取专家的经验与意见,应用广
备注:
第一阶段:用文字描述和语言交流的形式获取场景。
第二阶段:用图形和视图的形式展现场景。
第三阶段:确定场景中的软件质量属性
第四阶段:相互制约的质量因素进行折中,需求是无限的,必须进行优先级排序和折中,有所取舍!!!
场景的优先级
质量属性的优先级
(1)同步:等
(2)互斥:抢
备注:
分层的目的是用来应对变化。
映射就是用来不同的层之间进行映射,通过映射,实现了不同层之间的隔离。
11.7 IPV6
中间件的意义:
分布式应用程序(对等模型、客服服务器模型)之间的共享资源与通信
屏蔽硬件、操作系统、网络、数据库的差异
简化了应用程序的开发和运行
构件:是一组相关类的对象和结构体变量的集合体。
程序 = 算法 + 数据结构 =》面向对象
面向功能:以功能行为的函数算法/操作为核心
面向数据:以表达数据的数据结构为核心,如XML, Jackson
面向对象:对象是数据和功能行为的封装体
复用性:面向对象的封装性使得面向对象技术更适合复用性。
备注:
中台的本质是它代表企业的核心能力!!!
小前台:直接面向用户、异变、赚钱 (如在激光器行业,就是各种激光器的应用项目)
中台:核心能力、核心价值、不可替代、借助小前台赚钱 (如在激光器昂也,就是核心的激光器产品)
要打造:大中台、小平台的运营模式!!!
备注:
淘宝和天猫:是前台 (是树叶)
交易中心、商品中心是:中台 (是树干)
阿里云平台:是后台(是基础、是根基、是树根)
一个好的模式是:大中台、小前台、稳后台
客户层:UI层、业务应用层
Web层:Web协议层
业务层:业务相关的后台处理
数据层:应用相关的数据,存放在数据库中
数据缓存:把数据暂时存放在内存中,而不需要存放在物理数据库中。
数据缓存:本质是一种数据库,又称为内存数据库,这是相对于硬盘数据而言的。内存数据库的问题时,掉电后,数据就丢失,不可恢复!!!
(1)编程语言: C++, C,Java, Python
(2)编程技巧
(3)业务逻辑
黑盒:程序的外部接口
白盒:程序的内部流程