软考系统架构师-面对对象设计和软件测试

面对对象设计

设计原则

  • 单一职责原则:设计目的单一的类
  • 开放-封闭原则:对扩展开放,对修改封闭
  • 李氏替换原则:子类可以替换父类
  • 依赖倒置原则:要依赖于抽象,而不是具体抽象,针对接口编程,不要针对实现编程
  • 接口合理原则:使用对个专门的接口比使用单一的总接口要好
  • 组合重用原则,尽量使用组合,而不是继承关系达到重用目的
  • 迪米特原则(最少知识原则):一个对象应当对其他对象有尽可能少的了解
    ###设计模式的概念
  • 架构模式:软件设计中的高层决策,例如c/s结构就数据架构模式,架构模式反映了开发软件系统过程中所作的基本设计决策
  • 设计模式:主要关注软件系统的设计,与具体的实现语言无关
  • 惯用法:是最底层的模式,关注软件系统的设计和实现,实现是通过某种特定的程序设计语言来描述构件与构件之间的关系,每种编程语言都要自己特定的模式,即语言的惯用型

设计模式的分类

  • 创建型模式:

    • 工厂方法模式:定义一个创建对象的接口,由子类来决定需要实例化哪个类,工厂方法使得子类实例化的过程推迟
    • 抽象工厂模式:提供一个接口,可以创建一系列相关或相互依赖的对象,无须指定他们具体的类型
    • 原型模式:用原型实例来指定创建对象的类型,并且通过拷贝这个原型来创建新的对象
    • 单例模式:保证一个类全局只有一个实例,并提供一个访问它的全局访问点
    • 构建器模式:将一个复杂类的表示和他的构造方法分开,使得相同的构造过程有不同的表示(简化复杂的构造)
  • 结构性模式

    • 适配器:将一个接口转换成另外一个不适的接口,中间有个转换器
    • 桥接:将类的抽象部分和实现部分分开来,使得他们可以独立的变化(继承树拆分)
    • 组合:将对象组合成树型结构以表示整体-部分的,使得用户对单个对象和组合对象的使用具有一致性
    • 装饰:动态的给一个对象添加一些额外的职责,提供了用子类扩展功能的一个灵活的踢打
    • 外观:定义一个接口,为子系统的一组接口提供一个统一的外观,简化对子系统的使用
    • 享元:提供支持大量细粒度对象共享的有效方法
    • 代理:为其他对象提供一种代理一控制这个对象的访问
  • 行为型模式

    • 职责链:通过给多个对象处理请求的机会,减少请求的发送者和接受者之间的耦合,江接受对象连接起来,在链中传递请求,知道有一个对象处理这个请求
    • 命令:讲一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,江请求排队或记录请求日志,支持可撤销的操作
    • 解释器:给定一种语言,定义他的文法表示,并定义一个解释器,改解释器用来根据文法表示来解释语言中的句子
    • 中介者:用一个中介对象来封装一系列的对象交互,她是的各对象不需要显式的相互调用,从而达到低耦合,还可以独立的改变对象间的交互
    • 迭代器:提供一种方法来顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示
    • 备忘录:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将改对象恢复到原先保存的状态
    • 观察者:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都会得到通知,并自动更新
    • 状态:允许一个对象在其内部状态改变时改变他的行为
    • 策略:定义一系列的算法,把他们一个个封装起来,并且使他们之间可相互替换,从而让算法可以独立于使用他的用户而变化
    • 模板方法:定义一个操作中的算法骨架,而江一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义算法的默写特定步骤
    • 访问者:表示一个作用域摸对象结构中的个元素的操作,使得在不改变各元素的类的前提下定义作用于这些元素的新操作
      ##软件测试
      ###软件测试- 测试原则和类型
  • 原则:

    • 尽早,不断的进行测试
    • 程序员避免测试自己设计的程序
    • 既要选择有效合理的数据,也要选择无效不合理的数据
    • 修改后进行回归测试(确定没有产生新的bug或导致其他代码产生错误)
    • 尚未发现的错误数量与改程序一发现错误数成正比
  • 动态测试

    • 黑盒测试法
    • 白盒测试法
    • 灰盒测试法
  • 静态测试

    • 桌前检查
    • 代码走查
    • 代码审查

测试用例设计

  • 黑盒测试
    • 等价类划分
    • 边界值分析
    • 错误推测(经验)
    • 因果图
  • 白盒测试:语句覆盖,判定覆盖,条件覆盖,条件判定覆盖,修正的条件覆盖,条件组合覆盖,点覆盖,边覆盖,路径覆盖
    • 基本路径测试
    • 循环覆盖测试
    • 逻辑覆盖测试

软件测试阶段

  • 冒烟测试

    • 单元测试
    • 集成测试
      • 一次性组装
      • 增量式组装:自顶而下,自底而上,混合式
    • 确认测试
      • 内部确认测试
      • α测试(产品测试)
      • β测试(用户测试)
      • 验收测试
    • 系统测试
      • 恢复测试
      • 安全性测试
      • 压力测试
      • 性能测试
        • 负载测试:并发情况下的测试
        • 强度测试:部分资源不足,系统的运行情况
        • 容量测试:最大容量的测试
      • 可靠性测试
      • 可用性测试
      • 可维护性测试
      • 安装测试
  • 面对对象的测试

    • 算法层(单元测试):包括等价类划分测试,组合功能测试,递归函数测试和多态消息测试
    • 类层(模块测试):包括不变式边界测试,模态类测试和非模态类测试
    • 模板层/类树层(集成测试):包括多态服务测试和展平测试
    • 系统层(系统测试)

测试管理

  • 测试团队管理(如何评估找出bug的比例)
    • 错误植入法(人为植入错误,看找出几个):a1:b1 = a2:b2
    • 两组并行的方法(分为两个小组一起找) (a*b)/c
    • 错误报告率ERE= e/(e+d):e是测试错来的错误,d是用户测试出来的bug
  • 测试计划管理
  • 错误(缺陷)跟踪管理
  • 测试件管理

软件调试

  • 调试方法
    • 蛮力法:通过计算机找错,低效,耗时
    • 回溯法:从出错处人工沿着控制流程往回追踪,直至发现出错的根源,复杂程序由于回溯路径多,难以实施
    • 原因排除法:主要实现那个是演绎和归纳,用二分法实现
  • 调试和测试区别
    • 测试是为了找出bug,调试是为了定位错误并修改程序以修正错误
    • 调试是测试之后的活动,测试和调试在目标,方法和思路上都有所不同
    • 测试是从一个已知的条件开始,使用预先定义的过程,有预知的结果,调试从一个位置的条件开始,结束的过程不可预计
    • 测试过程是可以实现设计,进度可以事先确定,调试不能描述过程或持续时间

你可能感兴趣的:(软考,面的对象设计,软件测试,设计原则,设计模式,系统架构师)