软件=程序+数据+文档
- 程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能
- 数据:使得程序能够适当操作信息的数据结构
- 文档:描述程序的研制过程,方法和使用的图文资料
软件的本质特性:复杂性,一致性,可变性,不可见性
软件开发面临的挑战:客户不满意,风险与成本问题,项目过程失控,无力管理团队
软件工程的目标:创造足够好的软件
软件工程生命周期:
软件定义阶段:1.问题定义 2.可行性分析 3.需求分析 。
软件开发阶段:1.总体设计 2.详细设计 3.编码 4.单元测试 5.综合测试 。
运行和维护阶段 1.运行维护
软件工程开发方法:
- 面向过程:算法为基本构造单元,自顶向下,将功能和数据一定程度分离
- 面向对象:类为基本单元,对象是类的实例化,对象之间以消息传递为基本手段
- 面向构件
- 面向服务应用业务过程由服务组成,而服务由构建组成
软件开发的基本策略:
- 软件复用:不必从零做起,复用已有构建,具有较高质量
- 分而治之:将复杂问题分解为若干简单问题,逐个解决
- 逐步演进
- 优化拆中:优化软件各个质量特性(运行速度,资源利用等),协调各个质量特性,实现整体质量最优
软件工程的Wasserman规范
- 抽象
- 软件构件方法
- 用户界面原型化
- 软件体系结构
- 软件过程
- 软件复用
- 度量
- 工具与集成环境
软件质量:
- 软件过程:过程质量
- 软件产品:内部质量,外部质量
- 产品效用:使用质量
如何实现软件的高质量
- 高质量的软件设计
- 规范的编码
- 有效的测试
**说说你对软件工程的认识和理解。**
软件工程就是应用工程的方法对软件进行开发与维护,并开展对软件进行开发与维护方法和途径的研究
**单元测试**
对软件中的最小可测试单元进行检查和验证(好比城墙的每一块砖)单元测试内容:
- 模块接口:对通过所有被测模块的数据流进行测试
- 局部数据结构:检查模块中数据结构是否正确使用和定义
- 边界条件:检查数据流或控制流中条件或数据处于边界时的出错可能性
- 独立路径:检查可能引发错误的路径和进行错误处理的路径
- 出错处理:检查由计算错误,判定错误,控制流错误导致的程序错误
单元测试原则:
- 快速的
- 独立的
- 可重复的
- 自我验证的
- 及时的
单元测试过程:
- 确定要做的单元测试
- 编写或修改单元测试用例
- 执行单元测试
- 根据结果修改或增加单元测试
- 直到满足测试质量
黑盒测试法:
把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。黑盒测试又称为功能测试,包含等价类划分法、边界值法、错误推测法、因果图法等。
白盒测试法:
是把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。白盒测试又称为结构测试,包含逻辑覆盖法和基本路径测试法。
使用代码覆盖率作为测试衡量标准
测试用例的重要性
- 降低软件测试成本
- 保证测试工作质量
- 评估和检验测试机效果
测试用例设计:
- 具有代表性和典型性
- 寻求系统设计和功能设计的弱点
- 既有正确输入也有错误或异常输入
- 考虑用户实际的诸多使用场景
等价类划分:
将输入域分为尽可能多少的若干子域,两两互不相交
举个栗子