这是up的复习笔记,在这里记录下来,供大家参考讨论。这门课很抽象,只通过ppt很难完全理解,上课也听不太明白,希望考试别挂)
软件过程与质量
概述
软件: 是计算机系统中的程序及其文档。程序是计算任务的处理对象和处理规则的描述;文档是为 了便于了解程序所需的阐明性资料
软件特点:无形、设计开发的、定制的、复杂的、易于复制、质量要求高、涉及到很多社会因素、开发成本高
软件种类:
- 系统软件
- 支撑软件
- 应用软件
软件开发:从问题空间到解空间的知识转换的过程。
软件工程的诞生:原因是软件危机,表现为:
- 软件质量差
- 成本难控制
- 开发周期长,进度难以预测
- 可维护性差
- 用户需求难以满足
缺少工程化的体系!
1968年NATO的会议上,提出软件工程, 其目的是倡导以“工程”的原理、原则和方法进行软件开发,以解决软件危机
工程的基本内涵:
- 过程标准化,有具体的指南等规范手段进行总结和描述
- 理论和实践支撑
- 质量有保证
- 追求使用,强调足够好而不是完美
软件工程是一门学课,60年代提出,90年代学课形成,是一门指导软件开发和维护的工程学科。
应用计算机科学、数学及管理科学等原理,以工程 化方法制作软件的工程。它借鉴传统工程的原则、 方法,创建软件以达到提高质量,降低成本的目的。
- 计算机科学、数学用于构造模型与算法,
- 工程科学用于制定规范、设计范型、评估成本 及确定权衡;
- 管理科学用于计划、资源、质量、成本等管理。
软件实质:以计算为核心手段实现应用目标的解决方案,是一种人工制品,内涵特征:
- 功能性 以何种结果和行为
- 目的性 达成何种应用目的
- 适应性 何种环境依赖之下
基本架构图:
-
软件语言与软件理论:
软件语言核心任务:建立统一的抽象机制,为问题空间、解空间和平台空间建模
软件理论:构建正确、高效软件系统的理论和算法基础
-
软件运行支撑:
核心任务:建立解空间和平台空间的映射方法,并构建平台空间抽象的计算实现
运行支撑系统包括操作系统、编译系统、数据库管理系统等,负责驱动下层计算资源有效运转。
-
软件构造方法:
核心任务:建立问题空间抽象到解空间抽象的映射方法,构建解决方案,完成特定目标。
包括软件开发技术、管理等方面,是软件工程分支的主要内容。
其关键问题包括:
- 如何理解问题空间
- 如何理解当前需要软件来解决的问题并以此设计可能的解决方案
- 如何高效高质量的开发出能满足需要的软件
-
软件度量与质量评估:
核心任务:基于软件抽象的制品与服务及其构造、运行过程作为观察对象,度量、评估和预测其质量与效率等指标。通过定性和量化手段发现软件模型、开发、运行的规律,并评价解决方案对应用目标的满足程度。
-
软件范型贯穿其中:
范型为工程师提供一套具有内在一致性的软件抽象体系,具化为一系列软件模型和构造原理,外化为相应的语言、构造方法、运行支撑和度量评估技术
软件范型的变化将牵引构造方法、运行支撑、度量 和质量评估的一些列变化,带动软件学科发展
发展历程:
软件工程内涵:
研究对象是软件,解决如何高效高质量开发出符合要求的产品
软件工程是一门交叉学科,处理构建大型复杂软件系统的计算机科学领域。必须要有一组或多组工程师共同构建。
根本性困难:
- 不可见的逻辑产品
- 问题空间和解空间巨大鸿沟
- 面临的领域繁杂
- 软件系统复杂度越来越高
隐藏的复杂性,隐藏的依赖
软件工程的系统观和演化观:
-
系统观
空间维度,对软件系统整体结构的理解
- 软件系统的计算环境和技术栈
- 软件系统的物理和社会环境
-
演化观
时间维度,对软件系统持续的发展变化有一个全面的理解
- 软件系统的持续演化
- 软件系统的迭代和演化式开发
软件工程的前世今生:
软硬件一体化:
个人程序时期,功能单一,复杂性有限,全凭个人的经验和技艺。主要使用机器语言和汇编语言
软件作坊时期,功能简单规模小,出现了若干高级语言
产品化阶段:
甲骨文公司和微软公司的创立,标志着软件开始成为一个独立产业。摆脱了硬件的束缚,功能强大,规模剧增,PC出现使普通人成为用户
-
70年代
-
程序化结构设计
自顶向下的设计思想,模块化的原理,设计工具有程序流程图,结构化设计方法等
-
瀑布模型
过于繁重的文档难以审阅维护
-
-
80年代
技术进步,更重视阶段递进的系统开发过程,目标是提升生产率和可伸缩性
- 软件工具(软件工厂等)
- 软件复用(面向对象,软件组件技术等)
- 软件过程(原型、演化模型、螺旋模型等)
- 标准和成熟度框架(ISO-9001)
-
90年代
技术更成熟,强调并发过程,提高用户价值
- winwin螺旋模型
- CMM过程体系
- RUP
-
90年代迄今
网络化和服务化阶段,重视系统需求,人机交互,特定领域的软件工程
- 敏捷开发
- VBSE
- 混合方法
- 开源软件
为什么关注过程:
过程决定质量,过程让成功可以复制
基本概念和标准
质量:
ISO9000定义:质量是一组固有特性满足要求的程度。
固有特性:过程形成的产品属性,产品本身具有的永久性特征。
要求:明示的、隐含的、必须履行的需求或期望
程度:符合度、适用度
质量的特性:
- 广义性(不仅是产品,也可以是过程和质量管理体系)
- 时效性(没有恒定标准)
- 相对性(用户需求不同)
质量观:
戴明质量管理14条(全面管理质量观)
- 树立改进产品与服务的长久使命和愿景,美化人们的生活
- 采用新的观念,质量是一种信仰
- 停止依靠大规模检查取获得质量,改进生产过程
- 中止只以价格为基础的采购习惯
- 持之以恒的改进产品
- 实行岗位技能培训
- 建立领导体系,改进领导方式,做服务型领导
- 排除员工的恐惧感
- 打破部门之间的壁垒
- 取消面向一般员工的口号、标语和数字目标
- 取消定额和指标
- 消除影响工作完美的障碍(不得法的管理者、不适当的设备等)
- 鼓励学习和自我提高
- 采取行动实现转变,要遵循PDCA环
戴明环/PDCA环:
关键环节是A,若没有此环节,已取得的成果无法巩固。大环带小环,阶梯式上升。持续改进,质量升级。
零缺陷质量观(Crosby质量观)
-
一个中心
第一次就把正确的事情做正确
-
两个基本点
有用的(客户视角)和可信赖的
-
三个需要
客户、员工、供应商的需要
-
四项原则
- 质量定义是符合要求,而不是好
- 产生质量系统是预防,不是检验
- 工作标准必须是”零缺陷“(零缺陷是一种心态,过程的工作质量要求是零缺陷)
- 质量恒定标准是”不符合要求的代价“,指因为在第一次没有完全做好或做对的情况下而产生的多余行动和多余花费
二元质量观(适用+无缺陷)
产品具有质量,必须同时具备适用的质量特性与使用过程中的无缺陷,二者缺一不可, 只有既关心顾客又关心过程,做到顾客、企业双赢,才能称得上质量
软件质量
软件质量应该和价值密切关联,软件价值又有两个重要特性:主观性和动态性。
软件质量特性
软件质量特性是软件产品的一组属性,用来描述和评估软件的能力。 软件质量特性可细分为多层次的子特性。
- 功能适用性, 在指定条件下使用时,产品或系统满足显性需求和 隐形需求的程度
- 性能效率, 是指在规定的条件下,相对于所用资源的数量,软件产品可提供适当性能的能力
- 兼容性,是指软件产品在共享软件或硬件的条件下,产品、系统或者组件能够与其他产品、系统或组件交换信息,实现所需功能的能力
- 易用性, 是指用户在指定条件下使用软件产 品时,其被用户理解、学习、使用以及吸引用户的能力
- 可靠性, 是指在特定条件下使用时,软件产品维持规定的性能级别的能力
- 安全性, 是指软件产品或系统保护信息和 数据的程度,其可使用户、产品或系统具有与其授权类型、授权级别一致的数据访问
- 可维护性, 产品或系统能够被维护人员修改的有效性和效率
- 可移植性, 是指软件产品从一 种环境迁移到另外一种环境能力
质量模型(ISO/IEC 25010)
- 使用质量
- 外部质量,运行时表现出来的特征,用户明说的目标
- 内部质量,不需要运行就可以观测到,代码等
- 过程质量,是根本
软件质量的层次性
-
软件产品质量
-
软件过程质量
用户是软件工程师,有显示需求和隐含需求。
-
软件商业环境质量
寻找有效质量管理方法
软件过程
基本概念:
软件过程是软件生存周期内为了达到一定目标而必须实施的一系列相关过程的集合。财务、市场活动不属于生存周期过程。
生存周期过程标准
-
主过程
供应方不一定是软件开发者
-
支持过程
- 辅助过程
软件需求、开发、测试、维护
软件需求
软件需求是什么
问题域:问题所存在的现实世界中的某个部分
解系统:必须要用来在问题领域内产生某些效果
需求是桥梁。
做好软件需求,关键在业务分析。抛开具体的技术实现,审视用户想要解决的问题,想要达成的业务目的。
需求类型
- 功能性需求:系统应向用户提供的功能
- 质量需求:定义了整个系统或组件、服务、功能的质量特性
- 约束:限制了系统开发方式的技术要求
软件需求工程过程
需求获取
从人、文档、或环境中获取需求,和需求分析、需求协商交织在一起
子活动:
-
收集背景资料
-
定义项目前景和范围
-
选择信息来源
获取来源:
-
需求相关者
干系人、涉众等,受到开发系统影响的部门,直接或间接影响系统需求的人
-
硬数据
用户工作中产生的数据,准确描述了实际业务相关信息
-
-
选择获取方法
- 头脑风暴
- 观察法
- 体验法
- 问卷调查
- 访谈(用的最多)
- 单据、报表分析
- 联合应用开发
- 快速应用开发
-
记录获取结果
需求分析
把用户对待开发软件提出的”要求“,”需要“进行分析和整理,确认后形成清晰的描述文档。分析系统在功能上需要”实现什么“。
目的:澄清真正的需求,细化需求,划分需求的优先级。
子活动:
-
背景分析
-
确定系统边界
这是首要任务。界定系统在功能上”不要实现什么“。确定项目目标。
-
需求建模
有各种建模方式:
-
需求细化
-
确定优先级
-
需求协商
发现冲突,使用辩论结构或预先存在的模型进行协商。
需求文档化
要求:
- 完整,无遗漏
- 明确、可测试
- 严格、无歧义
- 一致、无矛盾
需求验证
检查需求的一致性和完整性。从文档中发现需求中的问题。
需求审查
模型验证
前提:需求文档包含系统模型
目的:证明每个个体模型自包含,内外一致,准确反映了系统需求相关者的真实需求。需要case工具的支持。
需求管理
核心是管理变化,不能不让改,也不能随便改。
变更过程:
软件开发、测试、维护
软件设计
- 概要设计
- 数据设计
- 体系结构设计
- 组件接口设计
- 详细设计
- 组件接口设计
- 组件级设计
软件实现
要形成良好的编码习惯,源程序文档化,数据说明,程序效率等。
注意代码的静态检查和代码评审。有效提高软件内部质量,降低后期维护成本,提高开发能力,缓解后期优化维护风险。
软件测试
四层次:
- 单元测试:目标:详细设计;关注逻辑的正确性。
- 集成测试:目标:概要设计;关注接口的正确性
- 系统测试:目标:产品需求;关注产品需求的完成度
- 验收测试:目标:客户需求;关注客户需求的完成度
测试活动:
分析方法:
- 按缺陷密度
- 按缺陷类型
- 按引入阶段
基于追踪与回溯的质量分析
目的:改进软件开发与管理流程,提高软件质量
手段:基于开发任务以及缺陷的各类追踪关系,进行多维度的质量分析
实践:对于优先级为critical及以上的问题单, 需要组织相关人员进行回溯分析。
方法:鱼骨图,5WHY分析法
软件维护
软件维护的实践比开发阶段的实践长很多。维护费用通常占总费用的40%-70%
维护活动类型:
- 改正性维护
- 适应性维护
- 完善性维护
- 预防性维护
软件配置管理
。。。待续