1.1软件 1.软件的发展 软件的发展经历了如下几个阶段: 第一阶段从20世纪50年代初期至60年代中期,这一阶段又称为程序设计阶段。此时硬件已经通用化,而软件的生产却是个体化。软件产品为专用软件,规模较小,功能单一,开发者即为使用者,软件只有程序,无文档。软件设计在人们的头脑中完成,形成了“软件等于程序”的错误观念。 第二阶段从20世纪60年代中期至70年代末期,称为程序系统阶段。此时多道程序设计技术、多用户系统、人机交互技术、实时系统和第一代数据库管理系统的出现,催生了专门从事软件开发的“软件作坊”,软件广泛应用,但软件技术和管理水平相对落后,导致“软件危机”出现。软件危机主要表现在以下几个方面: (1) 软件项目无法按期完成,超出经费预算,软件质量难以控制; (2) 开发人员和开发过程之间管理不规范,约定不严密,文档书写不完整,使得软件维护费用高,某些系统甚至无法进行修改; (3) 缺乏严密、有效的质量检测手段,交付给用户的软件质量差,在运行中出现许多问题,甚至产生严重的后果; (4) 系统更新换代难度大。 第三阶段从20世纪70年代末期至80年代中期称为软件工程阶段。微处理器的出现及分布式系统的广泛应用,使得计算机真正成为大众化的东西。以软件的产品化、系列化、工程化和标准化为特征的软件产业发展起来,软件开发有了可以遵循的软件工程化的设计准则、方法和标准。1968年,北大西洋公约组织的计算机科学家在联邦德国召开国际会议,会议讨论了软件危机问题,正式提出并使用“软件工程”概念。这标志着软件工程的诞生。 第四阶段从20世纪80年代中期至今,客户端/服务器(C/S)体系结构,特别是Web技术和 络分布式对象技术的飞速发展,导致软件系统体系结构向更加灵活的多层分布式结构演变,CORBA、EJB、COM/DCOM等三大分布式的对象模型技术相继出现。 2006年提出的面向服务架构(Service-Oriented Architecture,简称SOA)作为下一代软件架构,是一种“抽象、松散耦合和粗粒度”的软件架构,根据需求通过 络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用,主要用于解决传统对象模型中无法解决的异构和耦合问题。 2.软件的生命周期 软件生命周期具有如下六个阶段: (1) 问题的定义及规划。此阶段由软件开发方与需求方共同讨论,确定软件的开发目标及其可行性。 (2) 需求分析。在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段作为一个很重要的阶段,在整个软件开发过程中是不断变化和深入的,因此必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。 (3) 软件设计。此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。软件设计一般分为总体设计和详细设计。 (4) 程序编码。此阶段是将软件设计的结果转换成计算机可运行的程序代码。程序编码必须符合标准的编写规范,以保证程序的可读性、易维护性,提高程序的运行效率。 (5) 软件测试。在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分为单元测试、组装测试以及系统测试等阶段。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。 (6) 运行维护。软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件有可能不适应用户的要求,要延续软件的使用寿命,此时就必须对软件进行维护。 1.2软件过程 一、RUP(Rational Unified Process),统一软件开发过程,统一软件过程是一个面向对象且基于 络的程序开发方法论。 1. RUP特点: 1).迭代模型 RUP强调软件开发是一个迭代模型(Iterative Model),它定义了四个阶段(Phase):初始(Inception)、细化(Elaboration)、构造(Construction)、交付(Transition)。其中每个阶段都有可能经历以上所提到的从商务需求分析开始的各个步骤,只是每个步骤的高峰期会发生在相应的阶段,例如开发实现的高峰期是发生在构造阶段。实际上这样的一个开发方法论是一个二维模型,这种迭代模型的实现在很大程度上提供了及早发现隐患和错误的机会,因此被现代大型信息技术项目所采用。 2)、用例驱动 RUP的另一大特征是用例驱动。用例是RUP方法论中一个非常重要的概念。简单地说,一个用例就是系统的一个功能。在系统分析和系统设计中,用例被用来将一个复杂的庞大系统分割、定义成一个个小的单元,这个小的单元就是用例。然后以每个小的单元为对象进行开发。按照RUP过程模型的描述,用例贯穿整个软件开发的生命周期。在需求分析中,客户或用户对用例进行描述,在系统分布和系统设计过程中,设计师对用例进行分析,在开发实现过程中,开发编程人员对用例进行实现,在测试过程中,测试人员对用例进行检验。 3)、以架构为中心 RUP的第三大特征是它强调软件开发是以构架为中心的。构架设计(ArchitecturalDesign)是系统设计的一个重要组成部分。在构架设计过程中,设计师(Architect)必须完成对技术和运行平台的选取,整个项目的基础框架( Framework)的设计,完成对公共组件的设计,如审计( Auditing)系统、日志(Iog)系统、错误处理(Exception Handling)系统、安全(Security)系统等。设计师必须对系统的可扩展性( Extensibility)、安全性(Security)、可维护性( Maintainability)、可延拓性(Scalability)、可重用性(Reusability)和运行速度(Performance)提出可行的解决方案。 2.RUP各个阶段 RUP中的软件生命周期在时间上被分解为4个顺序的阶段,分别是 初始阶段、细化阶段、构建阶段和交付阶段。每个阶段结束于一个主要的里程碑;每个阶段本质上是两个里程碑之间的时间跨度。在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足,如果评估结果满意,则允许项目进入下一个阶段。其中每个阶段又可以进一步分解迭代。一个迭代是一个完整的开发循环,产生一个可执行的产品版本,作为最终产品的一个子集,产品增量式地发展,从一个迭代过程到另一个迭代过程,直到成为最终的系统。
1.单元测试 单元测试又称模块测试,针对软件设计中的最小单位一程序模块,进行正确性检查的测试工作。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。 单元定义: C中指一个函数,Java中 指一个类,在图形化的软件中, 单元测试的六个问题 ①什么时候进行单元测试:编码后,编译通过后进行。 ②由谁来做单元测试:白盒测试工程师或者开发工程师,最好不要白己做白己代码的测试 ③单元测斌的依据:源程序(代码+注释) +《详细设计文档》 ④单元测试的通过标准:程序通过所有单元测试用例、语句的覆盖率达到100%、分支的覆盖率达到85% ⑤国内单元测斌的现状:简单+没有单元测试计划、单元测试用例和代码覆盖率的统计。 ⑥如何进行单元测试:单元格测试主要用白盒测试,先静态地检查代码是否符合规 范,然后动态运行代码,检查其实际运行结果,检查程序的运行结果是否正确是一个最基本的要求,还要关注容错处理,程序的边界值处理等 2.集成测试 集成测试又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增的测试。重点测试不同模块的接口部分。 1.什么时候进行集成测试 单元测试&集成测试同步进行,理论上先有单元测试。 2.由谁来做集成测试 白金测试工程师或者开发工程师 3.集成测试的依据 单元测试的模块+《概要设计》文档。 3.系统测试 指的是将整个软件系统看为一一个整体进行测试,包括对功能、性能、 以及软件所运行的软硬件环境进行测试。 目前系统测试主要由黑盒测试工程师在系统集成完毕后进行测试,前期主要测试系统的功能是否满足需求,后期主要测试系统运行的性能是否满足需求,以及系统在不同的软硬件环境中的兼容性等。 4.验收测试 验收测试指按照项目任务书或合同、供需双方约定的验收依据文档进行的对整个系统的测试与评审,决定是否接收或拒收系统。在系统测试的后期,以用户测试为主或有测试人员等质量保证人员共同参与的测试。
- a测试:指的是指的是由用户,测试人员、开发人员等共同参与的内部测试。
- β测试:指的是内测后的公测,印完全交给最终用户测试
- 正式的验收测试
验收测试的重要性:验收签字,收钱 5.静态测试(static testing) 静态测试是指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误过程。
- 代码测试: 主要测试代码是否符合相应的标准和规范。
- 界面测试:主要测试软件的实际界面与需求中的说明是否相
符
- 文档测试:主要测试用户手册和需求说明是否真正符合用户
的实际需求。
- 工具, (Logiscope) Telelogic,可以用作Java/C++等规范
6.动态测试 动态测试(dynamic testing)、 是指实际运行被测程序,输入相应的测试数据, 检查实际输出结果和预期结果是否相符的过程。
- 动态测试方法为结构和正确性测试
- 动态测试工具Robot、 QTP等
7.黑盒测试 指的是把被测的软件看做一个黑金子,我们不关心盒子里面的结构是什么样子的,只关心软件的 输入数据和输出数据。 7.1功能测试:是黑盒测试的一方面。它检查软件的功能是否符合客户要求。
- 逻辑功能测试( logic function testing )
- 界面测试(UI testing)
- 易用性测试(usability testing)
- 安装测试(instal lation testing)
- 兼容性测试(compatibility testing)
7.2性能测试(performance testing) :是软件测试的高端领域,性能测试工程师的待遇和白盒测试工程师不相上下,通常我们所说的高级软件测试工程师一般就是指性能测试或是白盒测试工程师。
- 时间性能(事务响应时间等)
- 空间性能(系统資源消耗)
- 一般性能测试
- 可靠性测试
- 负载测试
- 压力测试
8.白盒测试 指的是把盒子打来,去研究里面的 源代码和程序结构。 在软件公司中,往往采用黑盒测试&白盒测试相结合的方式。
- 软件的整体功能和性能进行黑盒测试
- 软件的源代码采用白盒测试
9.回归测试(regression testing) 是指软件被修改后重新进行的测试,如重复执行上一个版本测试时的用例,是为了保证对软件所做的修改没有引入新的错误而重复进行的测试。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!