软件需求
软件需求包括三个不同的层次:业务需求、用户需求和功能需求(也包括非功能需求)。业务需求反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。用户需求文档描述了用户使用产品必须要完成的任务。功能需求定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。非功能需求包括产品必须遵从的标准、规范和合约,外部界面的具体细节、性能要求、设计或实现的约束条件及质量属性。
软件设计
软件设计的基本原则是信息隐藏性与模块独立性。
内聚是模块功能强度的度量。一个模块内部各个元素之间的联系联系越紧密,则它的内聚性就越高,相对地,它与其他模块之间的耦合性就会降低,而模块独立性就越强。因此,模块独立性比较强的模块应是高内聚低耦合的模块。
内聚性按强度从低到高有以下几种类型:
- 偶然内聚:即巧合内聚。如果一个模块的各个成分之间毫无联系,则称为偶然内聚。
- 逻辑内聚:几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。
- 时间内聚:如果一个模块完成的功能必须在同一时间内执行,但这些功能只是因为时间因素关联在一起,则称为时间内聚。
- 过程内聚:如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。
- 通信内聚:如果一个模块的所有成分都操作同一个数据集或生成同一个数据集,则称为通信内聚。
- 顺序内聚:如果一个模块的各个成分和同一功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。
- 功能内聚:模块的所有成分对于完成单一的的功能都是必需的,则称为功能内聚。
内聚性参考记忆口诀:偶逻时过通顺功。
偶合性由低到高有以下几种类型:
- 非直接耦合:两个模块之间没有直接关系,它们之间的联系完全不是通过主模块的控制和调用来实现的。
- 数据耦合:一个模块访问另一个模块时,彼此之间是通过简单的数据参数来交换输入、输出信息的。
- 标记耦合:一组模块通过参数记录表传递记录信息,就是标记耦合。这个记录是某一数据结构图的子结构,而不是简单变量。传递的是这个数据结构的地址。
- 控制耦合:如果一个模块通过传送开关、标识、名字等控制信息明显地控制选择另一个模块的功能,就是控制耦合。
- 外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
- 公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
- 内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合:
- 1、一个模块直接访问另一个模块的内部数据。
- 2、一个模块不通过正常入口以另一个模块内部。
- 3、两个模块有一部分程序代码重叠。
- 4、一个模块有多个入口。
耦合性参数记忆口诀:非数标控外公内
软件测试
软件测试是指使用人工或自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实现结果之间的差别。
软件测试从是否关心软件内部结构和具体实现的角度划分为白盒测试、墨盒测试、灰盒测试;从是否执行程序的角度划分为静态测试、动态测试;从软件开发的过程按阶段的角度划分为单元测试、集成测试、确认测试、系统测试、验收测试。
动态测试:它是通过运行程序发现错误;
静态测试:它是指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。
黑盒测试:它把被测试对象看成是一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口处进行测试,依据需求规格说明书检查程序是否满足功能要求。
白盒测试:它把测试对象看作是一个打开的盒子,测试人员必须了解程序的内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构是否有错,实际的运行状态与预期的状态是否一致。白盒测试属于结构测试,测试对象为源程序。
灰盒测试:它关注输出对于输入的正确性,同时也关注内部表现,但这种关注不像白盒测试那样详细且完整,而只是通过一些表征性的现象、事件及标志来判断程序内部的运行状态。
桌前检查:由程序员自己检查自己编写的代码。
代码审查:由若干嘛程序员和测试员组成一个会审小组,通过阅读、讨论和争议对程序进行静态分析过程。
代码走查:它是让与会者“充当”计算机,集体扮演计算机角色,让测试用例沿程序的逻辑运行一遍,随时记录程序的遗迹,供分析和讨论用。
面向对象测试是与采用面向对象开发相对应的测试技术,它通常包括4个测试层次,从低到高排列分别是:算法层、类层、模板层和系统层。
性能测试是通过自动化工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,再者可以结合使用,统称为负载压力测试。通过负载测试,正确在各种工作环境负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标是否变化的情况。压力测试是通过确定一个系统的瓶颈或不能接受的性能点,来获得系统能提供的最大服务级别的测试。
第三方测试:指独立于软件和用户方的测试,组织的测试也称为“独立测试”。
软件维护
软件维护:就是在软件已经交付使用之后,为了改正错误或东路新的需要而修改软件的过程。依据软件本身特点,软件具有可维护性主要由理解性、可测试性、可修改性三个因素决定。
软件维护从性质上分为纠错性维护、适应性维护、完善性维护和预防性维护。
- 纠错性维护:改正在系统开发阶段已发生,而系统测试阶段尚未发现的错误。
- 适应性维护:使软件适应信息技术变化和管理需求变化而进行的修改。
- 完善性维护:它是为了扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段没有规定的功能和性能特征,这方面的维护占整个维护工作的50%~60%。
- 预防性维护:为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新功能。