1.1 软件的定义
1.1.1什么是软件?——内涵
- 指令的集合:通过执行这些指令可以满足预期的特征、功能和性能需求
- 数据结构:使得程序可以合理利用信息
- 软件的描述信息:以硬拷贝和虚拟形式存在用来描述程序操作和使用
- 如何理解?
- 软件=代码+数据+文档
- 为什么需要文档?
- 软件开发后交付,需要用户手册,管理员手册
- 软件开发新版本,需要原有的需求分析、架构设计文档。
- 用户操作需要
- (用户、内部沟通、产品升级等)
- 为什么要数据/数据结构?
- 因为对于信息管理系统,需要存储数据的数据库,这就需要数据库模式设计
- 若不用数据库,往往也会有基于文件的自定义的数据存储,存储的结构比如二叉树、队列与字典等。
1.1.2什么是软件?——外延
- 软件是设计开发的,并不是传统意义上的生产制造
- 不会“磨损”
- 软件具有定制化的特点
- 客户化设计开发VS大规模制造
- 均有设计过程
- 定制化 VS 统一化
- 开发 VS 制造
- IT工程师VS工人
- 由于定制,价格昂贵VS销量大反而便宜
- (不同软件的定制程度不同,如系统软件就较少,开发成本则低一些)
- 思考:
- 软件的退化VS硬件的磨损
- 硬件一定会磨损
- 软件虽然没有磨损,然会变得“不好用”
- 思考:软件为何经常升级?
- 风格
- 适配
- 新功能
- 关于软件失效
- 实际上这个软件最终会被替换掉
1.2 软件的分类
- 系统软件
- 例子
- 特点
- 系统软件和底层结合比较紧密
- 需要很多资源调度
- 变更程度小,和用户的关系不太密切
- 应用软件
- 工程/科学软件
- 嵌入式软件
- 冰箱内置软件
- 电视内置软件
- 等等
- 要求:小、性能高、可靠性需求高
- 产品线软件
- 软件产品线:一系列软件密集型系统,可以共享一组公共的可管理的特性,可以满足特定市场或人物的特定需求
- 软件产品线都使用相同的底层应用软件和数据体系结构来开发,并使用可在整个产品线进行复用的一组软件构件来实现。
- 软件产品线共享一组资源,包括需求、体系结构、设计模式、可重用构件、测试用例以及其他软件工程工作产品
- office全家桶
- adobe全家桶
- ERP
- Web/移动应用软件
- Web网站特点
- Web应用举例
- 语义Web…
- 特点
- 移动应用系统
- 这个东西允许移动设备通过对移动设备优化过的浏览器获取基于WEB内容的访问
- 移动APP可以直接访问设备的硬件特性,如GPS,并提供本地处理和存储能力
- 移动WEB应用和移动APPS之间的差异在逐渐减小
- 云计算
- IAAS:仅租用硬件
- PAAS:IAAS+中间件(数据库等)
- SAAS:PAAS+apps
- 人工智能软件(机器人、人工神经网络和博弈等等)
- 遗留软件
- 软件需要适应性调整、升级、扩展、改建
- 但有一些软件的开发人员会退休等
- 产生了旧的架构
- (不同的软件需要的构造方法、人力成本和只能不同)