软件工程复习

软件危机

概念

在计算机软件开发、使用和维护过程中遇到的一系列严重问题和难题

产生的主要原因

软件规模越来越大,结构越来越复杂,开发管理困难,生产方式落后,开发工具落后

软件工程

概念

指导软件开发的工程学科,采用工程化的概念、原理、技术和方法进行软件的开发和维护

三要素

方法、过程、工具

遵循的原则

  • 适宜的开发模型
  • 合适的设计方法
  • 高质量的工程支撑
  • 重视软件工程管理

    软件开发模型

    原型模型

    适用于不能预先确切定义需求的软件开发,或项目组成员沟通有困难;

    瀑布模型

    将软件生存周期的各个活动规定为依线性顺序连接的若干阶段的模型;适用于功能明确,无重大变化的软件系统的开发(操作系统,编译系统)

    螺旋模型

    支持需求不明确的大型软件系统开发,支持用户需求的动态变化,风险分析;面向规格说明、过程、对象

    增量模型

    分成多个子系统进行开发,最后集成;

    喷泉模型

面向对象的软件开发方法,以用户需求为动力,对象来驱动;

结构化分析方法(SA)

  • DD:数据流+数据存储+数据项+加工说明;
    系统描述工具中的数据,是对数据定义信息的集合;
  • DFD:用于表示系统逻辑模型的工具,以图形的方式描绘数据在系统中流动和处理的过程,反映系统必须完成的逻辑功能,是一种功能模型。
  • 数据字典+数据流图=系统的逻辑模型
  • 自顶向下,逐层分解

    结构化设计方法(SD)

  • DFD->软件系统的结构
  • 分为概要设计+详细设计

    软件生存周期

    定义

    可行性研究
    需求分析:确定功能

    设计

概要设计:数据库的逻辑设计,确定模块功能和接口,数据结构->概要设计文档,软件表示
详细设计:确定模块内部特性(算法和数据库的物理设计)->精确的、结构化的过程描述;

编码

测试

保证软件质量的重要手段
黑盒测试:依据需求规格说明书,只在软件接口处进行功能测试;
白盒测试:检查内部控制结构和数据结构;

维护

系统交付后,为了改正错误或满足新的需求而修改软件的过程;

软件设计基本原则

  • 模块独立性:高内聚,低耦合
  • 模块化
  • 抽象
  • 信息隐藏

    软件体系结构设计

    仓库模型

    子系统紧密耦合共享中央数据仓库中的数据;

优点:共享数据有效管理,子系统关于数据比较独立,易集成;
缺点:一致的数据视图影响性能,备份、安全等影响效率;

分布式结构

优点:资源共享、开放性高、可伸缩性强、容错能力强、透明性高;
缺点:复杂性、安全性、可管理性、不可预见性;

C/S

用户界面->应用逻辑->数据访问

  • 两层:胖客户机,瘦客户机(B/S)
  • 三层/多层应用模型
  • 分布式对象结构

面向服务的软件架构
service-oriented architecture,SOA是一个构件模型,它将应用程序的不同功能单元(称为服务)通过定义良好的接口和契约联系起来。
云计算
分布式处理(Distributed Computing)、并行处理(ParallelComputing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。是指基于互联网的超级计算模式–即把存储于个人电脑、移动电话和其他设备上的大量信息和处理器资源集中在一起,协同工作。在极大规模上可扩展的信息技术能力向外部客户作为服务来提供的一种计算方式。

OOAD的SOLID原则

  • 单一责任
  • 开放封闭:对扩展开发,对修改封闭;
  • 里式替换:接口的子类或实例可替换父类;
  • 接口分离:使用多个专用的接口;
  • 依赖倒置:高层不依赖低层,抽象不依赖细节;