软件是什么?
对于软件大家应该都不陌生,我们每天都会使用各式各样的软件,如微信,QQ等。
软件是计算机系统程序和相关文件/文档的总称。
软件测试就是利用一定的方法对软件的质量或者使用性进行判断和评估的过程。
软件和其他产品一样,都有一个从“出生”到“消亡的过程”,这个过程就叫软件的生命周期。学习软件测试,就必须要对软件相关只是有一定的了解,其中就包括软件生命周期、软件开发模型等。
软件生命周期
软件生命周期有多个阶段,每个阶段都有明确的任务,这样就可以使得结构复杂、管理复杂的软件开发变得容易控制和管理。通常,软件生命周期可分为6个阶段:
软件生命周期
问题定义:该阶段有软件开发方与需求方共同讨论,主要确定开发的目标和可行性。
需求分析:该阶段对软件需求进行更深入的分析,划分出软件需要实现的功能模块,并制作成文档。
软件设计:在需求分析的结果的基础上,对整个软件系统进行设计,比如数据库设计等。
软件开发:在软件设计基础上,开发人员选择一种编程语言进行开发。
软件测试:在软件开发完成后对软件进行测试,查找软件中的问题并加以修正。
软件维护:软件完成测试并投入使用后,面对庞大的用户群体,软件可能无法满足用户使用需求,此时就需要对软件进行维护升级以延续软件的使用寿命。
软件开发模型
软件开发模型规定了软件开发应遵循的步骤,是软件开发的导航图。
典型的开发模型:
瀑布模型
瀑布模型将软件开发过程分为6个阶段:
优点:为整个项目划分了清晰的检查点,当一个阶段完成之后,只需要把全部精力放置在后面的开发上即可,有利于大型软件开发人员的组织管理及工具的使用与研究,可以提高开发的效率。
缺点:
1.严格按照线性方式进行的,无法适应用户需求变更,用户只能等到最后才能看到开发成果,增加了开发风险;
2.早期犯的错误在项目完成后才发现;
3.要求每一个阶段必须有结果产出,这就势必增加了文档的数量,使软件开发的工作量变大。
快速还原模型
快速原型模型与瀑布模型正好相反,它在最初确定用户需求时快速构造出一个可以运行的软件原型,这个软件原型向用户展示待开发软件的全部或部分功能和性能,客户对该原型进行审核评价,然后给出更具体的需求意见,这样逐步丰富细化需求,最后开发人员与客户达成最终共识,确定客户的真正需求。确定客户的真正需求之后,开始真正的软件开发。
该模型的开发过程:
快速还原模型
优点:克服了需求不明确带来的风险,适用于不能预先确定需求的软件项目。
缺点:
1.快速原型模型关键在于快速构建软件原型,准确地设计出软件原型存在一定的难度;
2.开发模型不利于开发人员对产品进行扩展。
迭代模型
迭代模型将一个完整的软件拆分成不同的组件,然后逐个组件地开发测试,每完成一个组件就展现给客户,让客户确认这一部件功能和性能是否达到客户需求,最终确定无误,将组件集成到软件体系结构中。开发过程如下:
优点:可以很好地适应客户需求变更。
缺点:
1.要求软件必须有开放式的体系结构(因为迭代模型需要将开发完成的组件集成到软件体系结构中,这样会有集成失败的风险)
2.迭代模型逐个组件地开发修改,很容易退化为“边做边改”的开发形式,从而失去对软件开发过程的整体控制。
螺旋模型
引入了其他模型所忽略的风险分析,如果项目不能排除重大风险,就停止项目从而减小损失。这种模型比较适合开发复杂的大型软件
螺旋模型将整个项目开发过程划分为几个不同的阶段,每个阶段按部就班地执行,每个阶段在开始之前都要进行风险评估,如果能消除重大风险则可以开始该阶段任务。在每个阶段,首先构建软件原型,根据快速原型模型完成这个迭代过程,产出最终完善的产品,然后进入下一个阶段,同样下一个阶段开始之前也要进行风险评估,这样循环往复直到完成所有阶段的任务。螺旋模型开发图:
优点: 强调了风险分析,意味着对可选方案和限制条件都进行了评估,有助于将软件质量作为特殊目标融入到产品开发中。它以小分段构建大型软件,使成本计算变得简单容易,而且客户始终参与每个阶段的开发,保证了项目不偏离正确方向,也保证了项目的可控制性。
敏捷模型
敏捷模型以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷模型中,软件项目在构建初期被拆分为多个相互联系而又独立运行的子项目,然后迭代完成各个子项目,开发过程中,各个子项目都要经过开发测试。当客户有需求变更时,敏捷模型能够迅速地对某个子项目做出修改以满足客户的需求。
在敏捷模型中,软件开发不再是线性的,开发的同时也会进行测试工作,甚至可以提前写好测试代码,因此在敏捷模型中,有“开发未动,测试先行”的说法。比较适用于小型项目的开发,太适用于大型项目(因为对于较大的项目,人员越多,面对面沟通的有效性越困难)
敏捷模型的开发方式主要有两种:Scrum和Kanban(这里就不说啦,有需要了解的可以看《软件测试》这本书哦!)
读《软件测试》,多多有益!