大三上软件构造期末复习提纲

软件开发的最佳实践的机制指的是有机体的构造

软件 = 程序 + 数据 + 文档

集成化开发环境的特点有哪些

P19

IDE的特点是集成化、可视化和自动化。

在一个软件系统中支持软件实现的多个基本活动,具有操作方便、界面一致、自动化程度高、集成工具及时更新、有助于提高生产率等特点。同时,IDE体积比较大,内部的编译、运行、调试、连接等过程对开发者是透明的,不利于理解和掌握软件构造基本原理。

敏捷开发的定义

P10

是应对快速变化的需求的一种软件开发能力。它以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个互相联系、但也可以独立运行的小项目,分别完成,在此过程中,软件一直处于可使用状态。

软件的模块化理论、模块之间的关系、模块内部的关系

个体软件过程(Personal Software Process,PSP)的作用

P9

PSP能够说明个体软件过程的原则;

帮助软件工程师做出准确的计划;

确定软件工程师为改善产品质量要采取的步骤;

建立度量个体软件过程改善的基准;

确定过程的改变对软件工程师能力的影响。

简述敏捷开发的4个核心价值观

P10

  1. 个体和互动胜过流程和工具。
  2. 工作的软件胜过详尽的文档。
  3. 客户合作胜过合同谈判。
  4. 响应变化胜过遵循计划。

模块化的五个原则

P35

  1. 模块可分解性

    如果一种设计方法提供了把问题分解为子问题的系统化机制,它就能降低整个问题的复杂性,从而可以实现一种有效的模块化解决方案。

  2. 模块可组装性

    如果一种设计方法能把现有的(可重用的)设计构建组装称新系统,它就能提供一种并非一切都从头开始做的模块化解决方案。

  3. 模块可理解性

    如果可以把一个模块作为一种独立单元(无需参考其他模块)来理解,那么,这样的模块是易于构造和易于修改的。

  4. 模块连续性

    如果对系统需求的微笑修改只导致对个别模块,而不是对整个系统的修改,则修改所引起的副作用将最小。

  5. 模块保护性

    如果当一个模块内出现异常情况时,它的影响局限在该模块内部,则由错误引起的副作用将最小。

IEEE对软件工程标准术语中给出的软件测试的定义

P38

使用人工或自动手段来运行或测定某个系统的过程,其目的在于检测它是否满足规定的需求或者是否弄清预期结果与实际结果之间的差别。测试是对程序或系统能否完成特定任务建立信心的过程。

面向对象的五个设计原则

P92

  1. 单一职责原则

    就一个类而言,应该仅有一个引起它变化的原因。指一个类只有一种单一的功能,不要实现过多的功能。该原则可以视为面向对象程序对低耦合、高内聚原则的实践。

  2. 开放封闭原则

    软件实体(模块、函数、类)应该可以扩展,但是不可修改。对扩展开放,对修改封闭。他是面向对象所有原则的核心。

  3. 依赖倒转原则

    抽象不应该依赖细节,细节应该依赖抽象。该原则与传统的结构化分析与设计方法对立。

  4. 里氏代换原则

    子类型必须能够替换它们的基类型。这一思想体现了对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期间内识别子类,这是保证继承服用的基础。违反了里氏代换原则必然导致违反开放封闭原则。

  5. 接口隔离原则

    不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。

CSV格式的文件的特征

P103

  1. 纯文本,使用某个字符集,如 ASCII,Unicode,EBCDIC或GB2312
  2. 由记录组成(典型的时每行一条记录)
  3. 每条记录被分隔符分隔为字段(典型分隔符有,;TAB,有时分隔符可以包括可选的空格)
  4. 每条记录都有相同的字段序列

什么是表驱动编程?它主要技术有哪些?(重要)

P112-113

使程序在表中通过选择条件而不使用逻辑语句(if或case)得到算式及运算结果。

  1. 直接访问

    通过数组下标直接访问表,例如用下标1~12的数组元素存放对应月份的天数,则用月份访问数组就能直接得到当月天数

  2. 阶梯访问

    表中项表示一个范围,而不是一个单独的数。

    输入输出
    90~100分优秀
    80~89分良好
    70~79分中等
    60~69分及格
    <60分不及格

    使用表驱动编程,代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void starAccess(int score) {
    String[] grades = {"不及格","不及格","不及格","不及格","不及格","不及格","及格","中等","良好","优秀"};

    int index = score / 10;
    String grade = "优秀";
    grade = grades[index];

    System.out.println(score + "分别对应的成绩是" + grade);
    }
  3. 索引访问

调试的基本技术有哪些

P80-P82

  1. 单步调试源程序

    设置断点,单步调试

    单步调试又有四种:遇到方法时进入方法内部;遇到方法时直接执行到下一步;从当前方法跳出,直接执行到方法的最后一行;跳到下一个断点;

  2. 检查/更改变量的值

  3. 设置监视点观察变量

  4. 上下移动调用栈

简述交互设计的三个基本原则

P145

  1. 学习性

    指的是新的用户能用它进行有效的交互并获得最大的性能。

  2. 灵活性

    是指用户和系统能以多种方式交换信息。

  3. 健壮性

    是指在决定成就和目标评估方面对用户提供的支持程度。

简述交互设计过程模型的四项基本活动

P146

  1. 交互设计以标识和建立用户需要开始。
  2. 提出满足需求的候选设计方案。
  3. 构建交互式版本。
  4. 设计评估。

圈复杂度的计算

V(G) = e - n + 2 = 边数 - 结点数 + 2

​ e表示控制流图中边的数量,n表示控制流图中结点的数量

V(G) = 区域数 = 判定结点数 + 1

表驱动编程