本文要点
生产高质量的软件对持续软件交付和优化开发流程的支持来说必不可少。
专门针对培训和基础设施(硬件和软件)提高年度资本投资对于促进高质量软件的开发是必需的。
采用与组织业务模型一致的轻量级流程和促进开发人员的工作效率是一个关键的环境决策。
高层管理的承诺、组织文化和有效的开发人员的贡献是高质量软件开发的区别因素。
摘要
软件质量可达到的水平反映了一个组织的经营决策。有许多因素影响这个决策,包括开发、构建和测试环境的有效性,资源和相关技能、诚信、积极性和经验水平、商业协议,以及采用的流程和产能工具。
开发、构建和测试环境的有效性,决定了测试可达到的效率和广度。让测试和生产环境非常接近,将更有可能发现潜在的和边缘的问题,否则就要在生产环境中直接面对了。
选择的流程应在保证可重复性的同时,能够暴露和规避风险。流程不应该笨重,也不应该表里不一。流程应进行定期审查,以确保他们是最优的并为组织提供了价值。
工作组织和计划的产能工具应该能够提高效率、支持透明度和汇总报告。选择的工具应该需要最小化团队管理费用。此外,这些工具感知到的价值不应该掩盖生产高质量软件所需的努力和举措。
经验、技术能力和自我意识往往是与软件开发效率的相关属性。有效的开发人员在生产高质量的软件中具有重要的作用。他们的领域知识,对细节的关注和积极的测试来自于可贵的实践经验。在令人兴奋和具有挑战性的软件开发阶段,诚信和自我激励是维持一致和高水平生产力必须的特质。这些因素,以及适当的基础设施和一套轻量级流程,是不断生产高质量软件的前提条件。
有效的开发人员不是不可能犯错的,而是他们的设计和实现都经过了深思熟虑,确保了“内在的”质量。从而减少了与质量相关的意外的可能性。有效的开发依赖于演绎推理技能和关键分析,而不是教条主义或对软件设计、实现和测试阶段的肤浅理解。
认识到有效的人员的作用和贡献(对于生产高质量的软件),同时也不要看轻对轻量级流程以及他人贡献的需要。有很多文章描述了软件开发流程的重要性和他人在软件价值链的贡献。
本文将重点阐述在软件开发环境中显露的这些方面,在此路线图的开发和/或定制/固定出价的实施都是规范的。
因此,本文介绍了:
持续交付和最优的部署流程对软件价值链的意义。
高层管理承诺和资本投入对生产高质量软件是必需的。
有效的开发人员表现出的可观察的行为特征和模式,其促进了“内在的”软件质量。
持续交付和部署流程
持续交付带来可持续增量开发高质量的为上线做好准备的软件。这个工作流程提升了特性实现期间的敏捷性,对于维持重要客户和干系人的经验反馈很有必要。然而,必须警惕的是,不要由于实现了方便快捷的交付捷径,反而令技术债有增无减。有效的代码审查、统一使用一个静态代码分析工具和有计划的代码重构会防止增加技术债务。
持续交付流程
持续生产高质量的软件和应用自动化到构建和测试环境中对持续交付有重大的意义。必须打开软件开发、构建和发布团队之间的沟通渠道,并必须要相互尊重。尽管开发人员尽了最大的努力,针对副本进行修改,并在提交资源库之前定期同步主代码分支,但无意的“糟糕的构建”的情况仍然不免会发生。应立足未来,及时提出解决方案来处理这种情况。
当做到生产高质量的软件时,自然而然想到的下一步就是需要把功能和解决方案从内部生态系统环境部署到最终用户环境下了,那里才是实现用户价值的地方。参考一个最优的软件部署流程:
在软件部署流程中有效地利用自动化工具。
最小化员工的行为和互动,让他们不必再从代码库把代码拿出来,转换为最终用户使用的二进制形式。
生产高质量软件是持续交付和优化部署流程的前提。
旅程
软件组织不断寻求改进软件质量的途径。高质量软件是另一个带来竞争优势的产品价值主张。然而,可持续地生产高质量软件即没有银弹也没有快速解决的办法。相反,应采用的策略是提升敏捷度,进行里程碑跟踪和有计划地规避风险。
必须形成一组适当的可持续地生产高质量软件的核心条件和因素。以下承诺和投入的水平决定了整个旅途的时间和会遭遇到的痛处:
组织文化
基础设施
流程和工具
有效的开发人员
高层管理生产和交付高质量软件的支持必须公之与众,并设立为第一价值观。和工作流程的优化与持续的软件交付流程和部署流程相关的培训及基础设施的改善,必须有专门的年度资本投资。组织文化应该支持安全的环境,鼓励建设性的反馈,透明度、合作和“跳出条条框框”的思考。
基础设施支出应被用于硬件和软件的提升。投资于培训,应该优先考虑确保健壮性和可扩展性的虚拟化技术,以及持续集成工具和真实世界的数据模型。基础设施的规划审查,应该考虑创建和维护测试环境的工作量和成本,该环境应尽可能贴近于生产环境。显然,从成本上来说完全克隆一个生产环境可能不现实,但是越贴近就会使测试广度越大。
培训投资应该超越产品课程的范畴,包括实践学习的机会。开发人员应该接触软件价值链中的活动,以获得广泛的基础知识。此外,应该给软件开发人员机会,去观察最终用户是如何通过产品功能的使用创造商业价值的。与客户一起讨论如何使用产品特性来应对现实世界的使用情况,从而促进软件开发人员的成长。
采用的流程应该规避风险,保证可重复性。流程不应太多层次,也不应表里不一。流程也应该使管理方面灵活,有地方性的团队。流程应定期审查以确保它们是最优的,并为组织提供价值。
工作组织和计划产能工具应提高效率、支持透明和汇总报告。选择的工具应最小化所需的团队管理费用。来自这些工具的感知价值不应该掩盖生产和交付高质量软件所做的各种努力和行为。
这些因素和条件是实现高质量软件的重要手段。然而,有效的软件开发人员的贡献是确保“内在质量”的其中一个主要手段。
有效的软件开发人员
有许多著名的软件开发流程和方法,它们能促进高质量的功能和解决方案的生产和交付。选择的流程,结合知识渊博的QA人员,自动化的单元测试和回归测试为帮助交付高质量的软件提供了一个强大的武器。
然而,有效的软件开发人员的角色应予以检查。在某些方面,他们的作用是可比的,他们直接在前线决定了“内在的”质量。一个有效的软件开发人员使用技术知识和商业知识,不断创造优质的功能和解决方案,为客户提供价值。
有效的开发人员为了生产高质量软件作出的贡献,有时会令价值链中的其他活动的成功和失败黯然失色。然而,他们在软件价值链中的贡献不应被视为理所当然。
组织结构各有不同,但是有效的软件开发人员的影响范围往往会延伸到以下领域:
有效的软件开发领域的影响
基于第一手的观察,有效的软件开发人员可按以下领域的熟练度和/或实际应用水平予以区分:
领域和系统知识
设计和大局思考
业务知识
价值工程
个人工具箱
不断的学习
领域和系统知识
综合的领域知识是来自于学习和实践应用的循环往复,这些学习和实践的结果可能成功了,也可能失败了。领域知识是软件开发的核心,它确保需求和实现细节一致。它也使软件开发人员,有能力洞察关于软件实施相关的风险。
没有认识到实施的风险会导致返工和客户的不满。实施风险的早期识别和社会化,使企业有机会参与到前期风险规避的检查之中。这对于进入固定投标商业合作的组织来说特别重要。
设计和实现健壮和可扩展的解决方案需要系统的知识。有效的开发人员都知道以下系统资源对其实现的功能和解决方案的影响:
CPU的消耗。
内存的使用。
磁盘活动。
网络带宽的消耗。
在功能测试期间,有效的开发人员会监控系统以保证系统资源的使用与推荐的基准保持一致。领域和系统的知识,也有利于早期发现问题。
设计和大局思考
设计思维有助于从消费者的角度来看功能和解决方案的开发。一个有效的开发人员是不会在不参与某种形式的设计思维的情况下就开始编码的。设计思想包括以下:
在“识别潜在的解决方案”阶段进行的宏观思考。在这个阶段,主要专注于针对解决问题的潜在解决方案集思广益不同的想法。然而,在这个阶段中,有效的开发人员还会延伸他/她的思维过程以确保提出的解决方案是:
可扩展的
健壮的
可维护的
可扩展的
一个整体的思维过程,有利于周密全面的实现。因此,领域和系统知识的关键是有效的设计和大局思考。
业务知识
有效的开发人员对组织结构、战略和行业地位有一定的认识。他恪守以下组织行为:
尊重组织角色。
以有意义的方式合作。
从事知识传递和透明化。
预算意识。
有效的软件开发人员以商业导向的方式方式开发和理解软件价值链的组成,包括主要活动和支持性活动。他能认识到,两者都是组织成功的需要。在合作期间,他有效沟通并进行积极的倾听。他寻求对提供客户价值的最佳方式达成共识。
从事知识传递和透明化的实践能使组织和有效的开发人员双方都从中获益。有效的开发人员了解,组织担心知识和经验来源单一相关的风险。因此,为了减轻这些问题,有效的开发人员参与头脑风暴会议,社会化实现的关注点或突破,确保在代码评审中理解这些上下文。这些行为促使:
工作与生活之间健康平衡。
开发人员缺席时软件价值链流动不受限制。
各种功能的实现团队都有机会和流动性。
当有多个设计和实现的选择时,有效的开发人员选择那些提供客户价值和对组织风险最小的。
有效的开发人员有意识地识别预算约束,知道没有无限的资金来源。有效的软件开发人员非常积极地参与交流,不管预算拨款的来源,无论来自于企业的研发资金还是固定投标商业协议。
价值工程
新的和增强的产品功能往往来自有远见的思维、市场指标、客户的反馈和整体公司战略。此外,产品的增加通常是战略计划的一部分,关系到预计的研发投资和预期的收益。
这种方法可以确保提出新的和增强功能实现时,提供增加吸引更广泛客户基础的产品价值主张。当计划新的功能和增强功能时,需要在前期进行相关的收益和风险评估。为确保实现成本和产品差异化的价值之间的平衡,这种评估是必要的。
有效的软件开发人员实践价值工程,尊重可能与棕地开发相关的复杂性。因此,设计和实现细节依赖于对需求清楚的理解。有效的开发人员不会出现“镀金”【译者注:即增加超出需求的特性】或自我增加范围。他懂得付出努力的重要意义,确保真正需要的功能的“内在”质量。相反,有效的开发人员会社会化他的思想,使适当的价值主张的审核、预算和预测的发布时间能影响到评估。
个人工具箱
有效的软件开发人员能熟练使用商业诊断工具(即调试器、内存泄漏检测、任务分析工具等)。然而,他明白,需要关注于更小的、更集中的诊断足迹,便于及时的原因分析和随后的解决。因此,有效的开发人员有一套个人的诊断工具,调查和分析特定类型的错误时予以使用(比如Heisenbugs)。
有效的软件开发人员的工具箱还包含可重用的代码片段,以及已被证明可靠的类库。在实现相似上下文的领域问题时,这些东西可用来降低相关实现的风险。有效的开发人员不断扩展和扩充自己的工具箱,确保为未来的开发机会和调试场景做好准备。
不断的学习
有效的软件开发人员了解将不断学习作为一种手段,通过改进技术和软技能提高专业价值的意义。他理解的自满情绪的影响,它会阻碍内部和外部生长机会。
此外,上线时间的考虑,往往限制了精通一门技术的时间。因此,抽身于不断地学习使新知识得以实际应用成为可能。针对多样化的工作场合设计和实现活动,提升准备能力,使自己能有更多机会大展拳脚。
软件组织,有促进持续学习的职责。然而,有效的开发人员不会单纯地依赖雇主。他/她会在一个或多个在线软件社区保持活跃。此外,有效的软件开发人员定期进行自学和/或为开源项目做贡献。
结论
高质量的软件提供商业价值,对持续软件交付和维持最优的部署流程是必要的。组织文化、对质量和采用流程的承诺水平会促进生产和交付高质量的软件。然而,有效的软件开发人员所作出的贡献,是生产高质量的软件的一个关键区别。有效的软件开发人员不是谚语中所谓的“水上飞”,但是,他们的合作精神,对软件价值链中其他角色的尊重,创新,恪守不断学习和生产高质量的软件,都是不可否认的。
有效的软件开发人员更愿意在这么一种组织中茁壮成长,这种组织有可行的产品策略,促进业务敏捷的组织结构,并公开承认、评价和奖励他们的贡献。这些组织也提供合适的工具,构建、开发和测试环境,采用轻量级流程,鼓励持续学习并提供成长的机会。
软件组织必须积极地采取措施去招募和留住有效开发人员,以便不断生产高质量的软件。虽然,持续交付高质量的软件需要团队的协作,但有效的开发人员发挥着核心的作用,应该承认他们的贡献。 |