小型软件公司如何建立可靠的系统

wmm1977 2013-12-17 04:35:54
刚刚拜读了汉密尔顿先生的《软件开发建立可靠的系统》一书,心中涌起千言万语,不吐不快。从业已经十五年,从接触学习软件开发至今已经有十八个年头,从当年的毛头小伙慢慢的变成了中年大叔。汉密尔顿先生在书中介绍了如何建立可靠的系统,我深有感触。相对而言,美国的企业在软件开发的领域已经走的很高了,中美两国对于小型公司的理解也不尽相同。国内的软件公司两级分化现象十分严重,即:强者越强、弱者越弱。上百人的软件公司,架构师、开发经理、技术经理、工具经理、数据库管理员、各种语言开发人员、测试人员都有,辅助于各类执行标准的管理,靠制度确保系统的质量,一般来说,除了时间超期和超过成本预算的问题外,一般系统的稳定性和运行质量还是蛮高的,最终因为交付物运行质量好和客户达成需求的和解以取得项目的验收,我这里说的需求的和解是指系统并没有达到建设初期的预期,而客户看到了你的努力而逐步放弃或修改了最初的预期,当然这个例子的隐含面也包括客户急剧膨胀的需求被合理压缩。但是对于在大型公司以外的软件企业来说,一个公司几个人或者一个项目几个人的现状比比皆是,如何在现有资源下,用制度的手段确保系统的质量,达到大企业软件交付的能力呢?
结合汉密尔顿先生书中的方法,通过人员管理和项目过程管理两个方面论述小型软件企业在建立可靠的系统的最低标准。
人员管理:
1、对技术人员实行能力跟踪,建立编程自评样本,将编程能力分为0-5级,分别对应0级-没有能力、1级-初学者、2级-中级、3级-熟练、4级-专家、5级-大师。技术人员随时可以根据自评样本评价,并将评价结果交给开发经理归档,这是技术人员档案管理必须做的工作。外协人员的自评也纳入技术人员档案管理。注:能力特指具体技能能力,不是该人员技能的综合衡量,例如:甲C++能力3级,JAVA能力0级。
2、对行为价值进行评估,从主动性、贡献、灵活性、尊重四个方面评估技术人员的行为价值,建立评估样本,评估结果纳入技术人员管理档案。
3、预算目前人员工资费用的20%做为新技能学习费用并且把它花完。我们不能招聘所有我们认为优秀的技术人员为我们全职工作,但是我们可以把已有的技术人员培养成优秀的技术人员,聘请优秀的技术人员作为已有技术人员的导师是一个低成本、高收益的可靠方案。另外,专业技术的学习,有经验的导师指导往往比自己摸索学习进步更快。
项目管理:
1、严格按照需求分析、系统设计、测试计划三个方面准备开发工作。
2、在编码过程中,严格按照需求检查、设计检查、代码检查三个方面做好检查工作。
3、严格按照单元测试、内部测试和外部测试验证系统的可靠性。
需求分析和定义:这是每个软件项目的开始阶段。需求对软件开发项目来说有许多用处。首先,需求定义了软件将要做什么。软件需求是在项目中将要完成的所有设计、代码编写和测试的基础。一般来说,需求开始时是作为对软件功能的较为高级的总体描述,并且被软件用户所理解。通过性能、观察、感觉和其他标准对需求做进一步的定义。每个顶级需求都被指定到应用系统中的一个或多个子系统上。子系统级的需求被进一步提炼并分配到独立的模块上。就像这个过程所指出的那样,需求定义不仅仅是发生在开发项目起始阶段的一个过程,而是一个不断进行的过程。严格记录需求的产生、分解、提炼、定义以及消亡的过程是做可靠系统的第一步。
系统设计:系统设计是软件架构师发挥重要作用的阶段,架构师得到需求阶段的工作成果,其中描述了软件将要做什么,并定义了它应当怎么做。这一步是转换需求与系统的关键,是自然语言和计算机语言的分水岭,在这之前,需求的定义是使用自然语言定义的,这以后,是使用计算机语言定义的。例如需求是“你送我去机场,请在9:30以前到”,系统设计后是“我开着单位的福特牌小汽车走二环送你去xx机场”。需求定义的是目标和要求,设计定义的是实现这一目标采用的具体方法。
测试计划设计:设计软件测试计划实际是系统设计的一部分,但是由于它常常被忽视,所以我们将其标注为一个独立的阶段。许多伟大的软件设计最终不成功,就是因为没有人考虑如何去测试这个系统。测试计划就是描述用什么方法去测试这个系统。它包括测试的方法和通过的标准定义。
需求检查:开发人员提交已经分配到模块的需求,确认可以实现的需求要求。
设计检查:开发人员提交模块的详细设计,包括流程图、调用图形树、类等级和用户接口模块。
代码检查:由架构师或高级开发人员作为代码检查的推动人,成立代码检查小组,推动人接收代码并和每个人一起检查一遍代码。这使开发人员腾出时间来集中精力倾听并把检查人员所做的评论存档。注:代码检查工作不仅仅检查代码,还有需求和设计。对应检查不通过的部分需要修改并对该部分重新检查直到通过为止。注:所有代码都要检查,无论谁编写的,代码检查不分级别。
单元测试:单元测试是软件开发人员的职责,单元测试是对通常一个人开发的单个软件模块进行的测试,在目前大多数没有执行好测试工作的公司来说,单元测试就是让系统运行起来,没有出现异常信息,实际上单元测试是测试每一行代码都得到执行,目前最有效的办法就是运行时的断点截图,每一个方法的入口和出口以及内部的每一个分支,都必须有断点截图,确保系统代码全部通过测试。
内部测试:是指应用系统向外发布之前进行的公司内部测试,也叫阿尔法测试。通常小公司没有专职的测试人员,内部测试一般由开发人员或者文员等其他部门员工按照测试计划测试即可。最终对测试结果归档。
外部测试:是指软件在正式发布之前由外部用户完成的测试,也叫贝塔测试。一般外部测试是邀请用户单位成员参与测试,按照功能列表和操作手册所做的随机测试,俗称冒烟测试。即:真实使用者测试。
软件开发过程中的质量不是一朝一夕可以改变的,但是每一个细节的坚持,优秀开发人员的培养,是建立可靠系统的基石。系统质量,往往是在每一次专业人员的退让和妥协中滑入泥潭,慢慢的,这些技术人员都落入了泥潭,带着这家公司一起消失在了泥潭中,留下客户,对着泥潭发呆。
...全文
219 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
thinkingforever 2013-12-17
  • 打赏
  • 举报
回复
站在老板角度考虑考虑吧
帝瓜 2013-12-17
  • 打赏
  • 举报
回复
SweetTimeRose 2013-12-17
  • 打赏
  • 举报
回复

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧