软件工程

开发模型

快速原型模型

螺旋模型

RUP 模型

三层C/S结构

表示层 功能层 数据层

软件测试

白盒测试

覆盖

语句覆盖
每条语句至少执行一次。对程序执行逻辑覆盖低(循环可以只跑一遍)

单元测试

模块接口

局部数据结构
使用了 未赋值或未初始化的 变量

重要的执行路径

出错处理

边界条件

各种图

数据流图

环路复杂度 计算:

最小环数 + 1

方法二:
V(G)=E-N+2 E是流图中边的条数,N是结点数。

项目进度网络图

项目最短工期,就是关键路径是项目中时间最长的活动顺序。

UML 图

组件图 组件和组件之间的关系

部署图 唯一能够与硬件建立关系的图

顺序图 (时序图、序列图) 有对象 有顺序清晰

文档

高质量文档

针对性 (读者是谁)

无二义性

易读性

完整性

灵活性 (根据需要可以进行剪裁)

可追溯性

软件能力成熟度模型 CMM (Capability Maturity Model for Software)

1.初始级(initial)

2.可重复级(Repeatable)

3.已定义级(Defined)

4.已管理级(Managed)

5.优化级(Optimizing)

软件质量模型

功能性
包含安全性

软件开发的7大原则

  • 开闭原则(Open Closed Principle,OCP)

软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification)。

  • 里氏替换原则(Liskov Substitution Principle,LSP)

有关继承。子类可以扩展父类的功能,但不能改变父类原有的功能。

  • 依赖倒置原则(Liskov Substitution Principle,LSP)

高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)。

其核心思想是:要面向接口编程,不要面向实现编程。

  • 单一职责原则(Single Responsibility Principle,SRP)

又称单一功能原则。一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。

  • 接口隔离原则(Interface Segregation Principle,ISP)

程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。

客户端不应该被迫依赖于它不使用的方法(Clients should not be forced to depend on methods they do not use)。该原则还有另外一个定义:一个类对另一个类的依赖应该建立在最小的接口上(The dependency of one class to another one should depend on the smallest possible interface)。

以上两个定义的含义是:要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

  • 迪米特法则(Law of Demeter,LoD)
    又叫作最少知识原则

只与你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。

  • 合成复用原则(Composite Reuse Principle,CRP)

又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。