《软件工程》复习提纲

整理自教材、PPT以及坊间流传的材料。

软件工程概念

软件生命周期模型

生命周期模型 长处 短处
进化树模型 与现实世界软件开发最接近的模型,与迭代-递增模型等价
迭代-递增生命周期模型 于现实世界软件开发最接近的模型,蕴含统一过程方法
编码-修补生命周期模型 适用于不需要维护的小程序 不适合重要的程序
瀑布生命周期模型 纪律性强制的方法,文档驱动 支付的产品可能不符合客户的要求
快速原型开发生命周期模型 确保交付的产品符合客户的要求 还没有证明无懈可击
开源生命周期模型 少量实例周期工作中相当好 实用性有限,通常不太起作用
敏捷过程 客户的需求模糊时能很好地工作 似乎只适合小规模项目
同步-稳定生命周期模型 能满足未来用户的要求,确保各组件能够成功集成 除了微软,没有广泛应用
螺旋生命周期模型 风险驱动 只能用于大型的内部软件产品,开发者必须精 通风险分析和风险排除

软件过程

软件生命周期的工作流

需求

软件过程中统一过程的五个核心工作流和各阶段:

  • 工作流:
  • 需求流:让开发组织者确定客户的需求。
  • 分析流:分析和提取需求,以获得正确的开发软件产品和易于维护它所必需的需求。
  • 设计流:细化分析流的制品,直至材料处于程序员可实现的形式。
  • 实现流:用选择的实现语言实现目标软件产品。
  • 测试流:
    • 每个开发者和维护这确保自己的工作是正确的
    • 一旦软件人员确信一个制品是正确的,就将它交给软件质量保证小组进行独立测试

阶段:

  • 开始阶段:(第一次递增)目标是决定是否值得开发目标软件产品。最主要的目标是明确提出的软件产品是否经济上可行。
  • 细化阶段:(第二次递增)目标是细化最初的需求,细化体系结构,监控风险和细化他们的属性,细化商业案例,以及生成软件项目管理计划。主要是对前一阶段工作的细化。
  • 构建阶段:(第三次递增)目标是产生软件产品的第一个可工作版本。
  • 转换阶段:(第四次递增)确保客户的需求切实得到满足。

面向对象分析

类的种类:

  • 实体类:长期存在的信息建模

  • 边界类:软件产品和他们之间的参与者的行为建模,边界类通常和输入输出有关。例如,在基金产品中,需要打印基金投资列表和当前所有抵押报表。

  • 控制类:复杂的计算和算法建模

抽取实体类

实体类抽取包括三个迭代和递增完成的步骤:

  • 功能建模:提出所有用例的场景(场景是用例的一个实例)。

  • 实体类建模:提出所有实体类和它们的属性,然后确定实体类之间的交互关系和交互行为,以类图的形式提供这个信息。

  • 动态建模:确定每个实体类或者子类的操作或对他们的操作,以状态图的形式提供这个信息。

注:对于所有迭代和递增的处理,这三个步骤不总是以这个顺序进行,一个模型中的变化通常引发其他两个模型对应的修改。

设计

面向操作设计

数据流分析

数据流分析(DFA)是一项得到高内聚模块的传统设计技术。该技术的输入时一个数据流图,一旦完成了DFA,软件设计者就有了关于产品的输入和输出的精确和完整的信息。

输入的最高点(point of highest abstration of input):讲输入失去作为输入的性质并且简单的变成内部产品操作的内部数据的点。

输出的最高点:也就是数据流图中输出可以被识别的第一点,而不是被识别为某种内部数据。

两个最高点讲产品分解为三个模块,输入模块、转换模块、输出模块

符合结构化设计的目标是高内聚的同事还要低耦合。

事务分析

如何完成事务分析:

  • 设计有以下两个组件的结构:分析器、分配器
  • 对于每个分组有关的操作,设计一个基本模块,并根据需要例示多次

面向数据设计

基本原则:根据其运行的数据结构设计产品。

面向对象设计

  • 完成类图
  • 进行详细设计

实现

良好的编程实践

  • 使用一致和有意义的变量名
  • 自文档代码
  • 使用参数
  • 嵌套if语句

编码标准

代码重用

集成

集成方式:

  • 实现然后集成:独立的对每个代码制品编写代码和测试
  • 自顶向下的集成
  • 自底向上的集成
  • 三明治
    • 并行:自顶向下的实现和集成逻辑制品,自底向上的实现和集成操作制品
    • 测试逻辑制品和操作制品之间的接口
方法 优点 缺点
实现然后集成 没有错误隔离手段,主要涉及错误发现迟,潜在可重用代码制品不能被充分测试
自顶向下的集成 具有错误隔离,主要涉及错误发现早 潜在可重用代码制品不能被充分测试
自底向上的集成 具有错误隔离手段,潜在可重用代码制品能被充分的测试 主要设计错误发现迟
三明治集成 具有错误隔离,主要设计错误发现早,潜在可重用代码制品测能够被充分测试

测试

黑盒测试

  • 等价测试和边界值分析:为了使发现错误的可能性最大,一个高回报的技术是边界值分析
  • 如何完成等价测试:
    • 对于范围(L,U,选五个
    • 对于集合S,选两个
    • 对于精确值P,选两个
  • 功能测试:低层功能黑盒技术测试,高层功能玻璃盒测试

玻璃盒测试

  • 结构测试:语句、分支和路径覆盖
    • 语句覆盖,即运行一系列的测试用例,在运行期间每个语句至少执行一次。
    • 分支覆盖:运行一些列测试,确保每个分支最少测试一次
  • 复杂性度量

模块

一个或多个邻接的程序语句的集合,它有一个名称以便系统的其他部分调用它,并且最好具有自己专用的变量名集。

维护

  • 纠错性维护:需要纠正错误,包括分析错误,设计缺陷,编码错误,文档错误以及其他任何错误。
  • 完善性维护:修改源代码是为了提高产品的有效性,例如提高产品的可维护性。
  • 适应性维护:为了适应产品运行环境的变化需要对产品进行修改。
曹真 wechat
欢迎关注公众号:一时博客