软件工程复习


第一章 软件工程学概述

P1 软件危机的概念

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

P9,软件工程方法学分为两种:

  • 传统方法学

  • 面向对象方法学

P16,瀑布模型

  • 优点:强迫开发人员采用规范的方法(结构化技术),严格规定了每个阶段必须提交的文档,要求每个阶段交出的所有产品必须经过质量保证小组的仔细验证
  • 缺点:瀑布模型是由文档驱动的这个事实也是它的一个主要缺点。
    • 仅仅通过写在纸上的静态的规格说明,很难全面正确地认识动态的软件产品
    • 几乎完全依赖于书面的规格说明,很可能导致最终开发出来的软件产品不能真正地满足用户的需要

P19,螺旋模型的基本思想:

使用原型及其他方法来尽量降低风险,可以把它看成在每个阶段之前都增加了风险分析过程的快速原型模型

P25,敏捷过程开发宣言由4个简单的价值观声明组成【掌握】

  • 个体和交互胜过过程和工具
  • 可以工作的软件胜过面面俱到的文档
  • 客户合作胜过合同谈判
  • 响应变化胜过遵循计划

第二章 可行性研究

P38,系统流程图

概念:系统流程图是概括地描绘物理系统的传统工具。

它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件(程序、文档、数据库、人工过程等)。

P40,数据流图(DFD)

概念:数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。

在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。

数据流图的四种符号

  • 正方形或立方体——数据的源点或终点
  • 圆角矩形或圆形——变换数据的处理
  • 开口矩形或两条平行横线——数据存储
  • 箭头——数据流

P47,数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据流图就不严格;没有数据流图,数据字典也难以发挥作用。

P47,数据字典【描述一个系统/软件,会画数据字典/改编例子】

第三章 需求分析

P58,访谈是最早开始使用的获取用户需求的技术,也是迄今为止仍然广泛使用的需求分析技术。

P62,需求分析阶段,首先要创建分析模型,还应该写出软件的需求规格说明书,它是需求分析阶段得出的最主要的文档。

P64,实体-联系图(ER图)中包含实体(数据对象)、关系和属性3种基本成分。

  • 矩形框——实体
  • 菱形框——关系
  • 椭圆形或圆角矩形——实体(或关系)的属性
  • 直线——连接实体(或关系)与其属性

P70,从哪四个方面验证软件需求的正确性

  • 一致性
  • 完整性
  • 现实性
  • 有效性

第五章 总体设计

P91,总体设计过程由2个主要阶段组成:

  • 系统设计阶段——确定系统的具体实现方案

  • 结构设计阶段——确定软件结构

P94,软件设计中应遵循的基本原理(5个)

  • 模块化
  • 抽象
  • 逐步求精
  • 信息隐藏和局部化
  • 模块独立

P95,模块化的好处。【不需要背,但是大体能判断哪些是好处】

采用模块化原理,可以

  • 使软件结构清晰,容易设计、阅读和理解
  • 使软件容易测试和调试,有助于提高软件可靠性
  • 能够提高软件的可修改性
  • 有助于软件开发工程的组织管理

P98,设计的原则是高内聚,低耦合。同时要知道,内聚的七种类型,耦合的四种。内聚、耦合的高低。

模块的独立程度可由两个定性标准度量:

  • 内聚

    • 含义:标志着一个模块内各个元素彼此结合的紧密程度,是信息隐藏和局部化概念的自然扩展
    • 分类:
      • 低内聚:偶然内聚【最低】 < 逻辑内聚 < 时间内聚
      • 中内聚:过程内聚 < 通信内聚
      • 高内聚:顺序内聚 < 功能内聚【最高】
  • 耦合

    • 含义:是对一个软件结构内不同模块间互联程度的度量,其强度取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据
    • 分类:
      • 数据耦合:两个模块彼此间通过参数交换信息,信息仅仅是数据【低耦合】
      • 控制耦合:传递的信息中有控制信息【中等耦合】
      • 特征耦合:整个数据结构作为参数传递,但被调用的模块只需要使用其中一部分数据元素
      • 公共环境耦合:两个或多个模块通过一个公共数据环境作用
      • 内容耦合:【耦合度最高】

P104,面向数据流的设计方法,七个步骤。【书中的例子要看懂,一定要掌握】【大题】

  • 复查基本系统模型
  • 复查并精化数据流图
  • 确定数据流图具有变换特性还是事务特性
  • 确定输入流和输出流的边界,从而孤立出变换中心
  • 完成第一级分解
  • 完成第二级分解
  • 使用设计度量和启发式规则,对第一次分割得到的软件结构进一步精化

【见附录1】

第六章 详细设计

P117,详细设计阶段的根本目标是确定怎样具体地实现所要求的系统,也就是说,经过这个阶段的工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言写的程序。

P117,1966年B和J证明了只用三种基本的控制结构就能实现任何单入口单出口的程序:顺序,选择和循环。

P119,人机界面设计是接口设计的一个重要的组成部分。对于交互式系统来说,人机界面设计和数据设计、体系结构设计及过程设计一样重要。

P124,程序流程图又称为程序框图,是历史最悠久,使用最广泛的描述过程设计的方法,然而也是使用最为混乱的一个方法。

  • 优点:对控制流程地描绘很直观,便于初学者掌握
  • 主要缺点
    • 程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序地控制流程,而不去考虑程序的全局结构
    • 程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制
    • 程序流程图不易表示数据结构

P125,由于要有一种不允许违背结构程序设计精神的图形工具的考虑,N和S提出了盒图,又叫做N-S图,严格遵循结构程序设计精神

P137,程序复杂度的度量, McCabe方法,三种方法度量程序的环形复杂度。

【见附录2】

第七章 实现

P150,软件测试的目标:发现程序中的错误。从心理学角度看,由程序的编写者自己进行测试是不合适的。因此,在综合测试阶段经常由其他人员组成的测试小组来完成测试工作。

P151,黑盒和白盒测试的基本概念。

  • 黑盒测试法把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。

  • 白盒测试法把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。

软件测试步骤

  • 模块测试
  • 子系统测试
  • 系统测试
  • 验收测试
  • 平行运行

模块测试,把每个模块作为一个单独的实体来测试,目的是保证每个模块作为一个单元能正确运行,因此,模块测试又被称为单元测试。

P153,单元测试从五个方面进行【注意区分哪个是最重要的】

  • 模块接口
  • 局部数据结构
  • 重要的执行通路
  • 出错处理通路
  • 边界条件【最后的且可能是最重要的任务】

P157,自顶向下集成,需要存根模块。

自顶向下集成方法是一个日益为人们广泛采用的测试和组装软件的途径。

从主控制开始,沿着程序的控制层次向下移动,逐渐地把各个模块结合起来。在把附属于(及最终附属于)主控制模块的那些模块组装到程序结构中时,或者使用深度优先的策略,或者使用宽度优先的策略。

P162,白盒测试中的逻辑覆盖【需要知道有哪几种,哪个最强,哪个最弱】

  • 语句覆盖
  • 判定覆盖
  • 条件覆盖
  • 判定/条件覆盖
  • 条件组合覆盖
  • 点覆盖
  • 边覆盖
  • 路径覆盖

强弱关系:

  • 条件组合 > 条件 > 判定 > 语句
  • 判定/条件 不一定比 条件覆盖
  • 点覆盖标准和语句覆盖标准相同
  • 边覆盖判定覆盖一致

第八章 维护

P189,软件维护的基本定义。

软件维护是指,在软件已经交付使用后,为了改正错误或满足新的需要而修改软件的过程

P194,决定软件可维护性的因素【背熟】

  • 可理解性
  • 可测试性
  • 可修改性
  • 可移植性
  • 可重用性

第九章 面向对象方法学引论

P208,面向对象方法学开发的软件可维护性好的因素【背熟】

面向对象的软件:

  • 稳定性比较好

  • 比较容易修改

  • 比较容易理解

  • 易于测试和调试

P211,面向对象的基本概念:类,实例,消息,方法,属性,封装,继承,多态性,重载。

对象:是具有相同状态的一组操作的集合

类:对具有相同数据和相同操作的一组相似对象的定义,是对具有相同属性行为的一个或多个对象的描述

实例:由某个特定的类所描述的一个具体的对象

消息:要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明

方法:方法是对象所执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。

属性:是类中所定义的数据,是对客观世界实体所具有的性质的抽象

封装:数据实现操作的代码集中起来放在对象内部

继承:继承是指子类自动地共享基类中定义的数据和方法的机制

多态性:接口的多种不同的实现方式即为多态,子类对象可以像父类对象那样使用。在类的不同层级中可以共享一个行为(方法)的名字,然而不同层次中每个类各自按自己的需要实现这个行为。当对象收到发送给它的消息时,根据该对象所属于的类动态地选用在该类中定义的实现算法

重载

  • 函数重载:在同一作用域内的若干参数特征不同的函数可以使用相同的函数名字
  • 运算符重载:同一个运算符可以施加于不同类型的操作数上面

当参数不同或被操作数的类型不同时,实现函数的算法或运算符的语义是不相同的

第十三章 软件项目管理

P305,软件项目管理从一组项目计划活动开始,制定计划的基础是工作量估算和完成期限估算。为了估算项目的工作量和完成期限,首先需要估算软件的规模。

代码行技术是比较简单的定量估算软件规模的方法。

P320,民主制程序员组的主要优点和缺点。【记熟】

  • 优点:
    • 小组规模小,可以减少通信问题
    • 容易确定小组的质量标准
    • 组员关系密切,能够相互学习
    • 组员们对发现的程序错误持积极态度,有助于更快地发现错误,产生高质量的代码
    • 组员们享有充分民主,小组有高凝聚力,组内学术氛围浓厚,有利于攻克技术难关
  • 缺点:由于没有明确的权威指导开发工程的进行,组内间缺乏必要的协调,最终可能导致工程失败
  • 民主制程序员组适用于开发有较高难度的软件工程

图的概念

第二章 可行性研究

  • 2.3 系统流程图:是概括地描绘物理系统的传统工具。
  • 2.4 数据流图(DFD图)数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换

第三章 需求分析

  • 3.4 实体-联系图(ER图):提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型
  • 3.6 状态转换图:通过描绘系统的状态及引起系统状态转换的事件,表示系统的行为

第五章 总体设计

5.4 描绘软件结构的图形工具
  • 5.4 HIPO图:在层次结构图的基础上推出的一种描述系统结构和模块内部处理功能的工具
  • 5.4 结构图:描绘软件结构的图形工具

第六章 详细设计

6.3 过程设计的工具
  • 6.3 盒图(N-S图)是结构化编程中的一种可视化建模,严格遵循结构程序设计精神
  • 6.3 问题分析图(PAD图):使用二维树形结构的图表示程序的控制流
  • 6.3 PDL:过程设计语言,也成为伪码,是用正文形式表示数据和处理过程的设计工具
    6.4 面向数据结构的设计方法
  • 6.4 Jackson图:便于表示层次结构,而且是对结构进行自顶向下分解的有力工具

第九章 面向对象方法学引论

9.6 功能模型
  • 9.6 用例图:呈现了一些参与者,一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模