IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。
当程序员规划涉及代码重构的大型项目时,应该查看所需更改的全貌并相应地调整,这正是IntelliJ IDEA团队在需要将 IDE 的整个 UI 本地化为中文、日语和韩语时所做的。
IntelliJ 团队使用 JetBrains 的代码质量平台 Qodana 作为本地化流程的单一可信来源,可以比预期更快地完成了项目,明智的规划、问责和监督促成了这一积极成果。
挑战:隔离 13,000 个硬编码字符串并有效监控进度
为了简化将 UI 本地化为 3 种语言的过程,IntelliJ 团队需要从源代码中剥离所有可本地化的条目,将其放入单独的属性文件中以供翻译。
在超过 13,000 个字符串中,一些可本地化的字符串很容易被忽略,保留在代码中。 本地化 UI 时,硬编码字符串可能是最难处理的部分,它们只有在软件本地化后才会出现,因此很难被找到。 举例来说,用户安装日语语言包后,UI 的某些部分仍将是英语。
因此,团队需要面对许多繁琐和重复的工作,于是本地化项目负责人开始寻找一种解决方案,用来:
- 通过持续检查硬编码字符串文字的代码库来自动执行大量工作。
- 将问题分配给负责修正问题的开发者。
- 监督可本地化字符串的提取。
解决方案:硬编码字符串文字的自动代码检查
本地化项目负责人选择Qodana来简化代码检查流程,得到一个包含以下步骤的项目:
#1. 将 Qodana 连接到 TeamCity
IntelliJ 团队将 Qodana 连接到 TeamCity 管道,并启用国际化代码检查以高亮显示未按要求提取到属性文件中的硬编码字符串文字。
#2. 配置检查配置文件
在检查配置文件中,团队配置了检查范围,确保平台跳过遗留代码、没有字母字符的文字以及仅包含空格的字符串等部分。
团队还确保 TeamCity 会为 Qodana 检查的每行生成一份测试报告,如果未提取字符串,则将其定为失败。
#3. 确定扫描频率
配置完成后,Qodana 被设置为每 4 小时检查一次代码。 扫描在服务器上独立运行,而不是在某人的本地机器上运行,这一点尤为重要,这最终为团队节省了宝贵的时间。
第一次运行 Qodana 在 TeamCity 中得到 10,000 个失败测试。
#4. 分配任务
针对每一次测试失败,项目负责人都会指派一名开发者调查并将硬编码字符串提取到属性文件中。
#5. 监控结果
每次 Qodana 检查后,TeamCity 都会将之前的结果与当前报告加以比较。 如果负责某个问题的开发者提取了字符串,TeamCity 会将测试标记为已修正,这让项目负责人在监控进度时无需手动将测试标记为已修正。
此外,团队还能够在 Qodana Cloud 仪表板中监控进度。仪表板实时更新有关剩余代码问题的信息,并比较不同 Qodana 运行之间的结果。
Qodana 还能够将所选问题添加到基线中,这也称为技术债务部分。 由此整个团队都可以在平台上看到相同的问题列表并监控进度, 以下示例展示了运作方式。
关键成果
在短短几个月内,失败测试的数量从 10,000 下降到零,平均每天约有 175 个测试得到修正。 团队成功从源代码中移除了所有硬编码字符串文字,整个 UI 也已无缝本地化,没有意外的英语元素。
借助 Qodana,IntelliJ 团队减少了本地化过程中的手动步骤,进而减少了人为错误的数量并使本地化构建更加可靠。 此外,由于每 4 小时运行一次检查,他们能够更快发现问题并防止小问题后续变成大问题。
最后,团队负责人使用 Qodana 作为单一可信来源,可以轻松确保开发者修正分配给他们的问题。
基于这些结果,IntelliJ 团队在交付新功能或提升 IntelliJ IDEA 的性能时都将继续使用 Qodana 作为代码质量和资源规划平台。