个体软件过程
前言
软件工程漫谈
- 软件工程认识观
- 标准定义
将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中;以上所述方法的研究
- 软件开发管理
项目管理是基础,目标是量化管理,个人工作量化是整个项目量化的基础
- 个人的作用
个人英雄主义式的开发不能成就规模化软件产业,需要的是大兵团规模作战;
- 标准定义
- 软件开发中的问题
- 难以发挥潜能
硬件的发展一直超过软件,难以发挥硬件的所有潜能
- 难于满足商业需求
建造新程序的能力远远不能满足人们对新程序的需求,同时开发速度不能满足商业和市场的要求
- 达到不可靠性要求
计算机的普遍使用对可靠性要求越来越高,如果软件出错,会造成巨大的经济损失,甚至可能给人类带来灾难
- 难于维护
拙劣的设计和资源的缺乏使得我们难以支持和增强已有软件
- 难以发挥潜能
PSP简介
唯一不变的就是变化
- 软件控制着大部分商业、政府及军队中的相关事务.
- 软件成本、进度和质量成为业务中的关键问题。
- 项目为什么会失败?
- 承诺不现实
越大的项目,开发人员对项目的影响就越有限;如果什么都不说,那就更不会有影响
- 大项目难控制
有项目计划,但开发人员个人计划几乎没有;无法知道自己的工作状态;管理者就不能了解项目具体状态;就更难于管理项目
- 质量问题严重
项目规模越大,质量问题就越严重;系统一个模块有质量问题,整个系统有质量问题;如果开发人员自己不管质量,团队就无法管质量,就会导致质量更差
- 团队的领导
给团队明确的激励和承诺,开发团队的凝聚力;高凝聚力、很被激励、明确承诺的团队会高质量进行工作
- 承诺不现实
- 什么是过程?
- 过程是做一项工作的步骤序列,过程的定义就是该过程的描述。
- 一个已定义的过程标识了一项工作的主要步骤,其提供了:
- 帮助人们从复杂的活动中分离出执行程序
- 建立了每个过程步骤的启动和完成准则
- 增加了人们对过程的理解并且为过程的自动化提供了一个很好的基础
- 能够制定详细的计划、精确的度量并报告其工作状态
- 能够判断自己的估算和计划的准确性
- 能够和用户、其他人员、经理及客户进行精确的交流
- 过程要素详解
- 目标/目的
此过程要解决什么问题,或要做到什么程度
- 角色与职责
谁来做,明确角色责任与权力;通过职责确定角色间的关系;并非简单的的活动描述
- 入口、出口准则
过程何时或满足哪种条件时可以启动或退出
- 输入、输出
明确的输入内容和过程活动做完之后的输出内容
- 活动
明确描述怎么去做相关事情;原则1:每项活动的描述要有明确的角色及执行时机或周期(频率)原则2:一项活动不能有两个以上的负责人,即”大黄点“原则
- 度量
用以评价过程执行的效率;用以评价目标是否有效实现;为改进过程收集数据
- 验证
QA:检查过程是否被有效执行.高层管理者:检查过程是否达到目标
- 目标/目的
PSP的原则及目标
- PSP基本原则
- 部件决定整体质量
软件系统质量是由其最差的部件质量决定的
- 部件是个体开发
部件是个体开发
- 过程决定部件质量
软件部件质量由开发所使用的过程质量决定的
- 个体决定关键质量
关键质量是开发者个人的技能、承诺和个体过程准则
- 自己负责
做为一个软件专业人员,应当对自己的个体过程负责
- 自己分析
应当度量、跟踪、分析自己的工作
- 自己学习
应当从自己的绩效变化中进行学习
- 应用实践
应当把学习到的适合的经验教训应用到自己的实践中去
- 部件决定整体质量
什么是PSP?
- 什么是PSP
- 它是一个自我改进的过程,它帮助控制、管理和改进自己的工作方式
- 它是一个结构化的框架,包括了软件开发中使用的表格、准则和规程
- 它提供了一个度量和分析框架,用来检验和管理你的个人工作
- 它还是一个已定义过程,用来帮助你改善自己的个人绩效
- PSP框架说明
- PSP0:You establish a measured performance baseline.(建立一个可度量的绩效基线,目标是收集准确和完整的你个人工作数据)
- PSP1:You make size, resource, and schedule plans.(制定规模、资源和进度计划)
- PSP2:You practice defect and yield management.(练习缺陷和产品管理)
PSP如何帮助工作?
- PSP可以做什么?
- 稳定、成熟的PSP可以使你:
- 估计和计划自己的工作
- 满足自己的承诺
- 拒绝不合理的承诺
- 你还可以:
- 了解自己当前绩效
- 更好的提高自己的能力
- PSP提供了:
- 一个得到证明的用于开发的基础框架
- 告诉你怎么来改进自己个体过程
- 持续改进工作效率、工作质量、工作可预测性的相关数据
- 稳定、成熟的PSP可以使你:
时间管理
- 怎么进行时间管理
- 分清主次
将主要活动进行分类,然后跟踪这些主要活动所花费的时间。
- 记录时间
记录每项主要活动所花费的时间,养成习惯。
- 标准方法
使用标准的方法来记录时间,确保记录的一致性,并且把时间数据保存在适合的地方,以便后续的分析及跟踪。
- 分清主次
过程度量
目标管理的SMART原则
- 无论是制定团队目标还是个人的目标时,必须符合SMART原则,制定目标的过程也是自身能力不断增长的过程
- 目标必须是具体的(Specific)
- 目标必须是可度量的(Measurable)
- 目标必须是可以达到的(Attainable)
- 各目标或目标与工作职责之间必须具有一定的相关性(Relevant)
- 目标完成必须有明确的截止期限(Time-bound)
过程度量
- 度量软件规模
- 编制开发计划的步骤为:
- 首先产生一个概念设计
- 然后估算依照这个设计需要构建的产品的规模
- 计划过程是从规模估算开始的,由此必须做规模估算
- 依据规模估算,我们可以估计出完成产品开发所需要的时间(怎么算?)
- 在此之前,我们必须有一个度量规模的方法
- 编制开发计划的步骤为:
- 过程度量原则
- 为了保证有用,度量必须满足如下要求:
- 为特定目标而收集数据
- 准确定义
- 适合管理
- 适合使用,即,它必须是精确、特定的而且可以自动计算
- 度量过程并不会改进它,为了达到持久改进,必须改变过程。
- 为了保证有用,度量必须满足如下要求:
- 过程度量的作用
- understand and manage change(理解并管理变化)
- predict or plan for the future(对未来进行预测或计划)
- compare one product, process, or organization with another(与其他产品、过程或组织进行对比)
- determine adherence to standards(确定遵守标准)
- provide a basis for control(为控制提供依据)
- 过程度量的目标
- 度量只能产生数据,为了使之有效,必须满足以下几点:
- relate to business objectives(与商业目标相关)
- be properly interpreted(恰当有意的解释)
- lead to appropriate action(可以采取适当的行动)
- 如果度量的商业目标得不到理解,则会:
- the wrong data may be gathered(收集到错误数据)
- data may not be properly used(数据可能会被不恰当应用)
- 度量只能产生数据,为了使之有效,必须满足以下几点:
- 常见度量的类型
- 要产生客户和准确的度量,为了保证有用,需要理解各类关联关系,比如:
- program size versus development hours(程序规模和开发用时)
- cost distributions(成本分布)
- defect densities(缺陷密度)
- 还需要寻求控制和预测能力(提高预知性)
- actions to reduce test defects(减少测试缺陷的活动)
- steps to improve review quality(改进评审质量的步骤)
- means to improve productivity(改进生产率的方法)
- 要产生客户和准确的度量,为了保证有用,需要理解各类关联关系,比如:
- PSP中的度量
- PSP基础的数据项包括:
- program size(程序规模)
- time spent by phase(每阶段用时)
- defects found and injected by phase(每阶段发现和注入缺陷数)
- 对于其中的每一项即要收集实际数据,也有收集估计数据
- 从这些数据派生出的度量,可以
- support planning(支持计划编写,怎么支持?)
- characterize process quality (描述过程质量,怎么描述?)
- PSP基础的数据项包括:
- PSP中的规模度量
- PSP规模度量的目标是:
- 定义一个一致的规模度量
- 建立一个规范化时间和缺陷数据的基础
- 帮助进行更好的规模估算
- 这些数据可以帮助回答如下问题:
- 计划开发的程序规模是多大?
- 我的规模估算的能力如何?
- 最终完成程序的规模是多大?
- PSP规模度量的目标是:
- PSP中的时间度量
- PSP时间度量的目标为:
- 确定在每个PSP阶段你所花费的时间
- 帮助你更好的进行时间估算
- 这些数据可以帮助回答如下问题:
- 每个PSP阶段花费了多少时间?
- 计划每个PSP阶段要花费多少时间?
- PSP时间度量的目标为:
- PSP中的缺陷度量
- PSP缺陷度量的目标为:
- 为缺陷数据提供一个历史基线(基准线)
- 了解缺陷注入的数量和类型
- 了解在每个PSP阶段移除缺陷的相对成本
- 这些数据可以帮助回答如下问题:
- 在每个阶段产生了多少缺陷?
- 在每个阶段移除了多少缺陷?
- 发现和修正每个缺陷花费了多少时间?
- PSP缺陷度量的目标为:
- PSP中派生出来的度量
- To Date and To Date %(累计和累计百分比)
- Product size developed or reviewed per hour(每小时开发或评审的产品规模)
- CPI(成本性能指标)
- % Reuse and % New Reusable(重用百分比和新的可重用百分比)
软件规模
- 规模度量选择的准则
- 规模度量必须满足如下特别:
- related to development effort(与开发投入有关)
- Precise(精准)
- machine countable(可机器计数)
- suitable for early planning(适合于早期计划)
- 规模度量必须满足如下特别:
- 规模与开发投入的关系
- 重点:如果规模度量与开发成本没有直接关系,那么规模度量是没有用的
- 对于规模有多种度量方式:
- database elements(数据库元素)
- lines of code (LOC)(代码行数)
- function points(功能点数)
- pages, screens, scripts, reports(页数、屏幕数、脚本数、报表数)
- 规模度量应当与开发语言、设计和开发实践紧密相关,对这些因素是敏感的
- 规模度量与开发时间的关系分析
- 页数通常对于文档编写来说是一个可接受的度量
- LOC对于使用Pascal和C++等来开发源代码程序是不错的度量
- 其他可能的度量包括:功能点数、屏幕数、模块数、数据库元素数、维护修正数等
- 规模度量必须是精准的
- 要想达到相同的结果,需要一个精准的度量定义
- 度量还必须得到恰当的应用,以LOC为例做如下考虑,在定义时需要考虑应用时的具体影响因素:
- 不同的人通过对数据库元素数会有不同的定义
- Pascal LOC 不等同于汇编的 LOC
- 新的LOC 与修改的LOC不同
- 逻辑的LOC不等同于物理的LOC.
- 一个人的C++ LOC可能与其他人的C++ LOC无关
- 度量怎么适合于早期计划
- 为了制定初始项目计划,度量需要在工作开始前是可视的:
- 对于房屋,通常是以每平方英尺来预计成本的
- 在没有项目建设初期,很少有人能对一个房子使用平方英尺做为术语来描述居住空间的
- 在这个阶段,相比较起来房子数量更直观
- 直观的规模度量对于初始计划通常比较有用
- 不幸的是,流行的直观度量通常不可测量,流行的可测量的度量通常不直观,在软件开发中会遇到如下度量:
- Function points(功能点)
- Intuitive(直观)
- not directly measurable(不能直接测量)
- LOC(代码行数)
- not intuitive(不直观)
- directly measurable(可直接测量)
- Function points(功能点)
- 为了制定初始项目计划,度量需要在工作开始前是可视的:
计算程序规模
- PSP中计算程序规模
- PSP使用编码标准和物理行数计算器用于LOC规模度量
- defined coding standard(定义编码标准)
- physical line for each logical line(计算每个逻辑行的物理行)
- 为了计算程序规模,一致的编码标准/规范必须得到完全的遵守
- PSP使用编码标准和物理行数计算器用于LOC规模度量