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