l公司的入职培训分6个课程,为期三天,分别为:企业介绍、软件项目管理、软件质量管理、项目团队协作、i体系介绍、公司管理制度。
第一课:企业介绍,由行政部经理主讲,无非是企业发展历程、部门机构、公司价值观、愿景、文化、高管介绍等内容。短短几年,就杀入了营业额数亿俱乐部,够吓人的。当然这个数字的背后依赖于什么,大家心知肚明。同时入围深圳软件百强企业,什么双软、高新技术认证更是不在话下了。无非是培养新员工的自豪感和归属、认同感。
第二课:软件项目管理,由研发部的高级项目经理主讲,这个课题内容范畴有点大,大学软件工程专业课就有所涉及,但讲师结合项目实际讲解得更为实用,从需求、设计、开发、测试、上线部署、运维全程讲解了各阶段的文档输出,其中涉及项目计划、度量、配置、监控、评审、风险、产品集成等诸多内容。
软件仅仅是编码吗?我想不仅仅是外行人,很多行内人的理解恐怕也仅仅停留于此。第一次在系统工程的层面去理解软件,改变了我狭隘的认知。
软件开发的真实目的是什么?客户要的不是代码,而是利用这些代码的辅助来实现其商业目的。需求分析需要关注和收集什么?仅仅是客户提什么就实现什么吗?对于开发人员来说,只有编码唯一一项工作吗?一个软件的全生命周期里,交付运维后的生命存续通常占据了整个生命周期的90以上,交付上线项目即告完成了吗?在决定项目成败的前几大风险因素是什么?据统计倒还不是技术类风险,依次为:需求不明确、需求变更、分析不完善,其次是人员流动、质量控制、进度延迟,最后才是技术、外部环境风险,前2者导致项目失败的情况占据了90以上。一个项目组成员如何搭配,是人越多越好吗?项目监控仅仅是上线前才关注的事情吗?客户需要对整个项目做哪些阶段确认?这种知识和经验的受益在学校是无论如何也学不到的。
第三课:软件质量管理,由质量管理部的经理主讲。她首先询问我们:“到底什么是产品质量?”符合用户需求、0缺陷、可靠耐用、用户满意大家的回答不一而同。工业化生产有质检环节,是保证产品质量的最后一关,那软件产品本身呢?是软件就会有bug,仅仅依赖于交付前的测试?软件质量与系统分析/设计/开发人员都无关吗?我们到底又如何去理解和保障软件质量?
她首先列举了几位大师的观点,对我的认知是为之一震的:
1质量就是符合要求的,而不是最好的;
2质量系统的用来预防的,而不是用来检验的;
3质量的标准是零缺陷,而不是差不多就好;
4质量是设计出来的,而不是检查出来的。
以此为论,软件产品的质量是要从源头需求调研、软件设计抓起,是需要全角色成员的参与,而不能完全依靠测试人员。对于需求分析阶段,需要尽可能地明确系统设计目标,充分准确把握客户需求并确认,尤其是潜在需求、非功能性要求;在系统设计阶段,除需要设计出满足范围内需求的全部功能外,还必须考虑系统的扩展、容错和可靠性,而不是勉强能用;对于开发阶段,开发人员绝不能仅满足于实现功能运行无误就行,还必须考虑极端情况下的输入项验证、对高访问量、高并发情况下的支撑、良好的ui交互、用户的操作习惯、极端异常操作下的各类容错处理等等,并且开发人员对自己开发的程序必须要进行单元测试,不仅仅是ui上的鼠标点几下操作,连代码内部细节通过肉眼都要进行审查和优化,注释和文档与编码工作一样重要;在系统测试阶段,除了常规的集成测试、系统测试之外,还要加入边界、压力等测试。没有一个独立强大的第三方测试部门,又如何在最后一关保证软件的质量?
我见过国内的很多中小型软件公司,没有独立的测试部门,甚至专业测试人员1个都没有,最多也仅安排一个行政或美工、文员兼任,这种流水线所交付的软件,能达到软件产品的基本质量要求吗?我深度怀疑。更有甚者一个项目在客户环境里运行了1-2年,用户和数据量急剧膨胀,需求变更和追加源源不断,运维和开发部门最后发现,无论如何修复和重构更改,项目都难以为继,工作量越来越大,感觉还不如推倒重写,陷入两难境地。或者运维阶段后续的二次开发,接手者发现项目毫无注释和文档,交接往往没有或很短暂,维护起来异常痛苦,这些情况在国内绝对不是个例。系统分析、设计的缺陷一大堆,项目经理心知肚明也无可奈何,都是在为前期的短视、成本压缩买单吧。
短期见效、控制成本、重技术轻管理、重编码轻测试,这也就是国内很多it软件公司的通病症结所在,需要引起我们的重新反思。
第四课:项目团队协作,由一个项目管理部的领导主讲。讲师首先播放了一部影片,源自港片的一个片段:描述了团队小组的3个成员,借助相互紧密默契的配合,成功突破写字楼的安检防护系统,窃取到一机密设备,并成功逃脱完成任务的故事。这类故事我们在影视作品里已经看了很多了,并无新奇,如《碟中碟》系列、《加里森敢死队》、《速度与激情》、《十八罗汉》等等,远的如《西游记》、《水浒》,近的如当时热播的《越狱》其实都属于此类题材。