软件理论基础(定义、模型、流程、生命周期)
一:软件产品定义
定义:指向用户提供的计算机酸碱、信息系统或设备中嵌入的软件或在提供计算机信息系统集成、应用服务等技术服务时提供的计算机软件
内容:计算机程序、程序所用的数据以及有关文档资料的集合
二:软件项目人员
项目经理:驱动整个项目的运转,负责制定计划,安排人力,管理进度,协调团队,进行重大决策
架构师:技术专家,经验丰富,负责整个系统的体系架构的设计以及关键模块的设计
程序员:设计、编写软件,并修复软件中的缺陷
测试:负责找出软件产品存在的问题并报告
UI:完成软件设计师安排的功能界面设计
产品经理:对所负责的产品进行策划和管理
三:QA与QC的区别:
QA:软件质量保证
QC:软件质量控制(即软件测试)
QA是保证软件研发过程的质量
QC是保证软件最终产物的质量
四:软件开发流程:
软件产品从最初的构思到公开发布的过程,称为软件开发的流程。软件开发有各种不同的方法,没有所谓最好的模式。
五:软件开发最常见的模型
1)瀑布模型
瀑布模型是一种线型的、顺序的软件开发模型
优点:为项目提供了按阶段划分的检查点;当前一阶段完成后,只需要去关注后续阶段;它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导
缺点:各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;由于开发模型是线型的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险;通过过多的强制完成日期和里程碑来跟踪各个项目阶段;瀑布模型的突出缺点是不适应用户需求的变化
2)V模型
优点:V模型将瀑布模型中的测试部分做了细化,主要反映测试活动与分析和设计的关系;强调了在整个软件项目开发中需要经历的若干个测试级别,并与每一个开发级别对应,将开发阶段清楚的表现出来,便于控制开发的过程。当所有阶段都结束时,软件开发就结束了。
缺点:把测试作为编码之后的最后一个活动,需求分析等前期产生的错误直到后期的验收测试才能发现,忽略了测试的对象不应该仅仅包含程序,没有明确指出对需求、设计的测试。
3)W模型
优点:增加开发阶段的同步测试形成W模型;强调了测试计划等工作的先行和对系统需求和系统设计的测试;测试与开发同步进行,有利用尽早的发现问题;
缺点:仍把开发活动看成是从需求开始到编码结束的串行活动,只有上一阶段完成后,才可以开始下一阶段的活动,不能支持迭代。
4)螺旋模型
尤其重视风险分析阶段,特别适用于庞大并且复杂,非常高风险的项目。通畅螺旋模型由4个阶段组成:指定计划、风险分析、实施工程和客户评估。螺旋模型中,发布的第一个模型甚至可能是没有任何产出的,可能仅仅是纸上谈兵的一个目标,但是随着一次次的交付,每一个版本都会朝着固定的目标迈进,最终得到一个更加完善的版本
优点:设计上的灵活,可以在项目的各个阶段进行变更;以小的分段来构建大型系统,使成本计算变的简单容易;客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性;随着项目推进,客户始终掌握项目的最新信息,从而他或她能够和管理层有效地交互;客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品
缺点:很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前的用户需求
5)原型模型
原型作用:
问题:开发初期很难确定用户需求规格
解决:用户与开发者之间的鸿沟 以原型为共同语言,实现用户与开发者双向沟通。
6)其他模型:大爆炸模式
大爆炸模式是最简单的软件开发模式,计划、进度安排和正规开发过程都几乎没有,所有精力都花在开发软件和编写代码上
一般,大爆炸模式几乎没有测试,即时有也要挤在产品发布前,通常都会避免在此模式下进行测试。
7)敏捷软件开发
敏捷开发目的:
通过过程和工具理解个人和交流的作用
人是获得成功的最为重要的因素
一个优秀的团队成员未必就是一流的程序员:优秀团队的成员可能是平均水平的程序员,但他们能很好的和别人合作、沟通
合适的开发工具(IDE、Complier、版本控制系统)对于成功很重要,但工具的作用不宜被过分夸大
通过合同和谈判得到客户的协作
不能向订购日用品一样来订购软件(如果客户仅仅写下一份他需要的软件的描述,然后就让人在固定的时间内以固定的价格去开发它,用这种方式来对待软件项目的尝试都是以失败而告终的。)成功的项目需要有序、频繁的客户反馈。不是依赖于合同或者关于工作的陈述,而是让软件的客户和开发团队密切的在一起工作,并尽量的提供反馈
在计划的执行中做出对变更的响应
响应变化的能力常常决定着一个项目的成败(当构建计划时,应该确保计划时灵活的、并且易于适应商务和技术方面的变化)
计划不能考虑的过远(计划没有变化快)
较好的作计划的策略是:(为下两周做详细计划;为下三个月做粗略计划;再以后就做极为粗糙的计划)(这种逐渐降低的细致度,意味着仅仅对迫切的任务才进行详细计划,计划的其余部分仍然保持着灵活性。)
六:一个好的测试具备的几个特点:
1)每个开发活动都有相对应的测试活动
2)每个测试级别都有其特有的测试目标
3)对于每个测试级别,需要在相应的开发活动过程中进行相应的测试分析和设计
4)在开发生命周期中,测试员在文档初稿阶段就应该参与文档的评审
七:有效的测试方式:
八:软件测试与软件开发过程的关系
首先,对每一个程序进行单元测试,消除程序内部在逻辑上和功能上的错误和缺陷
然后,再对照软件设计进行集成测试,检测和排除子系统结构上的错误
随后,对照需求,进行确认测试
最后,从系统的整体出发,运行系统,看是否满足要求
九:软件研发流程
十:软件的生命周期