嵌入式软件开发流程
一、嵌入式软件开发流程
1.1 嵌入式系统开发概述
由嵌入式系统本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别。嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发3大部分,其总体流程图如图1.1所示。
图1.1 嵌入式系统开发流程图
在系统总体开发中,由于嵌入式系统与硬件依赖非常紧密,往往某些需求只能通过特定的硬件才能实现,因此需要进行处理器选型,以更好地满足产品的需求。另外,对于有些硬件和软件都可以实现的功能,就需要在成本和性能上做出抉择。往往通过硬件实现会增加产品的成品,但能大大提高产品的性能和可靠性。
再次,开发环境的选择对于嵌入式系统的开发也有很大的影响。这里的开发环境包括嵌入式操作系统的选择以及开发工具的选择等。本书在4.1.5节对各种不同的嵌入式操作系统进行了比较,读者可以以此为依据进行相关的选择。比如,对开发成本和进度限制较大的产品可以选择嵌入式Linux,对实时性要求非常高的产品可以选择Vxworks等。
由于本书主要讨论嵌入式软件的应用开发,因此对硬件开发不做详细讲解,而主要讨论嵌入式软件开发的流程。
1.2 嵌入式软件开发概述
嵌入式软件开发总体流程为图4.15中“软件设计实现”部分所示,它同通用计算机软件开发一样,分为需求分析、软件概要设计、软件详细设计、软件实现和软件测试。其中嵌入式软件需求分析与硬件的需求分析合二为一,故没有分开画出。
由于在嵌入式软件开发的工具非常多,为了更好地帮助读者选择开发工具,下面首先对嵌入式软件开发过程中所使用的工具做一简单归纳。
嵌入式软件的开发工具根据不同的开发过程而划分,比如在需求分析阶段,可以选择IBM的Rational Rose等软件,而在程序开发阶段可以采用CodeWarrior(下面要介绍的ADS的一个工具)等,在调试阶段所用的Multi-ICE等。同时,不同的嵌入式操作系统往往会有配套的开发工具,比如Vxworks有集成开发环境Tornado,WindowsCE的集成开发环境WindowsCE Platform等。此外,不同的处理器可能还有对应的开发工具,比如ARM的常用集成开发工具ADS、IAR和RealView等。在这里,大多数软件都有比较高的使用费用,但也可以大大加快产品的开发进度,用户可以根据需求自行选择。图4.16是嵌入式开发的不同阶段的常用软件。
图1.2 嵌入式开发不同阶段的常用软件
嵌入式系统的软件开发与通常软件开发的区别主要在于软件实现部分,其中又可以分为编译和调试两部分,下面分别对这两部分进行讲解。
1.交叉编译
嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。在第3章中已经提到,编译的最主要的工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统。因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。要注意的是,编译器本身也是程序,也要在与之对应的某一个CPU平台上运行。嵌入式系统交叉编译环境如图4.17所示。
图4.17 交叉编译环境
小知识 与交叉编译相对应,平时常用的编译称为本地编译。
这里一般将进行交叉编译的主机称为宿主机,也就是普通的通用PC,而将程序实际的运行环境称为目标机,也就是嵌入式系统环境。由于一般通用计算机拥有非常丰富的系统资源、使用方便的集成开发环境和调试工具等,而嵌入式系统的系统资源非常紧缺,无法在其上运行相关的编译工具,因此,嵌入式系统的开发需要借助宿主机(通用计算机)来编译出目标机的可执行代码。
由于编译的过程包括编译、链接等几个阶段,因此,嵌入式的交叉编译也包括交叉编译、交叉链接等过程,通常ARM的交叉编译器为arm-elf-gcc、arm-linux-gcc等,交叉链接器为arm-elf-ld、arm-linux-ld等,交叉编译过程如图4.18所示。
图4.18 嵌入式交叉编译过程
2.交叉调试
嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有很大的差别。在常见软件开发中,调试器与被调试的程序往往运行在同一台计算机上,调试器是一个单独运行着的进程,它通过操作系统提供的调试接口来控制被调试的进程。而在嵌入式软件开发中,调试时采用的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。
嵌入式系统的交叉调试有多种方法,主要可分为软件方式和硬件方式两种。它们一般都具有如下一些典型特点。
下面分别就软件调试桩方式和硬件片上调试两种方式进行详细介绍。
(1)软件方式。
软件调试主要是通过插入调试桩的方式来进行的。调试桩方式进行调试是通过目标操作系统和调试器内分别加入某些功能模块,二者互通信息来进行调试。该方式的典型调试器有gdb调试器。
gdb的交叉调试器分为GdbServer和GdbClient,其中的GdbServer就作为调试桩在安装在目标板上,GdbClient就是驻于本地的gdb调试器。它们的调试原理图如图4.19所示。
图4.19 gdb远程调试原理图
gdb调试的工作流程。
· 首先,建立调试器(本地gdb)与目标操作系统的通信连接,可通过串口、网卡、并口等多种方式。
· 然后,在目标机上开启GdbServer进程,并监听对应端口。
· 在宿主机上运行调试器gdb,这时,gdb就会自动寻找远端的通信进程,也就是GdbServer的所在进程。
· 在宿主机上的gdb通过GdbServer请求对目标机上的程序发出控制命令。这时,GdbServer将请求转化为程序的地址空间或目标平台的某些寄存器的访问,这对于没有虚拟存储器的简单的嵌入式操作系统而言,是十分容易的。
· GdbServer把目标操作系统的所有异常处理转向通信模块,并告知宿主机上gdb当前有异常。
· 宿主机上的gdb向用户显示被调试程序产生了哪一类异常。
这样就完成了调试的整个过程。这个方案的实质是用软件接管目标机的全部异常处理及部分中断处理,并在其中插入调试端口通信模块,与主机的调试器进行交互。但是它只能在目标机系统初始化完毕、调试通信端口初始化完成后才能起作用,因此,一般只能用于调试运行于目标操作系统之上的应用程序,而不宜用来调试目标操作系统的内核代码及启动代码。而且,它必须改变目标操作系统,因此,也就多了一个不用于正式发布的调试版。
(2)硬件调试。
相对于软件调试而言,使用硬件调试器可以获得更强大的调试功能和更优秀的调试性能。硬件调试器的基本原理是通过仿真硬件的执行过程,让开发者在调试时可以随时了解到系统的当前执行情况。目前嵌入式系统开发中最常用到的硬件调试器是ROMMonitor、ROMEmulator、In-CircuitEmulator和In-CircuitDebugger。
采用ROMMonitor方式进行交叉调试需要在宿主机上运行调试器,在宿主机上运行ROM监视器(ROMMonitor)和被调试程序,宿主机通过调试器与目标机上的ROM监视器遵循远程调试协议建立通信连接。ROM监视器可以是一段运行在目标机ROM上的可执行程序,也可以是一个专门的硬件调试设备,它负责监控目标机上被调试程序的运行情况,能够与宿主机端的调试器一同完成对应用程序的调试。
在使用这种调试方式时,被调试程序首先通过ROM监视器下载到目标机,然后在ROM监视器的监控下完成调试。
优点:ROM监视器功能强大,能够完成设置断点、单步执行、查看寄存器、修改内存空间等各项调试功能。
确定:同软件调试一样,使用ROM监视器目标机和宿主机必须建立通信连接。
其原理图如图4.20所示。
图4.20 ROMMonitor调试方式
采用ROMEmulator方式进行交叉调试时需要使用ROM仿真器,并且它通常被插入到目标机上的ROM插槽中,专门用于仿真目标机上的ROM芯片。
在使用这种调试方式时,被调试程序首先下载到ROM仿真器中,因此等效于下载到目标机的ROM芯片上,然后在ROM仿真器中完成对目标程序的调试。
优点:避免了每次修改程序后都必须重新烧写到目标机的ROM中。
缺点:ROM仿真器本身比较昂贵,功能相对来讲又比较单一,只适应于某些特定场合。
其原理如图4.21所示。
图4.21 ROMEmulator调试方式
采用In-CircuitEmulator(ICE)方式进行交叉调试时需要使用在线仿真器,它是目前最为有效的嵌入式系统的调试手段。它是仿照目标机上的CPU而专门设计的硬件,可以完全仿真处理器芯片的行为。仿真器与目标板可以通过仿真头连接,与宿主机可以通过串口、并口、网线或USB口等连接方式。由于仿真器自成体系,所以调试时既可以连接目标板,也可以不连接目标板。
在线仿真器提供了非常丰富的调试功能。在使用在线仿真器进行调试的过程中,可以按顺序单步执行,也可以倒退执行,还可以实时查看所有需要的数据,从而给调试过程带来了很多的便利。嵌入式系统应用的一个显著特点是与现实世界中的硬件直接相关,并存在各种异变和事先未知的变化,从而给微处理器的指令执行带来各种不确定因素,这种不确定性在目前情况下只有通过在线仿真器才有可能发现。
优点:功能强大,软硬件都可做到完全实时在线调试。
缺点:价格昂贵。
其原理如图4.22所示。
图4.22 ICE调试方式
采用In-CircuitDebugger(ICD)方式进行交叉调试时需要使用在线调试器。由于ICE的价格非常昂贵,并且每种CPU都需要一种与之对应的ICE,使得开发成本非常高。一个比较好的解决办法是让CPU直接在其内部实现调试功能,并通过在开发板上引出的调试端口发送调试命令和接收调试信息,完成调试过程。如使用非常广泛的ARM处理器的JTAG端口技术就是由此而诞生的。
JTAG是1985年指定的检测PCB和IC芯片的一个标准。1990年被修改成为IEEE的一个标准,即IEEE1149.1。JTAG标准所采用的主要技术为边界扫描技术,它的基本思想就是在靠近芯片的输入输出管脚上增加一个移位寄存器单元。因为这些移位寄存器单元都分布在芯片的边界上(周围),所以被称为边界扫描寄存器(Boundary-Scan Register Cell)。
当芯片处于调试状态时候,这些边界扫描寄存器可以将芯片和外围的输入输出隔离开来。通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制。对于芯片的输入管脚,可通过与之相连的边界扫描寄存器单元把信号(数据)加载到该管脚中去;对于芯片的输出管脚,可以通过与之相连的边界扫描寄存器单元“捕获”(CAPTURE)该管脚的输出信号。这样,边界扫描寄存器提供了一个便捷的方式用于观测和控制所需要调试的芯片。
现在较为高档的微处理器都带有JTAG接口,包括ARM7、ARM9、StrongARM、DSP等,通过JTAG接口可以方便地对目标系统进行测试,同时,还可以实现Flash编程,这是非常受欢迎的。
优点:连接简单,成本低。
缺点:特性受制于芯片厂商。
其原理如图4.23所示。
图4.23 JTAG调试方式
开发流程框图: |
|||||||||||||
阶段 |
流程图 |
文档 |
|||||||||||
项目 立项 阶段 |
|
可行性分析报告 项目任务书
|
|||||||||||
项目 总体 规划 |
|
需求分析报告 需求分析评审报告 产品定义 产品技术规范 项目开发计划 风险控制计划 质量控制计划 系统分析文档 |
|||||||||||
设计 阶段 |
|
产品技术总体设计方案(包括工艺) 系统分析评审报告 软件设计过程文档 硬件设计过程文档 结构设计过程文档 工艺设计过程文档 软件V1.0 PCB V1.0 T1设计文档 工艺说明 分单元测试报告 |
|||||||||||
设 计 验 证 阶 段 |
T1
|
|
装机报告 例试分析报告 整机测试评估报告 软件FTA版本 硬件FTA版本
|
||||||||||
T2 FTA
|
|
T2设计文档 试产报告 例试分析报告 整机测试评估报告 软件CTA版本 硬件CTA版本 |
|||||||||||
T3 CTA
|
|
T3设计文档 试产报告 例试分析报告 整机测试评估报告
|
|||||||||||
量产 准备 阶段 |
|
全套DVT报告 工艺文件 |
|||||||||||
量产 转移 |
|
|
|||||||||||
附录:1、结构设计及制作流程图 2、软件设计流程图 3、硬件设计流程图 |
附录1. 结构设计及制作流程图: |
||||||||||
阶段 |
流程图 |
表单 |
||||||||
评估 |
|
3D模型评估报告 结构设计进度表
|
||||||||
详细 设计 |
|
结构设计进度表
|
||||||||
结构 设计 验证 评审
|
|
结构设计内部评审记录 workingsample配色表 workingsample验收报告 结构BOM 结构设计外部评审记录 模具制作检讨记录表 模具制作申请表 模具备品清单 模具制作注意事项表 工装夹具制作清单 物料进度按排需求表 配色方案表 模具制作进度表 |
||||||||
参考文件: 《工业设计流程》,《ID设计流程》 |
附录2. 软件设计流程图: |
||||||||||
阶段 |
流程图 |
表单 |
||||||||
软件 需求 分析 |
|
软件需求规格书 软件开发计划 软件开发风险控制计划 软件测试计划 |
||||||||
软件 详细 设计 |
|
软件详细设计说明书 软件接口设计说明书 软件设计内部评审记录 |
||||||||
软件 实现 测试
|
|
单元源代码 单元调试报告 单元测试用例 单元测试分析报告 集成后的软件及源代码 软件集成调试报告 软件操作手册 系统测试软件 系统测试用软件文档 软件系统测试分析报告 发布版本 |
||||||||
参考文件: |
附录3. 硬件设计流程图: |
||||||||||||
阶段 |
流程图 |
表单 |
||||||||||
硬件 需求 评估 |
|
硬件需求分析报告 硬件开发计划 硬件测试计划 |
||||||||||
硬件 详细 设计 |
|
硬件详细设计说明书 硬件电路原理图 硬件BOM 硬件设计内部评审记录 |
||||||||||
硬件 实现 测试
|
|
PCB数据 器件规格书 硬件子系统软件 装配图 硬件单元测试分析报告 电装总结报告 硬件系统测试版本 硬件系统测试分析报告 硬件评审验证报告 发布版本 |
||||||||||
参考文件: 1、 PCB布板流程图 2、 LCD认证流程图 |
PCB布板流程图: |
||||||||
阶段 |
硬件 |
结构 |
其他各部 |
表单 |
||||
布板 需求 设计 |
|
|
|
|
||||
PCB 确认 |
|
|
|
|
||||
PCB 投板 |
|
|
|
|
||||
参考文件: |
LCD认证流程图: |
|||||||||||
阶段 |
硬件 |
结构 |
其他各部 |
表单 |
|||||||
样品 提供 |
|
|
|
|
|||||||
各部 确认 |
|
|
|
|
|||||||
装机
|
否
|
是
|
|
|
|||||||
参考文件: |
软件开发规范
Software Development Specification
Version: V1.0
Date: 2010-06-22
Prepared by
Document Revision History文档修订记录
VERSION版本 |
DATE 日期 |
DESCRIPTION 内容说明 |
INDIVIDUAL 修订人 |
1.0 |
2010-06-22 |
初稿 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
一个成熟稳定的组织或者团队,能够减少风险,经常地成功地达成目标。成功的含义是:按时、预算内【即符合成本要求】、符合质量要求。换言之,成熟稳定的团队,能够避免以下问题:
Ø 组织方面出现问题
Ø 对需求缺乏管理
Ø 缺乏计划和控制
Ø 估算错误
同时,还要在以下几个方面做得比较出色:
Ø 人员调度与工作安排
Ø 工作量估计
Ø 预算管理
Ø 责权分配与平衡
Ø 执行与监控
Ø 沟通
本文档是软件开发规范,力求使团队打下一个良好的基础,以便逐步成长为成熟稳定的团队。团队需要一个逐步标准、规范的开发过程,在这个过程中,团队得到锻炼,成员能力得到提高,风险得到控制。
主要内容是:
Ø 定义软件开发的流程;
Ø 定义软件开发的文档格式;
Ø 定义涉及的角色;
Ø 定义涉及的信息;
Ø 描述开发流程;
本文档的目标是:
Ø 统一软件开发团队的流程、文档;
Ø 促进团队成员的沟通,减少误解;
Ø 促使程序员书写易维护的代码;
Ø 提高代码编写效率;
Ø 使每个成员成为一个高效的程序员;
本文档,包含:
Ø 项目管理的流程;
n 项目策划
n 项目追踪
n 配置管理
n 质量保证
n 同行评审
Ø 涉及文档;
n 项目计划mpp
n 需求规格说明书SRS
n Delphi估算
n 项目状态报告
n 配置库样式
n CheckList
n 评审表
n 变更申请表
Ø 开发工具的规范;
n 数据库设计工具
n 功能设计工具
n IDE
n 配置工具
Ø SPP 项目策划Software Project Planning
Ø SPTO 项目追踪Software Project Tracking & Oversight
Ø SCM 配置管理Software Configuration Management
Ø SQA 质量保证Software Quality Assurance
Ø PR 同行评审Peer Review
Ø BaseLine 基线
Ø SCCB 软件配置控制委员会Software Configuration Control Board
Ø CR 变更请求Change Request
Ø SDLC 软件开发生命周期Software Development Life Cycle
Ø RUP 统一开发过程Rational Unified Process
Ø XP 极限【敏捷方法】eXtreme Programming
Ø TDD 测试驱动Test Driven Development
《CMM2》
《CMM3》
本文档主要分为四大部分:
Ø 概述;
描述了团队组织开发过程的高层视图;
Ø TSP和PSP;
按照团队和个人描述流程规范;
Ø 工具规范;
描述了开发工具的详细规范;
Ø 文档;
涉及的文档格式;
本部分是开发团队开发过程的高层描述。它描述了开发过程规范的背景,用来和所有涉及各方就基本过程达成共识。
|
|
实线表示参加产品实现的组织和人员(不表示所属关系)
虚线表示工作的汇报关系,如SQAE向SQA经理汇报。
识别需求 |
提出解决方案 |
执行项目 |
结束项目 |
可行性分析报告 |
需求建议书 |
合同 |
项目目标 |
项目定义 制定计划 计划实施 项目终止 |
时间 |
基本流程说明:
Ø 项目启动:本阶段主要是进行可行性分析,定义项目,识别需求;
Ø 制定计划:本阶段主要是计划策划,估算工作量,制定具体的可执行的计划;
Ø 计划实施:本阶段主要是实施计划,完成计划中的各项任务,报告计划状态;
Ø 项目终止:计划执行完毕,总结项目;
SCM |
SQA |
Work Area |
BaseLine |
SPP |
SPTO |
PR |
Change & PR |
基本过程说明:
Ø SCM:软件配置管理,所有活动的基础,一切制品必须放入配置库;
Ø SPP: 软件项目策划,估算工作量,制定详细计划【项目的制定计划阶段】;
Ø SPTO:项目追踪,报告项目状态,评估并更新计划【项目的计划实施阶段】;
Ø PR: 同行评审,进入基线的前提条件,降低风险,提高质量的有效手段;
Ø SQA: 质量保证,预防风险的有效手段;
配置管理主要解决:
Ø 版本
Ø 变更
确定配置项和基线 |
确定记录和报告配置项状态策略 |
定义配置项 |
定义访问权限访问权限 |
确定配置管理工具 |
确定SCCB成员 |
确定配置库及其目录结构 |
项目启动 |
确定配置管理人员 |
Vss、SVN或VSTS |
一般由:项目经理、技术经理、客户经理、质量保证人员、配置管理等项目的核心成员人员组成。 |
在配置项(基线)生成和基线变更时 |
配置库结构 权限表 |
基线表 |
确定基线变更过程 |
定义备份与病毒策略 |
按计划执行配置 管理活动 |
SCM计划制定和评审 |
记录和报告基线的状态 |
在配置项(基线)生成和基线变更时 |
至少在项目的每个里程碑结束时进行备份 |
1建立配置库 2对项目组指导和培训 3对配置项的日常管理 4参加评审会议 5定期备份和病毒防护 6实施发布 7进行归档 8配置管理计划的维护 |
配置管理情况总结 |
计划完成 |
总结配置项是否完整、基线的变化情况统计、审核发现问题情况统计、改进建议等,记入项目总结报告 |
定义测试和发布归档方式 |
SCM计划 |
配置审核 |
状态报告 |
审核报告 |
计划策划的核心是工作量估算
从历史库中识别可用的信息 |
项目启动 |
从公司的数据中识别项目相似的信息,如项目的总结报告和其它的数据或文挡 项目需求、合同以及《软件项目任务书》等相关要求 |
选择项目生命周期
识别项目的特点
了解各个生命周期的特点
确定适合项目生命周期模型 |
从对用户需求的理解是否充分;人员介入项目的方式;产品的交付方式;项目规模大小和风险高低;对项目系统架构的理解是否充分等方面考虑
|
RUP XP |
RUP XP |
依据定义的过程,识别必须完成的任务和工作产品 |
分解时考虑的活动事项要详尽,不要漏掉:教育或培训的需要;参与评审文档;参与项目会议;确定、记录和显示各种与质量相关和与过程相关的数据;传播时间 |
文档制品 如:计划、SRS等 |
规模估算 |
制定工作产品的评审计划 |
估算表 估算结果 |
评审计划 |
识别项目需要使用的工具和设施 |
风险评估 |
识别与其他组之间的关系 |
确定项目的跟踪情况 |
确定项目的组织结构和职责 |
识别项目需要进行的培训 |
制定时间进度表 |
在已知的停工和节假日时间不安排工作;不考虑加班时间;考虑测试及评审中发现问题的返工需要的时间;考虑客户需求的稳定情况;考虑各项活动的交接和信息的传递时间;识别出的风险对活动的影响;在安排工作时应考虑整个项目的效率因素,在正常估算的工期内增加20~40%的余量,分配到项目的所有活动中――特别是关键路径中的活动中 |
工具指南 |
风险表 |
协同工作计划 |
项目跟踪计划 |
组织和角色定义 |
培训计划 |
时间进度表 |
编写项目开发计划书及其相关计划书 |
计划评审 |
计划管理和控制 |
SQA计划 |
SCM计划 |
SDP计划 |
Test计划 |
风险计划 |
软件项目开发计划 |
日常进度跟踪 |
定期报告项目状态 |
周例会 |
里程碑总结 |
需要调整计划 |
修改和评审计划 |
纠正和预防 |
当出现: 规模、工作量、进度和关键计算机资源超出规定的阈值;项目总的原始计划不再可能达到;计划和实际的任务安排明显不相符,起不到指导作用;对客户的承诺不能实现时 |
并满足下列条件时: 导致计划变化的原因是知道的,并清楚计划怎么样改变;提议的项目进度计划变动是可达到的;提议的项目进度计划已经得到了必须完成他的人员的许诺 |
在周例会上向项目组的成员传达客户方面的信息、交流项目近期进展情况、未完成的工作、工作中存在的问题、好的经验以及部署下两周的工作,以使得计划和实际的开发工作相符合 |
总结到目前为止项目开发总体状况、项目活动进展情况(一般通过甘特图来体现)、活动项进展(应特别关注未完成活动项)、本阶段好的经验和典型问题、过程改进建议、客户方面新要求,项目评审、培训执行情况、项目风险等其它方面存在的问题,分析在进度、工作量和缺陷等方面收集的数据并根据情况制定相应的措施和调整时间进度表,保持项目正常、健康开发 |
个人工作周报 |
时间进度表 |
数据收集 |
其它组跟踪 |
周报告 |
分析和预测 |
里程碑报告 |
项目总结 |
项目总结报告 |
评审准备 |
制定本次评审计划 |
评审跟踪 |
正式评审 |
评审人员进行预审,在指定的时间内给出预审意见,反馈给评审组长和作者。 评审组长将缺陷(或问题)及工作量汇总填入《评审报告》。 |
要评审的文档已经完成且文档符合标准模板要求,项目经理指定评审组长,发放工作产品及参考资料,必要时确定评审重点(参见评审指南) |
工作产品评审计划 |
将报告抄送相关人员 项目经理组织解决发现的缺陷(或问题) 作者根据评审结果进行必要的改进 验证人验证最终修正 评审通过的产品作为基线的要得到SCCB批准 |
评审通知表 |
个人评审表 |
评审报告 |
软件项目启动 |
指定SQAE |
制定质量保证计划并评审通过 |
进行审核 |
发现不符合项 |
计划完成? |
No |
Yes |
制定质量审核计划 |
详细的审核时间安排至少在正式审核前2天发给项目经理或技术经理、SQA经理审核、得到项目或技术经理认可 |
询问相关人员,对项目组的过程执行情况进行审核 检查文档和其他一切相关的证据,验证项目组的活动 |
总结审核情况 |
将报告初稿与项目经理及有关人员进行讨论,落实问题负责人; 形成正式报告后发送给高级管理者、SQA经理、项目经理、项目成员等相关人员 |
项目质量保证情况总结 |
SQA计划 |
SQA审核计划 |
CheckList |
SQA审核报告 |
SQA差异报告 |
当前比较成熟稳定的SDLC是:
Ø WaterFall
Ø RUP
Ø XP
其中:RUP和XP是迭代式开发过程,风险是可控的。
Ø RUP的优点是过程清晰、文档齐全,但是过于庞杂,比较适合大规模的团队;
Ø XP的优点是过程简洁、推崇简单,但是不注重文档,难于交接,适合小规模团队。
对于中等规模的团队来说,应该基于RUP和XP,进行裁剪,找到适合的SDLC:
Ø SDLC的核心是:迭代式和TDD
Ø 从全局看:
n Use-Case Driven用例驱动
n 基于Architecture
n 迭代和递增的
Ø 从微观看:
n TDD测试驱动
n ReFactor重构
n Pair结对编程
需求 分析 |
概要 设计 |
详细 设计 |
编码 |
单元 测试 |
集成 测试 |
集成测试计划 |
系统测试计划 |
系统 测试 |
验收 测试 |
形成 文档 |
发布 |
维护 |
SRS HLD CODE DD
|
策 划 |
软件配置管理 |
软件质量管理 |
评审管理 |
Ø 需求分析阶段
n 需求收集
n 需求总结
Ø 总体设计阶段
n 总体架构
n 部署模型
Ø 概要设计阶段
n 模块划分
n 数据库设计
Ø 详细设计阶段
n 具体实现
Ø 编码阶段
n 测试用例
n Coding
n 单元测试
Ø 测试阶段
n 测试用例
n 测试
n 修正
Ø 发布阶段
n 安装测试
n 安装系统
n 维护
Ø 需求阶段
n SRS:需求规格说明书
Ø 总体设计阶段
n 总体设计说明书
Ø 概要设计阶段
n HLD:概要设计说明书
n DB:数据库设计
n DFD:数据流图
n UI:用户界面
Ø 详细设计阶段
n DD:详细设计说明书
Ø 编码阶段
n Test Case:测试用例
n Coding:源代码
n UT Test Result:单元测试报告
Ø 测试阶段
n Test Task:测试任务书
n Test Case:测试用例
n Test Result:测试报告
n Test Approvals:测试总结
Ø 发布阶段
n 发布申请书
Ø
Role Duty 角色职责
角色 |
责任 |
研发经理 【研发团队】 |
为软件项目提供足够的资源. 保证SQA小组的独立性. 解决SQA检查时发现的问题. 审批对外的承诺。 定期审查SCM、SQA、项目计划和跟踪的相关活动。 |
规定系统需求;将系统需求分配给硬件、软件和其他成分;规定硬件、软件和其他成分的界面; 监控设计和开发以保证他们符合其规格说明; 代表公司下达任务书。 |
|
SA团队 |
负责网络工程计划的制定及实施; 负责对客户的技术支持与培训; 负责工程服务部内部人员素质与技术培训 负责系统集成工程标识、测试、验收及质量保证; 负责硬件、网络和系统软件产品的最后交付; 负责组织自产软件储运、防护、交付和安装; 负责工程项目的配置管理 |
QA |
研究制定测试规范和方案; 参加实施测试和质量保证过程; 对系统测试中发现的缺陷进行验证; |
负责组织软件项目任务书、开发计划、里程碑等管理评审; 负责公司的配置管理; |
|
项目经理 |
负责软件和硬件整个项目的协调、管理 |
进行需求分析,并进行文档的编写 组织技术评审等活动 组织制定项目开发计划(SDP)、风险管理计划等计划 配合与协调SQA和SCM小组的活动. 管理项目组,执行SQA方针和过程以及SDP. 监督和跟踪SDP、项目估算 |
|
SA |
负责硬件工程的实施; 负责系统的上线; 负责系统的维护; |
|
|
SCCB |
授权建立软件基线和标识配置项/单元; 审查和审定对软件基线的更改; 审定由软件基线库制造的产品的生成。 |
SCM |
协助软件项目经理制定SCM计划、维护SCM 计划; 制定并维护项目标识规范;按时归档配置项; 标识并管理置于配置管理过程之下的软件工作产品集合; 进行软件项目的软件基线生成、管理和备份; 软件配置状态的统计和审计,并向项目组、软件项目经理、高级管理者汇报有关活动情况; 将基线的变更情况通知受影响的组和个人; 保存并管理各项评审记录、与项目相关的技术文档、标准和规程。 |
SQC |
依据测试计划模板制定测试计划. 执行测试计划进行测试并记录测试发现的缺陷 提供测试报告. |
SQA |
主要是策划软件质量保证活动、检验软件产品或活动对可用的标准、需求和规则的遵守程度、组织处理项目内部不能解决的不一致问题; 定期报告检查情况,发现偏差组织制定纠正、预防措施并监督更正; 参与制定SQA计划,实施SQA活动,并向SQA经理、软件项目经理项目组、高级管理者汇报有关的情况。 |
DBA |
负责DB的创建和维护; 为DE提供一个稳定的环境; |
DE |
按软件开发计划进行开发,并记录相关数据; 遵守公司质量管理体系的要求. |
Deployer |
根据发布申请,提取代码,发布系统 和SA、DBA一起配置环境 重构和重建系统 |
本部分按照角色划分详细描述开发过程。
Ø 目录结构
n 开发库:开发工作区文档和代码
u 项目文档
l 项目启动
l 项目策划
l 项目计划
l 项目报告
u 开发文档
l 需求
l 设计
l 测试
u 代码
l 代码目录
u 参考资料
l 客户资料等等
n 基线库:评审通过后的文档
u 《文档同开发库》
n 测试库:测试代码和测试发布包
u 文档
l 计划
l 用例
l 测试报告
u 代码
l 版本1
l 版本2
u 参考资料
n 产品库:测试通过后的文档和代码
u 项目交付制品
l 项目总结
l 验收报告
l 。。。
u 项目产品
l 版本1
l 版本2
Ø 权限
n 测试库:
u 测试人员可以读写
u 其它人员只能读,不能增加、修改和删除
u
n 基线库:只能增加,不能删除和修改
n 产品库:只能增加,不能删除和修改
n 开发库:
Ø 测试需要一个独立的环境
n DB独立
n FTP等资源独立
n Pass9等外部系统独立
Ø 最好是一个单独的局域网环境,完全和开发分开
n 开发是172.18.0.0环境
n 测试是192.168.0.0环境
Ø 每次测试,应当是一个完整的测试过程
n 安装系统
u DB
u Web
u AppServer
u Client
u 其它
n 配置系统
u DB配置
u AppServer配置
n 系统初始化
u 清除所有历史数据
u 执行初始化脚本,插入初始数据
n 测试系统
本阶段的关键是定义项目、估算工作量和制定详细计划。
一个软件项目的正式启动从《软件项目任务书》的下达开始。任务书中写明项目的基本信息及相关责任人和详细分工,规定项目必须提交的产品清单。任务书由研发经理或者项目负责人起草,研发经理批准后下达给相关负责人。项目任务书必须为打印纸质文档,由相关人员签字确认后,入配置管理库归档。
软件项目任务书主要作用是明确项目人员职责以及各组之间的协调确认。
估算工作量,从确认需求后开始。由项目经理指定评估人员,先按照头脑风暴法估计各个子系统或者模块的难易程度,然后按照Delphi法估算各个部分的工作量。
项目经理和PMO成员,根据估算的工作量,制定项目计划。
SQA和SCM分别制定各自的计划。
SCM需要确定资源库的目录结构和权限结构。
项目经理召集PMO、SQA、SCM评审及审核项目计划、SQA计划、SQA审核计划、SCM计划和测试计划。
对于发布后的一般性程序修改,不需要下达软件项目任务书。对于关系重大,需要各组人员协调工作的重大修改,项目负责人可以以任务书的形式明确职责、协调关系。
测试负责人评估测试资源【人员及机器】,并决定测试人员是否介入项目的需求分析和设计阶段。
本阶段的关键是评审和修订控制,关键评审需要需求、设计、编码、测试、项目管理、用户等的参与。
需求阶段,需求分析人员收集需求,根据SRS模版,作出需求规格说明书。
设计阶段,设计人员根据总体设计、概要设计、数据库设计和详细设计,作出设计文档。
编码阶段,编码人员根据详细设计,设计单元测试用例,编写代码,进行单元测试。
关键评审:SRS评审,设计评审,代码走查
项目启动后,项目经理填写测试任务通知单,将测试任务下达给测试组。概要设计评审完成后,由各子系统或者模块的负责人测算完成时间,在确定完成时间后(正式开始编码前)将测试任务通知单提交给项目测试负责人,项目测试负责人审核通过在通知单上签字后返回给子项目负责人。开发及单元测试完成后,由开发人员将测试内容提交配置管理员入测试库后,将测试任务通知单提交给发布人员申请测试发布。发布人员将测试库中本次测试的内容发布到测试机后,在测试任务通知单上签字后,提交给测试人员开始测试。
测试完成后,测试人员在任务单上填写测试意见后,交测试负责人确认后,返还给开发人员。
如测试没有通过,开发人员修改测试内容,进入下一个测试流程。
如通过测试,开发人员将测试任务通知单提交给项目负责人,由项目负责人、SCCB签字确认后,提交配置管理员将测试内容入基线库。
过程关键:发布实施人员确保发布到测试机上的源程序在配置管理库中得到了有效的标识。
程序通过测试入库以后,根据需要,由项目的负责人负责填写发布申请单。发布申请单由项目测试负责人、配置管理员、SCCB、客户代表、研发经理签字确认后,由项目负责人提交给实施发布人员。发布人员拿到签完字的发布申请后,才能从基线库中提取程序向生产机上发布。如以上发布确认人员没有全部签字同意发布,必须由项目经理签字同意后发布。
程序发布到生产机上以后,进入终测【UAT】流程。测试人员和用户代表要对生产机上的程序进行最后测试,确保生产机上的系统符合需求。项目负责人负责同用户协调,项目负责人、测试人员和用户共同编写测试用例。项目负责人将《终测意见书》提交三方签字,根据签字意见决定修订系统或者提交正式发布。
终测出现的问题修改按照基线变更流程进行。
实施人员只有拿到有三方签字的《终测意见书》后才能将系统正式公开发布。系统正式发布三天之后一周之内,由实施人员负责到用户处取得有用户主要负责人签字的《系统运行报告》,项目负责人负责监督执行。根据《系统运行报告》做相应的处理。
过程关键:发布到生产机上的程序都在基线库中得到了有效的标识。
系统发布之后,用户反馈的意见要形成问题清单或者变更申请单,记录需要修改的地方,提交给项目负责人。项目负责人负责判断改动是否会影响需求或者设计,负责将任务分配给相关人员进行修改。修改完成后,提交测试直至发布。
这个阶段的最重要的是保证所做的修改(文档、代码)都在配置管理库的基线库中得到体现。即基线库中的文档和代码要进行同步更新,关键是发布人员严格根据发布申请单进行控制,并确保发布的代码都是从基线库中取出的。没有经过流程直接要求发布的,发布人员必须予以拒绝。
Ø 会议前,确定会议主持人和记录员
Ø 向参与会议人员发送会议资料
Ø 参与会议人员阅读会议资料
Ø 确定会议主题、日期时间和地点
n 注意:留出阅读资料的时间
Ø 确定会议议程
Ø 准备会议用品【如投影仪等】
Ø 重要会议,需要签到
Ø 会议开始前,申明会议纪律
n 发言时间限制
n 发言顺序
n 除主持人外,不得打断别人
Ø 记录员记录会议纪要
Ø 会议后,发送会议总结
Ø 原则
n 目标明确
n 明确反馈
n 反复沟通
Ø 请求-答复
n 当有疑问时,发出请求
n 明确求助对象,指定第一对象和辅助对象
n 第一对象接收到请求后,不能及时答复的应当转发给自己认为合适的答复人,并告知求助人
n 求助方式【高-低】:当面,电话,邮件
Ø 公告
Ø 项目负责人指定代码走查对象
n 相互走查
n 循环走查
Ø 代码走查发现的问题
n 首先记录
n 告知代码作者
Ø 更新CheckList
Ø 计划管理:把你想做的写下来
Ø 行为管理:按照你写下来的去做
Ø 报告管理:把做的事情记录下来
Ø 跟踪管理:出现的问题要设法解决
Ø 每日工作
n 每日早晨,规划当日工作;
u 计划必须细化到一个明确的目标
u 计划要有余地,比如会议等
u 计划是可执行的,能够完成的
u 计划是可监控的
n 每日下班,总结当日工作;
u 计划完成情况
u 未能完成原因
u 个人心得:新的发现,新的方法,新的问题
Ø 会议
n 会议之前,仔细阅读会议资料
n 如有疑问,可以发邮件向会议主持人提出
n 或者在会议上提出
n 会议中,记录会议要点
n 如要参与讨论,请在别人发言结束后发言,不要打断别人
n 会议后,如有新的想法,发邮件或者当面向会议主持人提出
Ø 求助
n 如果一个问题20分钟还不能理出一个头绪,应当立即求助
n 求助对象:
u 个人认为能够解决该问题的人为第一对象
u 不能确认的,项目负责人为第一求助对象
n 发出求助后,个人负责追踪求助,直到解决
Ø 报告
n 认为个人负责的任务不能按时完成的,应当立即报告给负责人
u 重要任务:Leader和项目负责人
u 其它任务:Leader
n 提前期:
u 重要任务:至少提前3天
u 其它任务:至少提前任务期的1/3
Ø 接受任务
Ø 阅读详细设计文档
n 从SCM获取详细设计文档
n 阅读文档
n 如有疑问,向设计人员请教
Ø 规划个人开发计划
n 估计开发工作量
n 制定计划
u 单元测试用例
u 代码
u 单元测试
n 和负责人协商
n 提交SCM
Ø 设计单元测试用例
n SCM获取测试用例模版
n 编写测试用例
n 提交SCM
Ø 编写代码
n 从SCM获取代码库
n 编写代码
n 本地调试
n 提交SCM
Ø 单元测试
n 代码发布到开发机
n 请DBA协助
n 如果有其它模块,请负责人协调
n 测试
Ø 代码走查
n 根据负责人安排,检查他人的代码
n 和代码作者讨论代码
n 填写走查报告
Ø 提交代码
n 提交SCM
n 做Tag或者其它标记,以便提交集成测试
Ø 规划SCM
n 资源库目录结构
n 权限
n 基线
n 备份
Ø 基线
n 经过评审
n 发送通知
n 转移资源到相应基线
Ø 变更管理
n 接收变更申请
n 向SCCB发送申请
n 申请通过后,发送变更通知
n 提取基线到工作区
Ø 规划DB的管理
n DB的大小
n 权限划分
n 备份和恢复
n 建立DB脚本
n 和SCM协商进入SCM的资源
Ø 管理DB
n 建立DB
n 建立权限
n 评审数据库设计
n 导入和导出数据
n 建立Table、view和index
n
Ø 规划
n 发布策略
n 发布脚本
n 发布计划
Ø 重构和重建
n 根据项目特点制定重构和重建计划
n 编写重建脚本
n 编写测试脚本
n 从SCM提取资源
n 重建系统
n 执行测试脚本
Ø 发布
n 接收发布任务书
n 从SCM提取资源
n 和DBA建立DB
n 和SA建立环境
n 发布系统
Ø 会议报告
n PPT
n Word
n MPP
Ø 会议记录
n Word
Ø CheckList
n Excel
Ø 项目计划
n MPP
Ø 风险计划
n Word
Ø SRS文档
n Word
Ø Use Case图
n Rational Rose
Ø 对象图
n Rational Rose
Ø 序列图
n Rational Rose
Ø 流程图
n Visio
Ø 总体设计
n Word
n Rational Rose
Ø 概要设计
n Word
n Rational Rose
Ø 数据库设计
n Visio
Ø 详细设计
n Word
Ø 测试用例
n Word
Ø 编码
n Visual Studio 2005
Ø 单元测试
n Word
Ø Test Director
Ø Delphi估算表
Ø 项目计划模版
Ø 测试计划模版
Ø 项目清单
Ø 项目日进度报告
Ø 项目周报
Ø 项目周计划报告
Ø 项目月度报告
Ø 项目月度状态报告
Ø 签到簿
Ø 项目策划过程检查表
Ø 配置管理活动检查表
Ø 项目跟踪情况检查表
Ø 软件合格验收标准
Ø 项目验收报告
Ø 软件配置管理工具
Ø 变更申请表
Ø 变更通知单
Ø 会议记录
Ø 开发计划
Ø 测试计划
Ø 工作日志
Ø 评审指南
Ø 评审申请表
Ø 个人评审记录
Ø 评审报告
Ø 文档编写规范
Ø SRS
Ø 总体设计报告
Ø 概要设计报告
Ø 详细设计报告
Ø 编码规范
Ø 测试用例
Ø 测试报告
Ø 问题跟踪表
Ø 软件项目任务书
Ø 测试任务通知单
Ø 发布申请单
Ø 系统运行报告
Ø 终测意见书
Ø 用户手册
Ø 经常注释
Ø 注释内容是做了什么,不能是为什么做
Ø 检查错误,尤其是函数入口
Ø 变量名要简洁易懂
Ø 经常使用Static常量
Ø 截获抛出异常的地方,要输出Error
Ø 返回True/False的方法,如果返回False,要输出Debug
Ø 所有调用其它系统接口的地方,都要输出Info,内容是参数和返回值;
Ø 输出前,判断是否允许输出,比如:isDebugEnabled