目录
1.1 软件概述
1.1.1 软件生命周期
1.1.2 软件开发模型
1.1.3 软件质量概述
1.1 软件概述
软件是相对于硬件而言的,它是一系列按照特定顺序组织的计算机数据和指令的集合。
软件的生命周期:软件从“出生” 到 “消亡” 的过程。
1.1.1 软件生命周期
阶段1-问题定义:由软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。
阶段2-需求分析:划分出软件需要实现的功能模块,并制作成文档。(应考虑到需求的变化)
阶段3-软件设计:在需求分析结果的基础上,对整个软件系统进行设计,如系统框架设计、数据库设计等。
阶段4-软件开发:在软件设计的基础上,选择一种编程语言进行开发。(要符合规范)
阶段5-软件测试:软件开发完成后对软件进行测试,以查找软件设计与软件开发过程中存在的问题并加以修正。
阶段6-软件维护:软件完成测试并投入使用之后,按需对软件进行维护升级以延续软件的使用寿命。软件的维护包括纠错性维护和改进性维护两个方面。
1.1.2 软件开发模型
了解软件开发模型,以便找准自己在其中的定位与任务。
瀑布模型:只有当一个阶段任务完成之后才能开始下一个阶段。利于大型软件开发人员的组织管理及工具的使用与研究,但无法适应用户需求变更。
快速原型模型:在最初确定用户需求时快速构造出一个可以运行的软件原型,供客户评价以确定需求。克服了需求不明确带来的风险,适用于不能预先确定需求的软件项目;准确地设计出软件原型存在一定的难度,此外,这种开发模型也不利于开发人员对产品进行扩展。
迭代模型:又称为增量模型或演化模型,它将一个完整的软件拆分成不同的组件,然后逐个组件地开发测试。整个开发工作被组织为一系列短期、简单的小项目,称为一系列迭代。可以很好地适应客户需求变更,但是迭代模型需要将开发完成的组件集成到软件体系结构中,这样会有集成失败的风险,因此要求软件必须有开放式的体系结构。此外,迭代模型逐个组件地开发修改,很容易退化为“边做边改”的开发形式,从而失去对软件开发过程的整体控制。
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
螺旋模型:融合了瀑布模型、快速原型模型,它最大的特点是引入了其他模型所忽略的风险分析,比较适合开发复杂的大型软件。
敏捷模型:以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。开发的同时也会进行测试工作,甚至可以提前写好测试代码,因此在敏捷模型中,有“开发未动,测试先行”的说法。敏捷模型可以及时响应客户需求变更,不断适应新的趋势,但是在开发灵活的同时也带来了一定程度的混乱。例如,缺乏文档资料;软件之前版本的可重现性、可回溯性较低;对于较大的项目,人员越多,面对面的有效沟通越困难。因此敏捷模型比较适用于小型项目的开发,而不太适用于大型项目。敏捷模型主要有2种开发方式:Scrum与Kanban。
1.1.3 软件质量概述
高质量的软件除了满足客户的显式需求之外,往往还满足了客户隐式需求。
软件质量的概念:软件质量是指软件产品满足基本需求及隐式需求的程度。
从软件质量的定义,可将软件质量分为3个层次:(1)满足需求规定:软件产品符合开发者明确定义的目标,并且能可靠运行。(2)满足用户需求:软件产品的需求是由用户产生的,软件最终的目的就是满足用户需求,解决用户的实际问题。(3)满足用户隐式需求:除了满足用户的显式需求,软件产品如果满足用户的隐式需求,即潜在的可能需要在将来开发的功能,将会极大地提升用户满意度,这就意味着软件质量更高。
软件质量模型:ISO/IEC 9126:1991标准所包含的6大特性。
(1)功能性:在指定条件下,软件满足用户显式需求和隐式需求的能力。(2)可靠性:在指定条件下使用时,软件产品维持规定的性能级别的能力。(3)可使用性:在指定条件下,软件产品被使用、理解、学习的能力。(4)效率:在指定条件下,相对于所有资源的数量,软件产品可提供适当性能的能力。(5)可维护性:指软件产品被修改的能力。修改包括修正、优化和功能规格变更的说明。(6)可移植性:指软件产品从一个环境迁移到另一个环境的能力。
这6大特性及其子特性是软件质量标准的核心,软件测试工作就从这6个特性和27个子特性去测试、评价一个软件的。
“纸杯测试”是一个经典的测试案例,这是微软公司曾给软件测试者出的一道面试题,用于考察面试者对软件测试的理解与掌握程度。
测试项目:纸杯。
需求测试:查看纸杯说明书是否完整。
界面测试:观察纸杯外观,测试表面是否光滑、手感是否舒适。
功能测试:用纸杯装水,观察是否漏水。
安全测试:纸杯是否有毒或细菌。
可靠性测试:从不同高度摔下来,观察纸杯的损坏程度。
易用性测试:用纸杯盛放开水是否烫手,纸杯是否易滑、是否方便饮用。
兼容性测试:用纸杯分别盛放水、酒精、饮料、汽油等,观察是否有渗漏现象。
可移植性测试:将纸杯放在温度、湿度等不同的环境中,查看纸杯是否还能正常使用。
可维护性:将纸杯揉捏变形,看其是否能恢复。
压力测试:用一根针扎在纸杯上不断增加力量,记录多大压强时针能穿透纸杯。
疲劳测试:用纸杯分别盛放水、汽油放置24小时,观察其渗漏情况(时间和程度)。
跌落测试:纸杯(加包装)从高处落下,查看可造成破损的高度。
震动测试:纸杯(加包装)六面震动,评估它是否能应对恶劣的公路/铁路/航空运输等。
测试数据:编写具体测试数据(略),其中可能会用到场景法、等价类划分法、边界值分析法等测试方法。
期望输出:期望输出需要查阅国际标准及用户的使用需求。
用户文档:使用手册是否对纸杯的用法、使用条件、限制条件等有详细描述。
说明书测试:查看纸杯说明书的正确性、准确性及完整性。
影响软件质量的因素:需求模糊,软件开发缺乏规范性文件指导,软件开发人员问题,缺乏软件质量控制管理。