您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 其他 > 正文

程序员的困扰:如何在不影响产品质量的情况下,加速开发进程?

发表于:2018-03-20 作者:陈峻 来源:51CTO技术栈

本文将专注于并行测试、敏捷方法,恰当的文档化、产品质量的提升、以及快速推向市场等方面,希望对您有所帮助。

众所周知,“在不影响产品质量的情况下,努力实现卓越的产品生产速度”是各个企业经常要面对的挑战。

他们会持续寻找各种产品开发加速的方法,来保持速度和质量上的优势,达到真正领先于其他竞争对手的状态。

亚马逊每 11 秒钟会产生一次软件变更,且每天大约有 8000 次各种各样的变更。您一定能想象到这对于那些不经常进行变更的对手来说,会造成什么样的影响和压力。

值得注意的是:时常对产品予以变更,是一件既耗时又耗力的工作。如果能在小型开发团队中实现全面自动化,会让持续部署的成本和风险变得更低,达到更加“和谐”的状态。

随着项目规模的增大,代码库也会变得更复杂,而测试新的软件版本已成为了开发过程中的必经步骤。

质量保证人员需要运行一些具有针对性的测试程序,但传统的测试程序不但耗费时间并且会遗漏错误。所以,他们趋向选择一些自动化的测试方案。

通过专业知识和长期的调研,大部分企业都能够制定出各种战略,使得他们在减少错误和不影响产品质量的同时,更快地开拓出产品的市场格局。

通过快速的产品开发模式,企业可以花更少的时间向市场推出他们的产品(less Time To Market,TTM),获得完美产品的速度越快,其销售、主导地位、以及灵活性方面就越是占优。

企业总是期待能在需求管理上有所改进(收集那些尚未被设计的产品需求),因为明确、清晰的需求有助于简化设计与开发阶段的时间,从而使得他们能够更快地推销产品,并提高产品的质量。

虽然没有哪个系统能够做到尽善尽美,但是如果企业采用了“改进的需求管理”模式的 TTM 策略,则有助于在计划的发布日期内部署出高质量的产品。

在产品开发的过程中,各种意料之中和之外的障碍都会出现。这些障碍都会减缓我们的开发进程。

如何加快产品开发?通过有效地遵循下述六个步骤,您会在不影响产品质量的情况下,加速开发进程:

  • 明确的产品开发策略
  • 使用敏捷方法
  • 定期自动化测试
  • 正确的软件开发技术
  • 文档化
  • 删除无用的代码

明确的产品开发策略
 

制定产品开发策略是规划产品的第一步。策略的定义应基于充分理解了应用程序用途的基础上。

例如,如果您打算在圣诞节之前发布某个应用,则必须在圣诞节之前完成,而不是等到一月份才发布。

或是您想发布一个应用程序,以允许多辆列车在两个车站之间无缝接驳。您就必须非常小心地进行代码编写,因为软件的故障会导致列车相撞的事故发生。因此在该场景中,整理代码并扫清 Bug 远比按时交付重要得多。

由上可见,在着手开发产品之前,您需要策划一张周密地“路线图”,详细地说明所有必要的步骤,包括从产品迭代到产品发布的整个过程。

下面有三种主要策略可以应用到产品开发之中:

识别市场

在向市场发布任何产品之前,预研它是否会被用户所接受是非常重要的。您可以通过对社区论坛和社交媒体的搜索与调查,来给受众“搭脉”。

您可以从用户角度考虑如下问题:

  • 目标受众的需求是什么?只有很好地理解他们的需求,才能相应地创建出应用程序。
  • 新产品有什么好处?如果产品能解决用户目前面临的问题,那将是一个很好主意。

例如,一些用户想知道您的食材来源,以及您餐饮应用会给他们健康带来的好处。那么您就可以创建一个应用程序,以便用户可以收集到他们想要的所有信息。

  • 该产品是否适合当前的市场?深入的研究将告诉您,目前正在计划的产品是否已经过时,或者一旦它被发布后是否仍然会有市场份额。这样,您就可以节省资源和时间,只专注于人们真正想要的东西。
  • 您打算将哪些功能集成到您的产品中?通过研究,您会获知人们的喜好和兴趣。因此您只需要提供人们会用到的那些功能。如此,一旦您的最终产品面世,它将会既轻巧又有丰富的功能。

固定时间表


为产品发布设定一个时间表是非常重要的。它有助于将项目分配给不同的团队成员,并能决定在谁完成后,给谁进一步迭代的问题。

同时,为项目选择合适的团队也非常重要,您是否能及时地发布产品,将取决于团队中人员的经验和技能。

当然,团队的效率和协调对于开发过程的成功也很重要,它能保证您的产品会在市场竞争开始之前就已经按时发布了。

您必须根据产品的功能、用户的需求以及参与项目人员的技能,来决定正确的发布日期。

确定关键路径


确定关键路径能够为产品规划和推出规避各种挑战。您可以采取下面的方法:

线框或原型

原型设计是在设计产品时需要采取的重要步骤之一。在设计实际产品之前,我们必须先用线框来创建应用程序的粗略图。

应用程序中所有能够提升用户友好效果的元素都将被添加于此。这有助于设计师们深入地了解应用界面中需包含的功能。同时,这些线框图会起到将应用的理论思想与其最终结果相联系的作用。

产品规格要求

有关应用程序的所有细节都必须在产品规格中予以详细说明,包括:定价、设计功能、和市场规格等。

产品的文档部分必须清晰且详细,从而保证在不同的团队使用它时,每个人都能理解。产品规格中任何不明确的部分都可能会延迟产品的发布。

定义测试策略

产品开发团队必须制定既省时又有效的测试策略。他们可以选择 Selenium、Appium、Loadrunner、JMeter 等自动化测试的框架。这些框架都有助于开展并行测试、递归测试和性能测试。

雇用开发团队

选择产品开发团队是产品开发的另一个重要阶段。为了及时在市场上推出高质量的产品,您可能需要将产品的开发外包给专业的工程团队。该团队应当具备适当的技能和专业知识。

从长远来看,为团队添置熟练的开发人员对于公司的成本来说可能会非常昂贵。

在这种情况下,外包软件开发则是一个明智的策略。不但可以减少TTM,还能帮助您推出创新的产品,并有效地控制成本。

使用敏捷方法
 

项目管理团队要仔细研究开发的方式,以选择最适合手头项目的方法。

基于敏捷宣言(Agile Manifesto)的 12 个基本原则是最受欢迎的敏捷方法论之一。它将项目分成几个持续时间相同的迭代,分布在 2-8 周的时间段内完成。

利益干系人和客户对敏捷方法最感兴趣之处在于:他们能够看到产品的每个开发阶段,从而在整个项目中做出决定。

如果“面市时间”更受关注的话,那么敏捷方法能让您快速地生成软件产品的基本版本,随后再经历多次成功的迭代和测试。

通过敏捷方法,您可以创建一个最小的可行性产品(Minimum Viable Product,MVP)。它具有各种用户友好的功能,并适于发布到市场之上。

我们对于产品的每个阶段,都能够进行测试,添加更多功能,然后在得到客户反馈的基础上再次进行测试。

每个团队(设计师与开发者团队)将籍此实现并行工作,并相互检查工作质量。

与瀑布法则相比,敏捷方法更节省时间。因为在该方法中,任务不会出现重叠,每个任务只有在前一个任务完成之后才会开始。

定期自动化测试
 

我们必须定期进行软件测试,以确保开发周期能够按计划顺利地进行。每次在添加或修改新的源代码时,我们都必须进行测试,以使产品在所有支持平台上都能够正常地运行。

我们既可以采用自动化的测试,又可以采用手动测试程序。不过,手动测试的问题在于它会花费大量的时间、人力和财力。

另一方面,自动化测试套件能够大幅缩短测试的时间。过去需要几天甚至几周完成的测试,现在我们能够在几个小时内完成。

当然,时间并非唯一的优势。自动化测试还可以让您更为深入地进行测试,以改善和提高软件的质量。而手动测试则在冗长的测试中并不占优,它必须有人不断地观察测试结果。

同时,自动化测试套件可以让您更为深入地了解每个产品,分析代码存储器中的内容、数据表、文件内容和内部程序,从而检查产品是否能够按照预期的方式运行。

为了提高软件的准确性,您可以选择不同的自动化软件测试类型,包括:单元测试、功能测试、递归测试、集成测试、数据驱动测试和烟雾测试等。

只要添加了新的功能,您都应该执行递归测试,以检查代码和它的功能效果。

由于测试是自动化的,您可以在不增加时间的情况下进行多次反复测试,以深入了解代码功能,提高产品的运行速度,并最终发布出完美的产品。

并行测试是自动化测试套件的另一个主要优势。它允许您同时在多个操作系统和浏览器上运行多个测试用例,并最终减少了整体的测试时间。

正确的软件开发技术
 

市场上有着大量的软件开发技术可供选择。如果您没能为构建的产品选择正确的技术栈,那么您势必会遇到各种产品发布的障碍。

在测试软件的框架中,应用开发环境(Application Development Environment,ADE)在测试系统中扮演着至关重要的角色。

系统开发人员会花费大量时间在 ADE 上,因此选择支持多个平台的 ADE,并将它与测量/控制服务相集成是非常必要的。ADE 还有助于应用的展示和报告,并为您提供全球范围内培训和支持。

在为产品开发进行技术选择时,我们需要考虑的其他要点包括:

  • 密切关注最新的行业趋势。
  • 该技术是否适合于新产品的开发?
  • 了解技术适用的整个生命周期。
  • 软件开发技术是否开源?
  • 了解您为技术选择将支付的长期费用。
  • 产品可以被移植到其他平台吗?
  • 可运行性与多功能性的重要程度。
  • 您能从第三方代码中获利吗?

文档化
 

文档可以描述正在开发的产品架构与功能。它会涉及到参与软件开发项目的每一个人,包括:设计人员、开发人员、测试人员、营销人员、最终用户和利益干系人等。

文档化有助于提高软件的质量。由于软件团队在编写代码文档和代码审查的流程时,可能用到自己并不常用的实践方式,因此文档化是非常重要的。通过规范各种实践和产生各种正式的文档,您就能够跟踪项目的进度和方向。

清晰简明的文档编写方式能够加快开发的进程。同时,它有助于各个开发人员就如何在产品中实现特定功能而达成共识。

好的文档能够使得新进的开发人员更容易上手。这对于公司来说既具有时间效益,又有成本效益。籍此,他们完全可以跳过培训,直接投入到产品开发之中。

正确地记录错误的代码和常见问题的解答,都能够指导开发人员解决产品中出现的问题。

常见的文档类型主要包括:

设计文档


通过提供最终产品的外观细节,设计文档能使开发人员受益。它会描述软件的外观和行为等方面,并进行截图展示。这使得团队中的每个人都能够了解如何去构建产品,同时也有助于用户快速上手。

技术文档


良好的技术文档对于任何产品的成功都是至关重要的。它能详细地描述软件的体系结构和功能,并提供给开发人员、设计人员和质量分析人员来使用。

对于大型的项目来说,技术文档为可能出现的灾难提供了保障。它一般包含软件不同功能部分的预期结果、API 的调用和响应、产品在最终用户手中的最终外观、以及对于代码各个部分的详细描述。

用户文档


良好的用户文档可以帮助用户去了解代码是如何运行的。开发人员经常会想当然地认为软件使用人应当知道代码的运作机制,因此他们会无意识地在创建文档时跳过基本性的要点。

所以,在质量上,只要使用的是用户能够理解的语言,就是好的文档,反之则对用户毫无用处。

因此,在为普通用户创建文档时,我们要确保清晰易懂。同时,文档在布局上也应该有所注意,以便开发人员能够轻松地查看到所需的内容。 Wordpress 和 Bootstrap 都是优秀的文档范例。

营销文档


市场营销文档应当包含软件能给公司所带来的一个基本理念:投资回报率(ROI)。

可见,文档是一种很好的营销工具,既可以有利于维护良好的流程,又有助于提高软件的质量。

删除无用的代码
 

由于无用的代码可能引发各种问题,因此我们需要删除掉。

在大型项目中(特别是在一些复杂的项目中),由于文档会在多种人员角色手中流转,甚至是一些对该项目并不熟悉的开发人员,因此他们可能会对代码进行各种更改,甚至会“污染”代码,进而在无意中引入了各种 Bug。

任何维护代码的工作都是既耗时又耗力的。您必须遍历所有的代码,而代码库中的各种无用代码也经常会相互混淆。

由于无用的代码多半不可能再被使用到,因此您与其花费时间和精力维护它们,不如直接将它们删除。

同时,从事代码工作的团队成员必须明确知晓哪些代码是有用的,哪些是无用的。同样,代码的清理可以加速开发的进程,并提高软件的质量。

结论
 

各个公司都专注于缩短其产品的面市时间。为了扫除产品延迟发布所带来的风险,我们要重点关注:并行测试、敏捷方法、适当的文档和正确的技术。只要开发团队有足够的资源,项目就能成功启动。

另外,依靠 TTM 策略来获得营销和竞争优势也是产品和项目本身非常重要的。在注重速度的同时,请您确保整个开发过程中的产品质量。

陈峻(Julian Chen) ,有着十多年的 IT 项目、企业运维和风险管控的从业经验,日常工作深入系统安全各个环节。作为 CISSP 证书持有者,他在各专业杂志上发表了《IT运维的“六脉神剑”》、《律师事务所IT服务管理》 和《股票交易网络系统中的安全设计》等论文。他还持续分享并更新《廉环话》系列博文和各种外文技术翻译,曾被(ISC)2 评为第九届亚太区信息安全领袖成就表彰计划的“信息安全践行者”和 Future-S 中国 IT 治理和管理的 2015 年度践行人物。

 相关文章