《Qt:成功项目开发的最佳实践白皮书(2021)(12页).pdf》由会员分享,可在线阅读,更多相关《Qt:成功项目开发的最佳实践白皮书(2021)(12页).pdf(12页珍藏版)》请在三个皮匠报告上搜索。
1、成功项目开发的最佳实践白皮书在本篇白皮书中,Qt 专业服务团队分享了多年来积累的最佳实践。我们希望这些实践能够在项目开发项目时助您做出正确决策,保持组织架构的灵活性和有效性,避免产生不必要的时间和精力的损耗。尽管本白皮书中的许多示例都基于 Qt 框架,但这些最佳实践也适用于其他软件项目。成功项目开发的最佳实践2目录简介 3错误的代价 4正确理解需求 5深谋远虑的研发 6考虑周全的硬件选型 7培训先行 8实施持续集成(CI)8团队步调一致 9避免重新发明轮子 10性能优化和重构 11结论 12成功项目开发的最佳实践3简介即使经过精心规划的项目要成功发布产品也并不容易。这句话尤其适用于软件开发项目
2、,因为它可能会集了各种不合理的需求、不完备的技术组合以及许多其他挑战于一身。因此,采用最佳实践对于确保高质量的快速交付至关重要。如果能持续贯彻,这些最佳实践能让开发者和开发流程更灵活,从而产生可扩展的、坚若磐石的代码,并帮助公司避免代价高昂的错误和延迟。成功项目开发的最佳实践4错误的代价您一定听过这句话:错误的代价随着项目的执行呈指数级增长,甚至是高达百倍的增加1。某个 NASA 团队2分析了航天飞机、军用飞机和通信卫星等三个开发项目后也得出了同样的结论。他们使用了三种不同的方法【自下而上的成本(bottom-up cost)、总成本细分(total-cost breakdown)和自上而下的
3、假设(top-down hypothetical)】来估算在项目生命周期中不同阶段时刻发现错误后纠正的成本,所有这三种方法都揭示了成本增长与项目阶段之间的明显关系 有些分析结果显示错误纠正的代价甚至呈指数级增长。三种不同分析方法展示了错误纠正的延后对其成本的影响这些结果也证明了尽早进行错误排查是关键。上述研究中还遗漏了非常重要的一点,即这不仅影响研发进度,也会导致产品延迟上市,可能促使客户去寻求其他解决方案,从而损害公司整体财务业绩。1 Boehm,B.W.(1981).Software Engineering Economics,Prentice-Hall,Englewood Cliffs,
4、NJ.2 Stecklein,J.M.,Dabney,J.,Brandon,D,Haskins,B.,Lowell,R.,&Moroney,G.(2004).Error Cost Escalation Throughthe Project Life Cycle.Report JSC-CN-8435(Houston,TX:NASA Johnson Space Center,2004).180.00135.0090.0045.000.00 相对成本180.00135.0090.0045.000.00需求 设计 构建 测试 运营自下而上的成本总成本细分自上而下的假设成功项目开发的最佳实践5正确理解需
5、求 需求的数量和质量都会直接影响产品的架构。反之,这也会影响实现成本以及错误纠正的成本。正如我们一次又一次看到的,在设计之初改正错误要比为一开始就不该存在的问题编写变通方案要省钱得多。在确定需求时(不管用敏捷、瀑布或其他开发方法),确保将要开发的系统满足可用性预期至关重要。我们建议您首先分析并详细记录最终用户 和市场的需求。然后,建议构建多个用例来描述用户在新系统中每个可能的举动。如果您正在使用敏捷或其他迭代的项目管理方法,您可能需要用早期原型设计来验证所有假设。这也将确保您能在硬件限制范围内满足产品需求。如果手头没有硬件,您也可以利用 Qt 中的嵌入式设备模拟器在台式机上完成初始开发。无论您
6、采用何种开发模式,我们都建议您多构建几套原型;迭代、细化是成功的重要组成部分。QML可以轻松地创建模型、原型。需要提醒的是,原型代码很少能达到成品所需的高质量代码框架。您的原型可能需要几轮迭代。这样,您就可以在流程中创建可靠的、可复用的组件,如果您遵循既定的编码实践,您就可能重复利用这些组件。成功项目开发的最佳实践6深谋远虑的研发如果假定代码只需运行在确定的环境中那就太简单了。因为代码往往会存在很长时间,而且几乎总在变化。几年后,人们可能希望您的应用运行在手机、平板电脑或其他设备上。我们建议从一开始就假设您的应用需要运行在多种设备上,这意味着代码需要处理不同的屏幕尺寸、分辨率和高宽比。应对这一
7、挑战的最佳方法是分开业务逻辑和表示层。这样,以后重写 UI 时就不会影响程序功能。例如,如果您需要将桌面应用迁移到触摸屏设备时,这会非常有价值。这种改变可能还需要改变 UI 设计方法(如从 Qt Widgets 迁移到QML),如果业务逻辑被混合到 UI 层中,迁移任务会更加复杂。有关如何兼顾 UI 的可伸缩性,开发经得起未来考研的应用程序,请参阅我们关于可扩展性的在线文档。另一个不错的做法是创建一致的外观和体验,即使在引入新平台时也保持这种外观体验。一致的视觉标识有助于为您的产品组合创建并保持品牌认知度。然而在现实中,许多公司经常在不同设备上发布看起来完全不同的应用程序。您还可以定制视觉元素
8、,甚至可以从第三方设计工具(如Photoshop、Maya、MODO 和 Blender)导入设计。有关如何使用 Qt 进行 UI 设计,请参阅有关 GUI 概念的在线文档,或联系我们的开发团队和产品经理。成功项目开发的最佳实践7考虑周全的硬件选型适当的硬件评估至关重要,许多项目因为缺少这一步骤而失败。开发者在嵌入式设备就绪前,通常在台式机或软件模拟器上开始开发,这完全行得通。但是,尽早在真实硬件或开发板上运行应用程序也非常重要,它能验证您的硬件是否能正常运行您所设想的内容。(像 Boot2Qt 这样的软件栈可以帮助实现使用一个预编译模板来启动开发板)。如果使用开发板,请选择尽可能接近最终目标
9、硬件的开发板,以便正确评估成本、性能和资源消耗。如果在开发过程中忽略尽早进行硬件评估的这步,最终将会成为导致项目开发成本超支、量产推迟和应用程序卡顿的主要原因之一。例如,如果您出于成本考虑选择了低功耗处理器,那就不要期望应用可以包含大量精美动画或高质量图形。如果有足够的时间和精力,您总能从功能不足的芯片中获得更多的性能,但总有很多限制。如果平台内存限制是一个大问题,Qt Lite 裁剪工具可让您修剪非必要的功能来制作较小版本的可执行文件,允许您使用较小的闪存和较小的最初化 RAM 占用空间。这通常可以降低物料清单(BOM)成本。关于设计低端硬件的其他技巧,请参阅 Gofore 的博文。Qt 的
10、优势之一在于其多平台支持,因此找到合适的硬件不会有问题。查看每个 Qt 版本支持的设备和配置列表。我们对不断进化、集成度越来越高的硬件进行了性能基准测试,并可以建议哪种硬件最适合您项目,以免您做昂贵的实验。如果您没有看到感兴趣的平台和/或配置,请与我们联系。我们对于许多未在列的硬件平台的部署和维护也拥有丰富的经验。成功项目开发的最佳实践8培训先行Qt 是一个多功能、灵活的开发平台,提供了许多方案来解决各种问题。正确权衡每种方法的利弊对于避免项目错误的开始至关重要。这就是我们建议在开始任何重大项目前,进行 Qt 基础知识最低限度培训的原因。学习的方式也多种多样:Qt 培训 量身定制、卓有有效 社
11、区资源,如论坛和博客 高质量的文档和丰富的示例 自学资料实施持续集成(CI)持续集成(CI)是一种将所有开发者的工作成果尽早合并到共享主干代码库的做法。这可以防止有时被称为“集成地狱”的集成问题。无论您每天集成一次还是多次,这个概念都是相同的,从长远来看可以最大限度地缩短开发时间和成本。如果您的应用程序有任何与性能相关的要求(例如快速启动或上下文切换时间限制),建议您针对目标硬件进行持续测试,这样可以更快发现并改正影响性能的问题。您可能需要考虑使用 Qt Test,这是一个用于对基于Qt 的应用程序和库进行单元测试的框架。它提供了单元测试框架中常见的所有功能,以及用于测试图形用户界面的扩展,从
12、而在集成过程中为您省去许多麻烦。您可在我们的网站上找到相关的教程。通过在构建过程中添加全面的单元测试框架,您可以阻止质量低劣的提交,并定期运行详尽的配置测试。如果您以清晰、简洁和用户友好的方式进一步向测试开发者传达测试结果,您将创建一个高效且响应迅速的团队,并使您在持续集成方面的投资收益最大化。成功项目开发的最佳实践9团队步调一致无论您的工程团队多有天赋,在分布式开发项目中我们看到的最大问题之一是缺乏一致性。除非不同的团队之间能高效持续地沟通,否则您的应用程序可能会遇到 API 不匹配、边界条件定义不当、模块使用不当等问题。我们已经看到很多类似的情况,在一个大型项目中,不同的团队使用不同的方法
13、、设备和工具在自己的模块中处理大型项目的各个部分。经过几个月的独立开发后,当他们试图合并代码时,却发现一切并没有按计划运行。为了避免这种情况的发生,建议使用相同的工具链和框架来统一分布式开发团队 使用 Qt 很容易实现这些 尽可能地跨工具和功能重用代码。一种有效的方法是基于 Qt 创建自己定义的 SDK,来确保团队成员和项目之间的一致性。成功项目开发的最佳实践10避免重新发明轮子我们经常看到开发者从零开始写代码。通常,即使有现成的外部解决方案可以解决软件开发问题,开发者和组织都喜欢内部开发的解决方案。这样做的代价很大,特别和许多 Qt 现成的、已测试的技术组件相比。您还可以充分利用整个 Qt
14、社区的专业知识。即使写新代码时,也要确保能使用 Qt 的所有工具。例如,Qt 具有非常强大的跨平台抽象层,因此不需要编写特定平台、处理器或操作系统的代码。如果您正在使用“#ifdef OS_LINUX”这样的方式来写代码,那么某些内容可能已经出错了。如果您正在为多个包含不同硬件、驱动程序或操作系统的目标设备写代码(如声音、蓝牙或线程原语),该怎么做呢?Qt 通常提供一个抽象层,可以使用插件机制添加特定平台的实现方案,然后通过统一的 Qt API 调用。这简化了对新设备(移动、嵌入式)的支持,并且无需模拟器环境即可在桌面上进行开发。您需要的功能可能已经存在,它们可以节省您的开发时间和精力。如果
15、Qt 还没有您需要的功能,请务必查看 Qt 路线图 它可能即将发布,您可以在当前的项目中使用。成功项目开发的最佳实践11性能优化和重构每当您试图决定优化时机是否合适时,请确保首先评估对整个项目的影响。我们的经验是在大多数情况下先设计然后写代码,最后对代码进行分析/基准测试,以查看应该优化哪些部分。在开发阶段,遵循最佳实践和大量测试,我们倡导合理(不昂贵或耗时)的性能考量。有鉴于此,不要花时间分析和优化最终可能不需要的代码。确保您具有功能性的工作基础,并保存优化迭代以供日后使用。一般来说,我们建议优化放到最后。但是,如果您在一个关注启动时间的行业(例如汽车)工作,您可能需要在项目开始时特别注意启
16、动时间优化,因为快速启动系统需要适当的架构设计。虽然可以通过良好的设计(以及许多 Qt Quick 小技巧,合适的硬件以及许多系统镜像的优化),但我们建议还是要尽早设定、实现目标,并在开发过程中时刻保持目标。查看我们推荐的实践方法,特别注意章节“Models and Views”,这是最常发现问题的地方。我们也相信重构代码可以提高可读性、降低复杂性,从而最终提高可维护性和可扩展性。如果处理得当,定期清理代码可以简化底层逻辑并消除不必要的复杂性,这可以解决隐藏、休眠、或未发现的错误和漏洞。请记住:重构不必完全手动完成;Qt Creator提供了一种在计算机指导下快速方便地重构代码的好方法。结论开
17、发者通常渴望找到改进或优化其软件和软件开发流程的方法。有时,通过添加新的流程和方法,可以消除开发中的不确定性;有时,通过日常实践和技术积累,开发软件可以是让人愉快的工作。但对于开发者而言,提高技能、更有效的团队合作以及快速开发更可靠的产品总是有益的。在 Qt 公司,我们坚信持续的软件改进。希望您可以将这些最佳实践融入您的个人发展或组织流程。如果您需要一些帮助来改善您的软件实践 无论是个人还是公司范围 我们都乐于分享我们的经验并为您保驾护航。Qt 公司开发并发布符合商业许可证和开源许可证要求的Qt 开发框架。我们实现了一套代码可以在所有操作系统、平台和屏幕类型上部署,从台式机、嵌入式系统到可穿戴设备、移动设备。目前,全球约 100 多万位开发者正在使用 Qt。作为领先的独立技术,Qt 支撑着数百万设备和应用程序的开发和运行,是车载系统、医疗设备、工业自动化设备、数字电视/机顶盒和其他业务关键型应用程序制造商的首选平台,已获得全球 70 多个行业领先厂商的青睐。Qt 公司总部位于芬兰埃斯波,在纳斯达克赫尔辛基证券交易所上市,全球拥有 300 多位员工。