设计和实现流程 | ||||||||||||||||||||||||||||||||
1.目的 | ||||||||||||||||||||||||||||||||
系统设计是根据需求,对开发、设计和实现需求的解决方案。目的是选择产品解决方案和设计方案, 制定集成策略以及确定系统技术解决方案,从而实现产品或产品组件设计,指导开发人员实现能满足 用户需求的产品设计。 | ||||||||||||||||||||||||||||||||
实现目的是依据设计文档,实现设计要求,对模块进行代码走查和单元测试,系统集成。 | ||||||||||||||||||||||||||||||||
2. 术语定义 | ||||||||||||||||||||||||||||||||
过程:把输入转换为输出的一组彼此相关的活动; | ||||||||||||||||||||||||||||||||
构造:将源代码进行编译、连接、生成目标代码的过程; | ||||||||||||||||||||||||||||||||
构造环境:主要指与源码一起进行编译、连接的环境,在C语言中一般是指由编译、连接命令、环境参数、操作语句等构成的一系列脚本程序的组合; | ||||||||||||||||||||||||||||||||
单元测试:单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。在一种传统的结构化编程语言中,比如C语言,要进行测试的单元一般是函数或子过程。在象Java这样的面向对象的语言中,要进行测试的基本单元是类; | ||||||||||||||||||||||||||||||||
正式的总体设计:根据需求,严格按照《总体设计》模板要求,编写正式的总体设计; | ||||||||||||||||||||||||||||||||
简化的总体设计:根据需求,在《总体设计》模板基础上对部分内容进行简化,其中业务结构、物理架构、接口设计、关键算法等重要章节不可删减。 | ||||||||||||||||||||||||||||||||
全走查:走查范围覆盖所有业务模块的源代码; | ||||||||||||||||||||||||||||||||
核心代码走查:走查范围必须覆盖核心业务模块的源代码,其他代码可以选择性走查。 | ||||||||||||||||||||||||||||||||
3.角色与职责 | ||||||||||||||||||||||||||||||||
3.1 | EPG小组 | |||||||||||||||||||||||||||||||
负责为项目提供设计和实现活动的咨询和指导; | ||||||||||||||||||||||||||||||||
负责为项目选择合适的工具和方法提供咨询和指导; | ||||||||||||||||||||||||||||||||
负责为项目制定各阶段的就绪准则和完成准则提供咨询和指导。 | ||||||||||||||||||||||||||||||||
负责将公司的标准过程在全公司范围内推广,并组织和监督公司培训部门和项目组的新过程的培训工作 | ||||||||||||||||||||||||||||||||
3.2 | 项目负责人 | |||||||||||||||||||||||||||||||
负责组建队伍,培训人员,执行设计和实现活动; | ||||||||||||||||||||||||||||||||
负责制定设计计划,并执行计划,保证项目在规定的时间,使用规定的资源,按计划完成; | ||||||||||||||||||||||||||||||||
监督并控制设计和实现过程; | ||||||||||||||||||||||||||||||||
负责审批单元测试及联调等相关测试报告; | ||||||||||||||||||||||||||||||||
负责就项目的进展情况与客户沟通; | ||||||||||||||||||||||||||||||||
负责项目人员、流程管理。 | ||||||||||||||||||||||||||||||||
3.3 | 技术经理 | |||||||||||||||||||||||||||||||
负责总体设计的编制,包括软硬件开发技术选择,系统架构,关键技术攻关等; | ||||||||||||||||||||||||||||||||
负责组织并指导相关人员对软件、结构、接口、数据库进行设计说明书,并负责接口文档的修订维护; | ||||||||||||||||||||||||||||||||
参与预研、设计及技术过程产物评审; | ||||||||||||||||||||||||||||||||
负责指导软件工程师按照《编程规范》《应用安全开发规范》或者具体编码工具的编码规范执行; | ||||||||||||||||||||||||||||||||
负责抽检程序员所提交的代码或者组织代码评审,确保代码的质量; | ||||||||||||||||||||||||||||||||
负责软件模块的编译、构建及联调,验证及审核程序单元测试及联调的结论; | ||||||||||||||||||||||||||||||||
负责建立编码基线。 | ||||||||||||||||||||||||||||||||
3.4 | 软件工程师 | |||||||||||||||||||||||||||||||
在项目负责人/技术经理指导下完成软件概要设计说明书编制,包括结构、接口、数据库等; | ||||||||||||||||||||||||||||||||
负责按照《编程规范》《应用安全开发规范》编写和修改程序代码(包括自行测试),向技术经理提交工作成果; | ||||||||||||||||||||||||||||||||
进行代码走查,记录代码走查发现的问题; | ||||||||||||||||||||||||||||||||
完成源码测试,并填写执行单元测试情况; | ||||||||||||||||||||||||||||||||
负责配合技术经理处理涉及软件需求的问题。 | ||||||||||||||||||||||||||||||||
2.5 | 测试经理 | |||||||||||||||||||||||||||||||
负责组织测试组对概要设计进行分析,审查设计的可测试性; | ||||||||||||||||||||||||||||||||
负责验收软件负责人所提交的需要测试的软件版本; | ||||||||||||||||||||||||||||||||
参与《软件设计说明书》、《详细设计说明书》的评审; | ||||||||||||||||||||||||||||||||
协调测试工程师协助软件工程师做单元测试; | ||||||||||||||||||||||||||||||||
监控测试缺陷的问题记录。 | ||||||||||||||||||||||||||||||||
2.6 | 测试工程师 | |||||||||||||||||||||||||||||||
根据测试计划对模块功能进行测试; | ||||||||||||||||||||||||||||||||
向测试经理及技术经理报告测试的结果; | ||||||||||||||||||||||||||||||||
记录并跟踪测试登记的缺陷。 | ||||||||||||||||||||||||||||||||
2.7 | 配置管理员 | |||||||||||||||||||||||||||||||
负责设计文档、代码库、基线的配置管理。 | ||||||||||||||||||||||||||||||||
2.8 | QA负责人 | |||||||||||||||||||||||||||||||
负责指导和检查项目经理或项目度量人员对度量数据进行收集与分析数据; | ||||||||||||||||||||||||||||||||
参与评审并分析过程活动及其工作产品; | ||||||||||||||||||||||||||||||||
按照《裁剪指南及检查单》开展对设计和实现过程的审计。 |
4.入口和出口准则 | |||||||||||||||||||||||||||||||
4.1 | 入口准则: | ||||||||||||||||||||||||||||||
用户需求经过产品经理、用户、技术经理的确认,并形成了需求规格说明书; | |||||||||||||||||||||||||||||||
产品经理对需求的所有角色(产品、开发、测试、设计)一起完成需求宣讲; | |||||||||||||||||||||||||||||||
需求按用户故事录入Jira系统,审批通过,并且测试人员已完成免测评估。 | |||||||||||||||||||||||||||||||
4.2 | 出口准则: | ||||||||||||||||||||||||||||||
对需求复杂度超过约定值(如超过5天或XX特性)的设计已完成开发方案的评审; | |||||||||||||||||||||||||||||||
开发人员已完成P0用例自测、模块联通自测达到通过标准,发布测试版本完毕; | |||||||||||||||||||||||||||||||
产品和设计角色要完成检查,需求开发的功能和设计是否一致; |
5.输入和输出 | |||||||||||||||||||||||||||||||
4.1 | 输入 | ||||||||||||||||||||||||||||||
《裁剪指南及检查表》 | |||||||||||||||||||||||||||||||
《用户需求说明书》 | |||||||||||||||||||||||||||||||
《需求规格说明书》 | |||||||||||||||||||||||||||||||
Jira-《用户故事》 | |||||||||||||||||||||||||||||||
《C#/JAVA编码规范》 | |||||||||||||||||||||||||||||||
《应用安全开发规范》 | |||||||||||||||||||||||||||||||
4.2 | 输出 | ||||||||||||||||||||||||||||||
《总体设计》 | |||||||||||||||||||||||||||||||
《服务模块概要设计说明书》 | |||||||||||||||||||||||||||||||
《单元测试报告》 | |||||||||||||||||||||||||||||||
《代码走查项》 | |||||||||||||||||||||||||||||||
源代码 | |||||||||||||||||||||||||||||||
Jira-缺陷(评审、代码走查发现缺陷) |
6.流程图 |
7.活动规程描述 | |||||||||||||||||||||||||||||||
AC01 | 总体设计 | ||||||||||||||||||||||||||||||
技术经理根据《用户需求说明书》和《需求规格说明书》编写《总体设计说明书》,总体设计是模块设计说明书的基础和指导。 | |||||||||||||||||||||||||||||||
总体设计注重阐述设计目标、技术方案选择、软件界面风格、业务架构、物理架构、接口设计、数据库设计、系统运行环境配置、安全设计、关键逻辑算法描述等内容。 | |||||||||||||||||||||||||||||||
总体设计在对软件需求进行分析的基础上,使用结构化或面向对象的方法进行结构设计。主要包括四个方面的工作:系统体系结构、数据体系结构、接口及安全功能设计。 | |||||||||||||||||||||||||||||||
1)系统体系结构设计 | |||||||||||||||||||||||||||||||
扩充软件需求阶段所提出的初步的系统体系结构。对扩展后的体系结构进行完善,降低那些使软件难于实现、测试、维护和重用的因素,形成高内聚、低耦合的系统体系结构。 | |||||||||||||||||||||||||||||||
2)数据体系结构设计 | |||||||||||||||||||||||||||||||
扩展软件需求阶段所提出的初步的数据体系结构,将其变换成实现软件所需的数据结构。 | |||||||||||||||||||||||||||||||
3)接口设计 | |||||||||||||||||||||||||||||||
扩展软件需求阶段所提出的初步的接口,将其变换成实现软件所需的接口; | |||||||||||||||||||||||||||||||
设计软件模块间的接口和规范; | |||||||||||||||||||||||||||||||
设计人和计算机间的接口(即人机界面)。 | |||||||||||||||||||||||||||||||
接口分对外的接口和对内的接口,统一由技术经理修订和维护。 | |||||||||||||||||||||||||||||||
3)安全功能设计 | |||||||||||||||||||||||||||||||
扩展软件需求阶段所提出的安全需求及《应用安全开发基线检查表》,设计软件的安全功能,输出安全设计章节。 | |||||||||||||||||||||||||||||||
AC02 | 总体设计评审 | ||||||||||||||||||||||||||||||
项目负责人根据技术经理完成《总体设计》后,组织开展评审工作,评审参与人除了项目负责人本人,还包括技术经理、软件工程师、测试经理和测试工程师。评审项除了对结构设计中的问题,还包括安全设计、性能设计和可靠性设计等,对于评审发现的问题需要修改的,技术经理与需求分析人员一起确定和审查,并对结构设计进行适当的更改。 | |||||||||||||||||||||||||||||||
AC03 | 迭代计划 | ||||||||||||||||||||||||||||||
迭代计划开始前需对开发人员的实际水平进行有关编程语言、编程规范、编程方法、编程工具、调试方法、配置管理、安全开发等方面的培训;根据测试人员的实际水平进行有关测试方法、测试工具、问题汇报方法等方面的培训,以及有关被测产品的功能培训;同时根据代码分支管理规范建立相应的服务模块的代码仓库。 | |||||||||||||||||||||||||||||||
项目开发采用迭代开发模式(迭代周期为2周),项目负责人和技术经理沟通用户故事的优先级以及故事之间的关联性,安排新的迭代计划,并在迭代启动会中完成迭代任务的宣讲,由软件工程师自行认领任务,或有技术经理分配任务。 | |||||||||||||||||||||||||||||||
迭代开始后,项目组每日开展站立晨会进行任务进度沟通,对于开发中发现和遇到的困难、风险及时沟通,技术经理和项目负责人需要及时记录和处理。 | |||||||||||||||||||||||||||||||
AC04 | 迭代功能设计 | ||||||||||||||||||||||||||||||
每个迭代任务的复杂度是不一样的,对于超过5个故事点数或涉及特性功能的任务,由技术经理指导软件工程师参考《总体设计说明书》对任务涉及到的模块进行设计或修改调整,而对于复杂度低任务可由技术经理评估是否裁剪。 | |||||||||||||||||||||||||||||||
迭代功能设计主要是指服务模块概要设计,包括接口设计和业务逻辑设计,对于属于《总体设计说明书》中相同模块的设计需要在同一模块设计文档中描述。 | |||||||||||||||||||||||||||||||
AC05 | 方案设计评审 | ||||||||||||||||||||||||||||||
项目负责人根据迭代对迭代功能设计产出的模块设计文档组织评审,评审参与人除了技术经理本人,还包括项目负责人、软件工程师、测试经理和测试工程师。评审项除了结构设计,还包括安全设计、性能设计和可靠性设计等,对于评审发现的问题,由方案的责任人根据修改意见进行修改。 | |||||||||||||||||||||||||||||||
评审不通过的,需要根据评审记录对设计文档进行修改后再次发起评审流程。本过程对于无需产出设计的任务可进行裁剪。 | |||||||||||||||||||||||||||||||
对于接口文档的设计评审通过确定后,不论是内部接口文档,或是外部接口文档,后期的修订由技术经理维护。 | |||||||||||||||||||||||||||||||
AC06 | 编码开发 | ||||||||||||||||||||||||||||||
不需要评审的任务或方案评审通过后,开发人员开始依据《C#/JAVA编程规范》、《应用安全开发规范》,进行程序单元的编制工作(包括建立相关的构造环境),并自行检查。 | |||||||||||||||||||||||||||||||
如计划使用开源软件,需要从《第三方软件清单》中挑选,如要引入新的开源软件,需要遵守《第三方软件管理规范》,在使用之前识别是否是完全开源。若其核心源代码进行了加密,不利用项目的后期维护,则要谨慎选择。建议选择使用宽松式许可证的开源协议并遵守其相关约定。 | |||||||||||||||||||||||||||||||
编码开发过程中,应尽量用测试驱动模式,在测试工程师的指导下写单元测试用例后,再对接口或功能进行编码实现。在无特殊要求下,单元测试可以裁剪。 | |||||||||||||||||||||||||||||||
AC07 | 静态代码扫描 | ||||||||||||||||||||||||||||||
软件工程师编码完成,在源代码文件提交到代码库前必须经过本地IDE环境的静态代码扫描,解决完扫描发现的代码规范问题和安全漏洞,并保证代码编译无报错。 | |||||||||||||||||||||||||||||||
要求代码库的自动化流水线对提交后的代码进行自动静态代码扫描,对于发现的问题,需要技术经理及时安排人员进行处理,达到安全管理目标才能进行下一流程。 | |||||||||||||||||||||||||||||||
AC08 | 单元测试 | ||||||||||||||||||||||||||||||
软件工程师根据用户故事及设计要求编写单元测试用例或脚本(应尽可能在编码实现前开始),并且在编码完成后执行单元测试,单元测试运行发现的BUG直接进行修改,修改后重新执行测试直至能顺利通过。并且当日将单元测试的结论记录到《单元测试报告》中。单元测试的范围应包括模块内程序的逻辑、功能、参数传递、变量引用、出错处理等方面。 | |||||||||||||||||||||||||||||||
AC09 | 模块联调自测 | ||||||||||||||||||||||||||||||
迭代任务单元测试完成后,首先要根据测试工程师提供的测试用例进行联调自测,完成P0用例自测、自测发现的Bug解决后才能提测,尤其是有后台开发功能时,前后台开发人员必须联调通过才能转测试。 | |||||||||||||||||||||||||||||||
AC10 | 代码走查 | ||||||||||||||||||||||||||||||
技术经理对准备提测的任务,根据《C#/JAVA编程规范》和《应用安全开发规范》对提交的代码进行走查,也可以要求工程师相互交叉检查的方式,对代码进行检查。 | |||||||||||||||||||||||||||||||
检查发现的问题录入该项目对应BUG中,并填写《代码走查记录表》。 | |||||||||||||||||||||||||||||||
对于采用分支开发模式的代码库,可以在开发人员提交代码合并测试分支请求时,由技术经理合并代码时进行检查,发现的问题必须解决后才能合并到测试分支。 | |||||||||||||||||||||||||||||||
AC11 | 提交测试 | ||||||||||||||||||||||||||||||
迭代任务自测通过,并进行代码走查后,可以提交测试,并在Jira上将任务状态标记为待测试,通知测试工程师开展测试。 | |||||||||||||||||||||||||||||||
对于采用分支开发模式的代码库,开发人员提交代码合并测试分支的请求,由技术经理合并代码到测试分支,才允许将Jira上任务状态修改为待测试。 | |||||||||||||||||||||||||||||||
AC12 | 分配缺陷 | ||||||||||||||||||||||||||||||
迭代任务测试未通过的,测试工程师发现的Bug录入在Jira中,而技术经理根据任务认领情况分配缺陷,也可以授权给测试工程师自行分配任务的经办人。 | |||||||||||||||||||||||||||||||
AC13 | 缺陷修复 | ||||||||||||||||||||||||||||||
软件工程师对JIRA中的缺陷按照《代码分支管理规范》在测试分支上进行修复。 | |||||||||||||||||||||||||||||||
AC14 | 迭代演示 | ||||||||||||||||||||||||||||||
在迭代结束时,项目负责人组织对迭代内的工作产品进行演示,以确定是否完成迭代目标。针对迭代演示中反馈的意见,大的功能需求由项目负责人进行分析后整理用户故事并在JIRA上提交,小的问题由测试在JIRA上提交缺陷,技术实现上的意见由技术经理分配相应的任务。 | |||||||||||||||||||||||||||||||
迭代开发完成了一个里程碑目标时,由技术经理为代码库打上标签作为基线,并提交给配置管理员。 | |||||||||||||||||||||||||||||||
迭代演示后需要确定是否所有功能开发完成,如果还有新的功能开发或遗留任务或缺陷未解决,进入下一轮新的迭代。 | |||||||||||||||||||||||||||||||
AC15 | 资料移交 | ||||||||||||||||||||||||||||||
当所有迭代任务都已完成,没有新的迭代计划时,项目负责人和技术经理需要对相关资料移交到基线库。 | |||||||||||||||||||||||||||||||
AC16 | 过程执行监督 | ||||||||||||||||||||||||||||||
QA负责人在设计和实现流程中,全程定周期检查产出,对度量数据进行收集与分析,每个迭代记录一份QA报告,并提出持续改进建议。 |
8.评审点 | |||||||||||||||||||||
评审点 | 评审对象 | 组织者 | 评审人员 | 决策者 | |||||||||||||||||
AC02 | 总体设计说明书 | 项目负责人 | 技术经理、软件工程师、测试经理、测试工程师、QA负责人 | 项目负责人、测试经理 | |||||||||||||||||
AC05 | 服务模块概要设计说明书 | 安全开发组组长 | 技术经理、软件工程师、测试经理、测试工程师、QA负责人 | 技术经理 | |||||||||||||||||
AC07 | SonarQube静态代码扫描结果 | 技术经理 | 技术经理、软件工程师、QA负责人 | 技术经理 |