软件工程基础
甘特图(Gantt Chart)
关键字:开始、结束时间,并行关系

皮特图(PERT Chart)
关键字:开始、结束时间,依赖关系

黑盒测试
黑盒测试是一种软件测试方法,它专注于软件的功能性需求,而不关心其内部逻辑或结构,通过输入数据和观察输出来验证软件是否按预期工作。
例题:按等价类划分方式,哪个不是好用例,就看谁不在域内的样例多。

McCabe
McCabe(环) = 弧数 - 节点数 + 2
McCabe(环) = 闭合区域 + 1
例题:下图表示通过闭合区域+1,计算环路复杂度,答案为5。
通过弧数(10) - 节点数(7) + 2 同样等于5。
可以用两种方法验证答案正确性。

白盒测试
语句覆盖(行覆盖): 这种类型的白盒测试目的是执行每个语句或代码行至少一次。这有助于识别代码中的未执行语句和死代码。
判定覆盖(分支覆盖): 旨在测试每个条件语句的所有可能结果。通过对每个条件的真假情况进行测试,可以确保代码在不同情况下都能正确地工作。
条件覆盖: 测试每个逻辑条件的所有可能组合。这种测试可确保程序在各种条件下能够正确处理数据。
判定条件覆盖: 设计足够多的测试用例,使得判定中每个条件的所有可能取值至少能够获取一次,同时每个判断的所有可能的判定结果至少执行一次。
条件组合覆盖: 要求设计足够多的测试用例,使得每个判定中条件的各种组合至少出现一次。满足条件组合覆盖标准的测试用例,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。
路径覆盖: 这是白盒测试中最严格的一种方法,目的是测试代码中的所有可能路径,以确保程序在所有情况下都正确执行。对于大型软件系统,路径覆盖测试可能过于复杂,但对于一些关键的代码模块,它仍然非常有用。
例1:

例2:同时满足语句、判定、条件、路径判断,此时选择最强的覆盖,即路径覆盖。

例3:

例4: 注意语句覆盖需要2个用例,路径覆盖需要4个样例(判断一不可以做回环),McCabe也是4。

软件维护类型
改正性: 原有需求未发现的错误进行改正
完善性: 新增或变更需求,进行修改
适应性: 不改变基本功能前提下,提升可扩展性或性能
面向对象测试的四个层次
算法层: 测试类中的方法(单元测试)
类层: 测试类中方法和属性的相互作用
模板层(主题层): [通过消息]测试一组类对象之间的相互作用(子系统测试)
系统层: 把各个子系统组装成完整的面向对象软件系统进行测试
设计模式原则
共同封闭原则: 当需要修改时,所有的修改都可以在一个包内进行,避免影响其他包。
共同重用原则: 强调分类的概念,即具有相同关系或关联比较紧密的类应该分到一组中,这样方便修改和客户端的调用。 即如果重用了这组接口(或类)中的一个,那么也应该重用这组接口(或类)中的其他部分
开放封闭原则: 对扩展开放、对修改关闭。
单一职责: 主张一个类应该只有一个引起它变化的原因,即一个类应该只有一个职责。
里氏替换原则: 子类型必须能够替换掉它们的父类型。这意味着,如果你使用的是父类型的对象,那么你可以在不改变程序行为的情况下,用子类型的对象替换它。
依赖倒置原则: 高层模块不应该依赖于低层模块,两者都应该依赖于抽象。代码应该依赖于抽象接口或基类,而不是具体的实现类。
接口分离原则: 当一个接口由于太大而显得臃肿时,应该将其拆分成多个更小的接口,每个接口只包含与一组特定客户端相关的操作。
数据库各阶段设计
需求分析: 数据流图、数据字典、需求说明书
概念结构设计: ER模型
逻辑结构设计: 关系模式(表)
UML序列图
用例图

类图



序列图

类的分类
- 实体类 描述系统中的每个实体,如学生、用户、商品等,它们通常需要永久存储,一般使用数据库表或文件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。
- 控制类 用于实现应用程序的执行逻辑,将控制类抽象出来可以降低界面和数据库之间的耦合,身份验证属于控制类。
- 边界类 用于描述外部参与者与系统之间的交互,位于系统与外界的交接处(接口),包括所有窗体、报表、打印机和扫描仪等硬件的接口,以及与其他系统的接口。
软件需求
- 功能需求:产品必须具备的功能
- 非功能需求:可靠性、性能、响应时间等品质
- 设计约束:对解决方案的一些约束说明
软件开发流程
- 需求分析:确定功能、非功能需求。 输出:数据流图、数据字典、实体联系图、状态迁移图。
- 概要设计:将需求转化为软件的模块划分,确定模块间调用关系。
- 详细设计:将模块进行细化,得到详细算法和数据结构
- 编码
- 测试