从18年8月到23年中秋节,目前已经入职主营对日车载项目的公司满5年了,一般来说,在一家公司工作工作超过3年,如果是在比较大型以及流程规范的公司,那么该公司的工作流程,工作思维会深深地烙印在该员工的脑海中,感觉就像FATE动漫中魔术师的魔术回路那样。
对日的项目的流程大致是这样的:
1.用户提出大致的功能需求,并且提供大量和需求相关的技术/业务文档(里面甚至活包括用户往期项目中涉及该需求的文档以供参看)
2.式样分析用户提供的文档,根据用户的需求和文档,整理出初步的功能点A,B,C,即针对用户提出的某个需求,我们作为乙方,需要怎么实现该需求,即我们需要做什么,这个就是功能点,并且这个功能点我们需要提供对应的用户文档来源,即我们是依据什么来判断为了实现这个需求,我们需要做A,B,C这三个功能。
3.大致理解完用户的需求,并且阅读完用户提供的文档抽取出功能点后,式样就会和用户进行沟通确认,就是“打合”,双方就这些功能点进行逐个说明,沟通,确认/否定。就是我们作为乙方,需要向用户一一列出我们需要实现的功能点,这些功能点都是为了满足甲方的需求,并且功能点的实现内容和方式是参考了用户提供的文档后整理出来的,并不是自己假设或者猜想的(就是第2步中做的工作),用户会逐个确认这些功能点,哪些是合理需要实现的,哪些是不合理或者过期的(例如用户提供的文档可能存在过老或者不符合当前项目的硬件条件无法实现其中的功能点),合理的功能点保留,有误或者不完整的进行补充修改,不合理或者不需要的功能点删除。
4.经过上面的步骤,这次项目,我们乙方要实现的功能点基本就确认了,从A~Z,然后根据需求将不同的功能进行分类,形成式样书,就是功能说明书,里面整理出具体详细的一级功能,二级功能,三级功能等以及相关附件说明(参数,配置说明),这些功能点都需要说明其功能来源(客户提供的具体文档/沟通邮件等)
5.一个公司分为很多机能组,例如media,hal,driver,hardware,framework,app这些,每个功能点的实现都需要一个或者多个机能组的参与,共同实现,式样会将式样书分发给不同的机能组做要件分析,就是分析这些功能点是否我机能组该当,是否主担当,或者是辅助,并且确认责务,就是这个功能点我这个机能组需要做什么,其他的机能组是否需要提供帮助,提供什么帮助,那么都需要在要件分析的文档中写出来,写清楚,并且展开给需要辅助我组实现该功能点的其他机能组让他们知晓。
6..分析完成后,这次项目,每个机能组主负责那些功能点的实现,辅助其他机能组完成那些功能点的实现,这个就确认下来了,既然明确自己应该做什么,下一步就是做概要设计文档,就是根据要负责的功能点,做出接口说明,模块图,用例图,大致的类图以及时序图
接口说明要描述依赖的其他模块的接口,以及自己模块提供给外部模块使用的接口
模块图是基于整个车载系统进行模块划分,层次分为APP, FRAMEWORK, SYSTEM, DRIVER,HAL,大致是这样,每个层中有多个模块,例如APP中有电话,音乐,FM等APP, FRAMEWORK中有系统java服务和vendor服务,一个机能组一般负责一个或者多个模块。
机能组的担当编写模块图的时候,需要根据自己要实现的功能点,判断依赖到哪些其他的模块,要在模块图上列出自己实现功能点所涉及的所有模块和模块间的大致依赖关系
用例图就是该机能组具体还要实现的功能用例,根据用例画出后面的时序图,就是在实现具体某个用例的功能点时,步骤是怎样的,有哪些判断逻辑。
7.详细设计,这一步是具体完成概要设计中的类图和时序图,类图要完整描述每个类的细节,时序要展开自己模块内部的类之间的调用时序
8.编码,就是根据详细设计,完成实际的代码编译,编译,review和提交
9.单元测试,一般使用gtest和junit来做自己模块的代码的单元测试,对于硬件和外部模块的接口依赖,通过mock来模拟,一般要求代码行和分支覆盖率在95%以上,对于实在无法覆盖到的地方,需要手动测试。
10.集成测试,个人认为就是接口测试,测试模块和外部模块间的接口是否调用正常。
11.功能测试,顾名思义,就是对于负责开发的功能点,涉及正常和异常测试用例,用不同的输入触发测试整个功能。
12.交付,将系统编译出release交付给用户,交付之前需要对release做功能测试
大致就是上面这套流程