软件基础
学习目标
- 了解什么是软件
- 掌握软件开发全过程
- 了解软件质量概念
- 掌握软件质量六大特征和27小特征
- 了解QA和QC的区别
- 理解CMMI能力成熟度模型综合
1. 什么是软件
定义:软件是计算机系统中与硬件相互依存的一部分,是一种逻辑产品,不是客观的实体,具有无形性。它以程序+文档的形式存储在磁盘或光盘介质上,通过计算机系统体现出它的功能和作用。能够解决用户对于计算机、电子相关的业务需求。
软件 = 程序 + 文档 + 数据
- 程序:程序员通过开发语言编写的代码集合
- 文档:软件开发过程中所产生的图文文档集合,如《需求规格说明书》、《用户手册》、《数据库设计说明书》等
- 数据:使用软件过程中所产生的的本地数据,以及服务器数据
2. 应用软件软件的分类(按结构划分)
- 单机软件:不需要连接网络,就可以应用的软件,例如:记事本、压缩工具、单机游戏等
- 分布式软件:需要连接网络,才可以应用的软件。例如:QQ、微信、网站、网络游戏等
- B/S结构:browser浏览器/server服务器,无序下载安装包,直接使用浏览器作为直接载体的软件
- C/S结构:client客户端/server服务器,需要下载安装包,以系统(电脑系统、手机系统)作为直接载体的软件
3. 软件由哪些角色完成
一款软件的诞生,离不开中间多种岗位角色的努力
- 产品经理:负责市场调研用户需求,确定需求方向,设计软件产品的原型
- 项目经理:负责驱动整个项目组的运转,制定项目计划、安排人力、管理进度、协调团队等
- 系统架构师:负责设计满足需求的系统主体框架结构、系统模块设计、项目技术选型,指导程序员进行开发工作
- UI设计师/交互设计师:负责根据产品原型设计出符合要求界面设计稿、交互设计稿,提供给前端程序员进行界面开发
- 前端开发工程师:负责前端界面编程开发工作,包括web端、安卓端、IOS端、PC桌面程序端
- 后端开发工程师:负责后端逻辑编程开发工作,包括业务逻辑处理、数据增删改查、性能优化等
- 测试工程师:负责测试软件的功能性、易用性、准确性等,发现软件的bug,推进bug解决,最终呈现出较完美的软件
- 运维:负责将软件发布上线、监测管理服务器工作情况
- DBA:数据库管理员,负责各个环境的数据管理、制定数据库使用标准
- 运营:负责软件日常线上运营,收集分析用户行为,根据用户情况调整项目运营策略,从而扩展用户群体和创收
4. 软件文档
软件在研发过程中,会产生许多文档,用于推进项目开发上线
- 产品经理:《客户需求说明书》、《需求收集分析书》、《竞品分析》、《需求规格说明书》、《原型稿》
- 项目经理:《项目计划书(立项书)》、《项目版本计划书》
- 系统架构师:《技术选型报告》、《概要设计说明书》
- UI设计师/交互设计师:《UI设计稿》、《交互设计稿》
- 前端开发工程师:暂无
- 后端开发工程师:《数据库设计说明书》、《接口设计说明书》
- 测试工程师:《测试计划》、《测试方案》、《测试需求分析》、《测试用例》、《缺陷跟踪单》、《测试报告》
- 运维:暂无
- DBA:暂无
- 运营:《运营方案说明书》
5. 软件过程
概念:软件产品从最初构思到公开发行上线的过程,称为软件开发过程。通常会根据软件开发模型进行软件开发工作的推进。
常见的软件开发模型:
- 瀑布模型:最传统、最常规的模型,注重结构化和流程。
- V模型:快速应用开发模型,每一个开发环节都有相对于的测试方案。
- W模型:测试工作和开发工作同步并行,测试工作贯穿整个项目流程。
- 螺旋模型:在软件开发初期阶段需求不是很明确时,采用渐进式的开发模型,边摸索边前进。
- X模型:对V模型的完善,更注重探索性测试
- 敏捷开发模型:以用户的需求为核心,快速进行项目迭代
6. 瀑布模型
特点:
- 线性化模型结构,每一个阶段都之执行一次
- 各阶段具有里程碑特征,有明确的阶段结束标志
- 基于文档的驱动
- 严格的阶段评审机制
优点:
- 开发的各个阶段比较清晰
- 适合需求稳定的产品开发
- 强调早期计划及需求调查
- 有利于大型软件开发过程的人员的组织和管理
缺点:
- 单一流程不可逆
- 依赖于早期的需求调查完善性,不适应需求临时的变化
- 测试介入较晚,问题和风险在项目后期才开始暴露,失去了最好的纠正错误时期
- 需求强制变动,将会从头开始执行流程,大大增加每个岗位的工作量
7. V模型
特点:
- 基于瀑布模型的延伸模型
- 左侧分支为项目研发阶段,右侧分支为项目测试阶段,针对每一个研发阶段都有对应的测试策略
- 属于串型链路,测试介入在研发阶段之后
优点:
- 包含了底层测试(单元测试)和高层测试(系统测试)
- 清楚地标识了开发和测试的各个阶段,每个阶段都与开发的各个阶段相对应
- 每个阶段分工明确,便于整体项目的把控
缺点:
- 测试的对象只是程序,忽略了需求分析和文档测试
- 测试介入较晚,问题和风险在项目后期才开始暴露,失去了最好的纠正错误时期
- 串型链路不可逆,不能很好地适应临时需求变动
8. W模型
特点:
- 测试伴随着整个软件开发周期
- 测试的对象不仅仅是程序,需求、设计、开发输出的文档同样要测试
- 属于串型链路,测试和研发各有一个并行的串型线路
优点:
- 测试伴随着整个开发周期,需求和设计同样要测试
- 更早的介入测试,可以发现初期的缺陷,修复成本低
- 分阶段工作,方便项目整体管理
缺点:
- 需求、设计、编码等活动被视为串行的,开发和测试依然是线性的关系,上一阶段工作完全结束,才可正式开始下一个阶段工作
- 每一阶段都要有文档,没有文档根本无法执行w模型
- 对于需求和设计、项目组成员的技术的要求很高
9. X模型
特点:
- 项目研发的每一个过程都穿插着测试
- 加入了探索性测试,对测试人员水平有较高要求
- 对程序进行片段式分离,每个片段都伴随测试,最后集成可执行的程序
优点:
- 测试穿插在每一个环节和片段中,能更快速定位到缺陷
- 测试人员可以根据经验、个人技能延展性开展测试
- 快速适应需求变更
缺点:
- 对测试人员的技能和经验要求较高,若测试人员水平不够,会导致投入的时间、人力资源浪费
- 不适合大型稳定性项目
10. 敏捷迭代开发模型
敏捷开发模型的三大角色:
- 产品负责人:主要负责确定产品的功能和达到要求的标准,指定软件的发布日期和交付的内容,同时有权力接受或拒绝开发团队的工作成果。
- 流程管理员:主要负责整个流程顺利实施和进行,以及清除挡在客户和开发工作之间的沟通障碍,使得客户可以直接驱动开发。
- 开发团队:进行开发和测试工作,人数控制在5~10人左右,每个成员可能负责不同的技术方面,但要求每成员必须要有很强的自我管理能力,同时具有一定的表达能力;成员可以采用任何工作方式,只要能达到冲刺的目标。
特点:
- 「个体与交互」胜过「过程与工具」
- 「可以工作的软件」胜过「面面俱到的文挡」
- 「客户协作」胜过「合同谈判」
- 「响应变化」胜过「遵循计划」
- 追求快速迭代,快速响应用户需求,灵活性高,约2~3周一个迭代版本
- 通过每日15分钟的例会,来工作同步进度、工作计划、遇到的问题
- 研发团队迭代节奏快、任务多、相对压力大
优点:
- 快速响应用户需求,快速追赶市场
- 更加充分利用了每个研发人员的优势,调用工作热情,以人为本
- 省去繁琐的各大会议和各种冗余的文档,更多时间花费在项目研发上
缺点:
- 缺失较多项目文档,人员变动交接时困难较大
- 没有明确规则约束,则需要研发团队人员自我约束力较高
11. 开发模型的目的
- 保证最终产品满足用户需求
- 提高产品质量,降低产品开发成本
- 保证项目可管理,进度可控制,驱动人员工作
- 另外:作为测试人员的职责,是在所处项目的开发模式中,尽量运用自身的知识和技能,创造出尽量完善的软件。
12. 软件的生命周期
需求→设计→编码→测试→维护→升级→废弃
13. 真实项目的开发流程
案例1:
案例2:
14. 为什么每家公司的开发流程不一样
- 公司规模不一样,导致管理手段不一样,领导人的决策不一样
- 所做的项目类型、需求不一样
- 员工成熟度、使用的技术不一样
- 公司所处的发展阶段不一样
- 项目预算、人力、财力、物力不一样
15. 什么是质量
概念:反映实体满足明确或隐含需要能力的特性总和。
人们使用产品,总对产品质量提出一定的要求,而这些要求往往受到使用时间、使用地点、使用对象、社会环境和市场竞争等因素的影响,这些因素变化, 会使人们对同一产品提出不同的质量要求。因此,质量不是一个固定不变的概念,它是动态的、变化的、发展的;它随着时间、地点、使用对象的不同而不同,随着社会的发展、技术的进步而不断更新和丰富。
用户对产品的使用要求的满足程度,反映在对产品的性能、经济特性、服务特性、环境特性和心理特性等方面。因此,质量是一个综合的概念。 它并不要求技术特性越高越好,而是追求诸如:性能、成本、数量、交货期、服务等因素的最佳组合,即所谓的最适当。
16. 质量六大特征和27小特征
- 功能性:软件所实现的功能满足用户需求的程度.功能性反映了所开发的软件满足用户称述的或蕴涵的需求的程度,即用户要求的功能是否全部实现了。
- 适合性:提供了相应的功能
- 准确性:正确(用户需要的)
- 互操作性:产品与产品之间交互数据的能力
- 保密安全性:软件产品保护信息和数据的能力。允许经过授权的用户和系统能够正常的访问相应的数据和信息,禁止未授权的用户访问、数据库加密、IP保护、登陆次数限制、防黑客攻击等
- 功能性的依从性:国际/国家/行业/企业 标准规范一致性
- 可靠性:在规定的时间和条件下,软件所能维持其性能水平的程度。可靠性对某些软件是重要的质量要求,它除了反映软件满足用户需求正常运行的程度,且反映了在故障发生时能继续运行的程度。
- 成熟性:防止内部错误导致软件失效的能力
- 容错性:软件出现故障,自我处理能力
- 易恢复性:失效情况下的恢复能力
- 可靠性的依从性:国际/国家/行业/企业 标准规范一致性
- 易用性:对于一个软件,用户学习、操作、准备输入和理解输出时,所做努力的程度。易使用性反映了与用户的友善性,即用户在使用本软件时是否方便。
- 易理解性:软件交互给用户的信息时,要清晰,准确,且要易懂,使用户能够快速理解软件
- 易学性:软件使用户能学习其应用的能力
- 易操作性:软件产品使用户能易于操作和控制它的能力
- 吸引性:软件界面符合用户审美、设计投其所好
- 易用性的依从性:
- 效率:在指定的条件下,用软件实现某种功能所需的计算机资源(包括时间)的有效程度。效率反映了在完成功能要求时,有没有浪费资源,此外"资源";这个术语有比较广泛的含义,它包括了内存、外存的使用,通道能力及处理时间。
- 时间特性:平均事务响应时间,吞吐率,TPS(每秒事务数)
- 资源利用性:CPU 内存 磁盘 IO 网络带宽 队列 共享内存
- 效率依从性:国际/国家/行业/企业 标准规范一致性
- 维护性:在一个可运行软件中,为了满足用户需求、环境改变或软件错误发生时,进行相应修改所做的努力程度。可维修性反映了在用户需求改变或软件环境发生变更时,对软件系统进行相应修改的容易程度。一个易于维护的软件系统也是一个易理解、易测试和易修改的软件,以便纠正或增加新的功能,或允许在不同软件环境上进行操作。
- 易分析性:分析定位问题的难易程度
- 易改变性:软件产品使指定的修改可以被实现的能力
- 稳定性:防止意外修改导致程序失效
- 易测试性:使已修改软件能被确认的能力(降低发现缺陷的成本)
- 维护性的依从性:
- 可移植性:从一个计算机系统或环境转移到另一个计算机系统或环境的容易程度。
- 适应性:适应不同平台
- 易安装性:被安装的能力
- 共存性:软件产品在公共环境中与其它软件分享公共资源共存的软件。
- 易替换性: 软件产品在同样的环境下,替代另一个相同用途的软件产品的能力。
- 可移植性的依从性:国际/国家/行业/企业 标准规范一致性
17. 使用质量的特性
- 有效性:软件产品在指定的使用环境下,使用户能达到与准确性和完备性相关的规定目标的能力
- 生产率:在指定的使用环境下,使用户为达到有效性而消耗适当数量的资源的能力
- 安全性:在指定使用环境下,达到对人类、业务、软件、财产或环境造成损害的可接受的风险级别的能力
- 满意度:使用户满意的能力。
18. QA和QC
概念:
QA:主要是事先的质量保证类活动,以预防为主。期望降低错误的发生几率。例如,提前指定质量规范、流程、标准等。
QC:主要是事后的质量检验类活动为主,默认错误是允许的。期望发现并选出错误、跟进错误解决。
区别:
① QA偏重于质量管理体系的建立和维护,客户和认证机构质量体系审核工作,质量培训工作等;QC主要集中在质量检验和控制方面。
② QA的工作涉及公司的全局,各个相关职能,覆盖面比较宽广,而QC主要集中在产品质量检查方面,只是质量工作的其中一个方面。
19. CMMI能力成熟度模型综合
该模型提供一套可供公众使用的准则;这些准则描述那些成功地实施了过程改进的组织的特性。该模型用“软件能力成熟度”来衡量这种软件综合能力。
五个级别:
- CMMI一级,执行级(初始级)。在执行级水平上,软件组织对项目的目标与要做的努力很清晰,项目的目标可以实现。但是由于任务的完成带有很大的偶然性,软件组织无法保证在实施同类项目时仍然能够完成任务。项目实施能否成功主要取决于实施人员。
- CMMI二级,管理级(受管理级)。在管理级水平上,所有第一级的要求都已经达到,另外,软件组织在项目实施上能够遵守既定的计划与流程,有资源准备,权责到人,对项目相关的实施人员进行了相应的培训,对整个流程进行监测与控制,并联合上级单位对项目与流程进行审查。二级水平的软件组织对项目有一系列管理程序,避免了软件组织完成任务的随机性,保证了软件组织实施项目的成功率。
- CMMl三级,明确级(已定义级)。在明确级水平上,所有第二级的要求都已经达到,另外,软件组织能够根据自身的特殊情况及自己的标准流程,将这套管理体系与流程予以制度化。这样,软件组织不仅能够在同类项目上成功,也可以在其他项目上成功。科学管理成为软件组织的一种文化,成为软件组织的财富。
- CMMI四级,量化级(定量管理级)。在量化管理级水平上,所有第三级的要求都已经达到,另外,软件组织的项目管理实现了数字化。通过数字化技术来实现流程的稳定性,实现管理的精度,降低项目实施在质量上的波动。
- CMMI五级,优化级(持续优化级)。在优化级水平上,所有第四级的要求都已经达到,另外,软件组织能够充分利用信息资料,对软件组织在项目实施的过程中可能出现的次品予以预防。能够主动地改善流程,运用新技术,实现流程的优化。