一、软件工程
1、软件需求 软件需求包括三个层次:业务需求、用户需求和功能需求、非功能需求。业务需求反映了组织机构或客户对系统、产品高层次的目标要求,在项目视图与范围文档中予以说明。用户需求描述了用户使用产品必须要完成的任务。功能需求定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足业务需求。非功能需求包括产品必须遵从的标准、规范和合约,外部界面的具体细节,性能要求,设计或实现的约束条件及质量属性。 2、软件设计
- 软件设计是把许多事物和问题抽象起来,并且抽象其不同的层次和角度。
- 软件设计的基本原则是信息隐蔽与模块独立性。
- 模块独立性比较强的模块是高内聚低耦合的模块。 模块的内聚性和耦合性如下: 内聚性记忆口诀:“偶逻时过通顺功” 耦合性记忆口诀:“非数标控外公内” (1)一个模块直接访问另一个模块的内部数据。(2)一个模块不通过正常入口转到另一模块内部。(3)两个模块有一部分程序代码重叠(只可能出现在汇编语言中)。(4)一个模块有多个入口。 3、软件测试
- 软件测试是指使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
- 软件测试从是否关心软件内部结构和具体实现的角度划分为白盒测试、黑盒测试、灰盒测试;从是否执行程序的角度划分为静态测试、动态测试;从软件开发的过程按阶段的角度划分为单元测试、集成测试、确认测试、系统测试、验收测试。
- 性能测试是通过自动化的测试工具模拟多种正常峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行,统称为负载压力测试。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。
- 压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。 4、软件维护 软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。依据软件本身的特点,软件的可维护性主要由可理解性、可测试性、可修改性三个因素决定。 软件的维护从性质上分为纠错性维护、适应性维护、预防性维护和完善性维护。纠错性维护是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。适应性维护是指使用软件适应信息技术变化和管理需求变化而进行的修改。完善性维护是为扩充功能和改善性能而进行的修改。预防性维护是为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,主动增加预防性的新功能。
二、软件过程改进
- 软件过程改进(Software Process Improvement,SPI)帮助软件企业对其软件过程的改进进行计划、制定以及实施,它的实施对象就是软件企业的软件过程,也就是软件产品的生产过程,当然也包括软件维护之类的维护过程。
- CMM ( Capability Maturity Model for Software,全称为SW-CMM,软件能力成熟度模型)就是结合了质量管理和软件工程的双重经验而制定的一套针对软件生产过程的规范。CMM是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化,使企业能够更好地实现商业目标。
- CMM将成熟度划分为5个等级:
- CMMI (Capability Maturity Model Integration,能力成熟度模型集成)是CMM模型的最新版本。
- CMMI也划分为5个成熟度级别:完成级 -> 管理级 -> 定义级 -> 量化管理级 -> 优化级 三、软件复用 软件复用,又称软件重用,是指在两次或多次不同的软件开发过程中重复使用相同或相近软件元素的过程。软件元素包括程序代码、测试用例、设计文档、设计过程、需求分析文档甚至领域知识。通常,把这种可重用的元素称作软件构件,简称为构件。可重用的软件元素越大,就说重用的粒度越大。 四、面向对象基础
- 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。面向对象的软件系统是由对象组成的,复杂的对象由比较简单的对象组合而成;类是对象的抽象定义,是一组具有相同数据结构和相同操作的对象的集合,类的定义包括一组数据属性和在数据上的一组合法操作。也就是说,类是对象的抽象,对象是类的具体实例。
- 封装是对象的一个重要原则。它有两层含义:第一,对象是其全部属性和全部服务紧密结合而成的一个不可分割的整体;第二,对象是一个不透明的黑盒子,表示对象状态的数据和实现操作的代码都被封装在黑盒子里面。使用一个对象的时候,只需知道它向外界提供的接口形式,无须知道它的数据结构细节和实现操作的算法。
- 继承是使用已存在的定义作为基础建立新的定义。
- 多态中最常用的一种情况就是,类中具有相似功能的不同函数是用同一个名称来实现的,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。
- 接口:操作的规范说明,说明操作应该做什么。
- 消息和方法:对象之间进行通信使用消息来实现。类中操作的实现过程叫做方法。
- 软件复用:用已有软件构造新的软件,以缩减软件开发和维护的费用,称为软件复用。
- 抽象:针对特定实例抽取共同特征的过程。