第二章: 社会 - 技术系统 - <软件工程> - [读书笔记]
概述
系统是一组相互关联, 能一起工作从而达到某个目标的相关组件的集合. 在一定程度上, 系统超出了对它的各个部分的简单堆砌.
包含软件的系统可以分为两大类:
基于计算机的纯技术系统: 包括软件组件和硬件组件, 但不包括加工流程和加工过程. 有关该系统目的的知识是不包括在此系统之内的.
社会 - 技术系统: 包括一个或多个技术系统, 但是, 关键的是, 它还包括如何使用系统达到某些更大目标的知识 (即: 操作过程).
系统总体特性
系统的特性, 不能归于任何一个专门的组件, 只有从系统整体上看时, 这些特性才浮现出来. eg: 体积, 可靠性, 信息安全性, 可修复性, 可用性…
系统特性有两种类型:
1. 功能特性: 当系统的所有部分一起工作以达到一些目标的时候表现出来. (可理解为: 系统具有的功能)
2. 非功能特性: 表现为在特定的操作环境中系统的表现行为. (可理解为: 系统具有的功能的特点)
与系统总体可靠性紧密相关的 3 个方面有:
1. 硬件可靠性;
2. 软件可靠性;
3. 操作员可靠性.
系统工程
系统工程是描述, 设计, 实现, 有效性验证, 实施和维护社会 - 技术系统的一系列活动.
系统需求定义
系统需求定义明确说明说明是系统应该做的 (它的功能) 以及它的重要的所希望的系统特性.
需求定义阶段通常侧重于导出三种类型的需求:
1. 抽象的功能需求;
2. 系统特性;
3. 系统一定不要有的性质 (有时说明系统一定不要有什么与说明系统一定要有什么一样重要);
需求定义阶段的一个重要部分是建立系统要达到的一些总的目标. 这些并不需要用系统功能的形式描述, 但应该说明为什么要对特别的环境建立该系统.
系统设计
系统设计主要是解决如何将不同的组件整合成一个能提供所需功能的系统.
包括的活动有:
1. 分割需求: 分析需求, 进一步将其归结到相关的集合.
2. 识别子系统: 将独立地或联合地满足需求的子系统识别出来.
3. 为子系统分配需求: 将需求分配到子系统上.
4. 描述子系统功能: 每个子系统提供的专门功能在此时要描述清楚.
5. 定义子系统接口: 定义每个子系统提供的和需要的接口.
需求影响设计决策, 反过来, 设计也会作用于需求.
系统建模
在这个层次上, 系统被分解成一些子系统. 每个子系统以相似的方式表示, 直到系统被分解成功能组件. 从子系统的角度来看, 功能组件是提供一个单一功能的组件. 相反的, 一个子系统通常是多功能的. 当然, 从另外一个角度 (即从组件制造商) 看, 一个功能组件本身可能就是一个系统.
子系统开发
在子系统开发阶段所要做的, 就是实现在系统设计期间识别出来的那些子系统.
-> 面向变化的软件设计是非常需要的, 因为新的需求可以在无需增加额外成本的情况下完成.
系统集成
系统集成就是将一个个独立开发的子系统集成为一个完整的大系统.
这个过程一般采用增量式过程, 主要理由有:
1. 不同子系统开发的时间是无法准确预计的, 因此, 不大可能在同一时间得到所有的子系统;
2. 增量式集成可以减少错误定位的成本.
系统进化
-> 系统的外部环境可能改变, 所有这些都会要求系统随之变化.
系统进化是昂贵的:
1. 必须从业务和技术的角度对提议的变更做仔细的分析;
2. 因为子系统都不是孤立存在的, 对一个子系统的变更可能会对其他子系统的性能或行为造成负面影响;
3. 原始设计决策的理由时常为被记录; –> 把一个特别的设计决策产生的原因找出来, 这对于系统进化是有意义的.
4. 当系统运行相当长时间以后, 其结构被修改得复杂而凌乱, 系统进化成本进一步增加.
系统退役
系统退役是指在它的有效生存期结束之后从系统服务中退出.
机构, 人员和计算机系统
来自系统环境的能够影响系统设计的人和机构的因素包括:
1. 流程变更; -> 操作过程: 为指定目的使用系统的过程.
2. 工作变更;
3. 机构变更;
-> 在系统中包含人在内的主要好处是人有独特的有效应对突发情况的能力, 甚至在操作者未曾直接经历过这些情况也是这样.
-> 一般来讲, 实际的操作过程与系统设计者所期望的过程之间是有差别的.
遗留系统
这种系统是机构希望更新的, 但是采用一种代替的新系统会冒极大的风险.
-> 遗留系统通常都是关键性业务系统.