1.1 软件的定义

1.1.1什么是软件?——内涵

  • 软件:
  1. 指令的集合:通过执行这些指令可以满足预期的特征、功能和性能需求
  2. 数据结构:使得程序可以合理利用信息
  3. 软件的描述信息:以硬拷贝和虚拟形式存在用来描述程序操作和使用
  • 如何理解?
    • 软件=代码+数据+文档
    • 为什么需要文档?
      • 软件开发后交付,需要用户手册,管理员手册
      • 软件开发新版本,需要原有的需求分析、架构设计文档。
      • 用户操作需要
      • (用户、内部沟通、产品升级等)
    • 为什么要数据/数据结构?
      • 因为对于信息管理系统,需要存储数据的数据库,这就需要数据库模式设计
      • 若不用数据库,往往也会有基于文件的自定义的数据存储,存储的结构比如二叉树、队列与字典等。

1.1.2什么是软件?——外延

  • 软件是设计开发的,并不是传统意义上的生产制造
  • 不会“磨损”
  • 软件具有定制化的特点
  • 客户化设计开发VS大规模制造
    • 均有设计过程
    • 定制化 VS 统一化
    • 开发 VS 制造
    • IT工程师VS工人
    • 由于定制,价格昂贵VS销量大反而便宜
    • (不同软件的定制程度不同,如系统软件就较少,开发成本则低一些)
  • 思考:
    • 为什么定制软件如此昂贵?
    • 如何降低成本?
  • 软件的退化VS硬件的磨损
    • 硬件一定会磨损
    • 软件虽然没有磨损,然会变得“不好用”
    • 思考:软件为何经常升级?
      • 风格
      • 适配
      • 新功能
      • 关于软件失效
        <center>软件失效曲线图
        软件失效曲线图
      • 实际上这个软件最终会被替换掉

1.2 软件的分类

  • 系统软件
    • 例子
      • 操作系统
      • 编译器
      • 中间件
      • 数据库
      • VMware
    • 特点
      • 系统软件和底层结合比较紧密
      • 需要很多资源调度
      • 变更程度小,和用户的关系不太密切
  • 应用软件
    • 不多说,大家都在用
  • 工程/科学软件
    • Matlab
    • CAD
  • 嵌入式软件
    • 冰箱内置软件
    • 电视内置软件
    • 等等
    • 要求:小、性能高、可靠性需求高
  • 产品线软件
    • 软件产品线:一系列软件密集型系统,可以共享一组公共的可管理的特性,可以满足特定市场或人物的特定需求
    • 软件产品线都使用相同的底层应用软件和数据体系结构来开发,并使用可在整个产品线进行复用的一组软件构件来实现。
    • 软件产品线共享一组资源,包括需求、体系结构、设计模式、可重用构件、测试用例以及其他软件工程工作产品
    • office全家桶
    • adobe全家桶
    • ERP
  • Web/移动应用软件
    • Web网站特点
      • 美工
      • 内容为主
    • Web应用举例
      • 社交
      • 购物
      • 邮箱
      • 办公自动化
    • 语义Web…
    • 特点
      • [数据驱动]
      • [内容敏感性]
      • [持续演化]
    • 移动应用系统
      • 这个东西允许移动设备通过对移动设备优化过的浏览器获取基于WEB内容的访问
      • 移动APP可以直接访问设备的硬件特性,如GPS,并提供本地处理和存储能力
      • 移动WEB应用和移动APPS之间的差异在逐渐减小
    • 云计算
      • IAAS:仅租用硬件
      • PAAS:IAAS+中间件(数据库等)
      • SAAS:PAAS+apps
  • 人工智能软件(机器人、人工神经网络和博弈等等)
    • 如翻译软件
  • 遗留软件
    • 软件需要适应性调整、升级、扩展、改建
    • 但有一些软件的开发人员会退休等
    • 产生了旧的架构
  • (不同的软件需要的构造方法、人力成本和只能不同)