谈软件公司的技术管理
3. 组织
以项目组作为一个描述单位。
A.系统分析员,通常可以担任项目经理,全面对该项目的质量和进度负责,整个项目的组织者和直接领导者。是用户需求调查的主要负责人,与用户沟通的主要协调人。与系统设计师组成系统分析小组,执笔起草用户需求报告(按道理这份报告应该用户撰写,但通常情况下都要软件开发商代劳)、系统可行性分析报告、系统需求说明和设计任务书等,制定系统开发计划,制定系统测试方案,制定系统试运行计划。
B.系统设计师(原来习惯称高级程序员),参加系统分析小组,参加用户需求调查,分别着重于服务器端或客户端或中间层协助系统分析员进行可行性分析,协助系统分析员完成各项系统分析报告。用户需求报告和需求说明获得用户评审通过后,分别着重于服务器端或客户端或中间层制定详细的设计任务书,制定程序设计风格,制定软件界面风格,指定参考资料,确定可引用的软件资源,指导程序员的工作。
C.D.程序员,在系统设计师的直接指导下开展工作,严格按照设计任务书的要求进行设计,不许追求个人风格,强调沟通与协作,培养务实求精的工作作风。
E.档案控制员,可以一个项目配置一个,同时兼做部分测试员的工作,也可以几个项目配置一个专职的档案控制员。档案控制员负责保管好项目每一个阶段的文档,编好号,建好索引,方便查阅,又要保证档案的完整、安全和保密。另一个职责是做好软件的版本控制工作,每次正式发布的软件或阶段性的软件程序员必须将源代码和相关的说明书交给档案控制员统一打包、编译、建档。保留好软件的每一个版本,每一个版本升级的详细不同都要有详细记载。重点文档要重点保护,如用户需求报告和需求变化的阶段记载,项目进展过程中的每次会议纪要,阶段性的测试报告,每次评审的问题清单,开发过程中遇到的主要技术障碍和解决途径等。
F.系统测试员,直接接受项目经理的指导,严格执行项目经理制定的测试方案,有条件时系统测试员可以深入用户实际工作环境,了解用户的实际工作情况,收集来源于实际的测试试例,做好测试记录,做好测试报告,做好与程序员和系统设计师的沟通,跟踪问题的解决。测试报告和测试卡要交档案控制员归档。
公司成立技术委员会,由主管技术的副总或总工程师、技术部经理、各项目负责人等组成,确定公司技术工作的发展方向,参与研究公司的产品发展方向,研究各项目组的协调问题,重大项目的联合公关,研究人员配置,软件配置和管理,研究项目间的资源共享问题。
4. 人力资源管理
人是最为宝贵的财富。软件行业就更是这样。使用人必须先信任人,培养人,给他一个发展的空间,让他看到一个希望,让他感到工作的过程同时也是一个自身价值升值的过程。需要建立一个祥和、友善、互助、向上的企业文化氛围。相互间的技术保密、妒忌是软件公司的大忌。首先,技术管理人员要有一个平常心,不要太多被名利所左右,公司先解决好技术管理层的问题,公司制定提升和奖励政策如何,也会在这方面起一个引导作用。工作的安排要合适,任务要明确,多协作,少冲突,避免在同一领域展开员工间不必要的竞争,需要多人完成一项工作时要新老结合,高低结合。每周安排一个固定的时间举办技术沙龙,互相交流学习。
人的提升有多种途径,当官只是微不足道的一种狭义的提升,这种提升对热衷于技术的人并不很重要,在用人的过程中,根据每个人不同的喜好和性格设计不同的发展路径,必要的时候可以和当事人交流,将公司对他的期望和他本人的努力统一起来。人的"提升"感重在于自身价值在集体中被承认,被认同,被同仁接受。技术路线的升级是一条路,从程序员到系统设计师再到系统分析员、项目经理,性格外向的又可转去负责一个行业的市场和客户服务,做事认真仔细的可以向项目测试师培养,负责大项目的总体测试,甚至担任类似"总QC"的角色,在国内普遍重开发轻测试,但在微软等一些大公司,能做到一定级别的测试师也是令人向往的,这需要公司文化的引导。还可以让程序员发展成为公司内不同领域的"专家",他们也会自觉欣慰。