utilCode(通用工具)招募
为促进鸿蒙生态及仓颉编程语言的发展,现招募开发者共同参与基于仓颉语言的通用工具库开发项目。本项目旨在运用仓颉语言开发一个功能完善、结构清晰的通用工具库。该项目灵感来源于社区中成熟的工具库(如 OpenHarmony 社区的 utilCode),目标是构建一个专为仓颉语言设计的高质量基础组件集合,为后续的开发者提供可靠的工具支持,降低开发门槛。
悬赏内容
招募内容
一、 项目概述
为系统性地构建鸿蒙生态下仓颉语言的开发者基础设施,我们正式启动一项公益性开源项目,旨在创建一款在架构设计、代码质量、测试覆盖率和文档完备性上均达到生产级标准的通用工具库。本项目旨在为仓颉语言开发者提供一套可靠、高效的基础工具集,降低日常开发复杂度。
本项目完全以社区驱动的方式运作,聚焦于技术贡献与代码质量,不涉及任何商业报酬。我们诚邀追求卓越、熟悉仓颉语言的开发者加入,共同打造一个未来可被广泛信赖和使用的开源资产。
二、 项目目标与详细范围
本项目的核心交付物是一个模块化、可扩展的仓颉语言工具库。其初步范围规划如下,贡献者可选择其中一个或多个模块进行实现:
表1:工具库核心模块清单
模块类别 | 核心功能点 | 具体验收要求 |
|---|---|---|
设备与系统工具 | 获取设备型号、OS版本、屏幕密度、内存信息等。 | 信息准确,对无法获取的信息有安全的降级处理。 |
安全与加密工具 | 实现MD5、SHA-256哈希算法,提供Base64编解码。 | 算法实现需符合标准,输出结果与主流工具库一致。 |
时间与日期工具 | 时间戳转换、日期格式化(含国际化考量)、日期差值计算。 | 正确处理时区,格式化字符串灵活可配置。 |
存储与缓存工具 | 轻量级键值对持久化、文件读写安全封装(防并发写入冲突)。 | 提供清晰的读写接口,处理所有可能的IO异常。 |
网络状态工具 | 检测网络连接状态(Wi-Fi/蜂窝)、监听网络状态变化。 | 状态监听机制稳定,无内存泄漏风险。 |
三、 质量认证与专业技术要求
本项目对代码质量设有极高要求,所有贡献代码需通过以下多维度的质量认证。
1. 代码规范与架构设计
编码规范: 代码必须严格遵守仓颉语言官方代码风格指南。
命名规范: 类名采用
大驼峰,方法/变量采用小驼峰,常量采用全大写+下划线。代码格式: 缩进、空格、换行需统一。
架构设计原则:
单一职责原则: 每个类/函数应只负责一个明确的功能点。
依赖注入: 鼓励使用接口抽象和依赖注入来降低模块耦合度,以提高代码的可测试性。
代码示例:良好的接口设计与实现分离java
// 1. 定义加密工具接口,便于后续测试和扩展
public interface HashUtils {
// 使用文档注释清晰说明功能、参数和返回值
/**
* 计算字符串的 SHA-256 哈希值,并以十六进制字符串形式返回。
*
* @param input 待计算的原始字符串
* @return 长度为64的十六进制哈希字符串,输入为空时返回空字符串。
*/
hashSha256(input: string): string;
}
// 2. 提供该接口的标准实现
public class StandardHashUtils implements HashUtils {
public hashSha256(input: string): string {
// 具体的算法实现...
}
}
// 3. 通过依赖注入使用,而非硬编码实例化
public class MyService {
private hashUtils: HashUtils;
// 通过构造器注入依赖
public init(hashUtils: HashUtils): void {
this.hashUtils = hashUtils;
}
public processData(data: string): void {
let hash = this.hashUtils.hashSha256(data);
// ... 其他逻辑
}
}2. 测试覆盖率与健壮性
单元测试: 每个公开API必须有对应的单元测试。我们要求合并入主分支的代码需满足以下硬性指标:
表2:单元测试覆盖率要求
测试覆盖率类型
最低要求
目标要求
行覆盖率
90%95%+分支覆盖率
85%90%+测试用例设计: 测试应覆盖正常流程、边界条件(如空值、极值)和异常场景。
代码示例:对应的单元测试
// 对 HashUtils.hashSha256 方法的单元测试
// 使用 @Test 注解等仓颉语言测试框架特性
@Test
public testHashSha256(): void {
// 1. 准备 (Arrange)
let hashUtils: HashUtils = new StandardHashUtils();
let testInput = "Hello, Cangjie!";
let expectedHash = "8f7d..."; // 此处应为预先计算好的正确哈希值
// 2. 执行 (Act)
let actualHash = hashUtils.hashSha256(testInput);
// 3. 断言 (Assert)
Assert.equals(expectedHash, actualHash);
}
@Test
public testHashSha256WithEmptyInput(): void {
// 测试边界条件:空字符串
let hashUtils: HashUtils = new StandardHashUtils();
let result = hashUtils.hashSha256("");
Assert.equals("", result); // 根据验收要求,空输入返回空字符串
}3. 工程化与文档完备性
构建与依赖: 项目必须提供清晰的构建脚本(如
build.sh),能够一键完成编译、测试、打包。依赖管理应简洁明确。API 文档: 所有公开的类、方法、参数必须使用仓颉语言的文档注释标准。项目需能自动化生成API文档站点。
README.md: 必须提供详尽的说明文档,至少包含:
项目简介和特性列表
快速入门指南
详细的API使用示例
贡献指南(指向本招募公告)
四、 贡献流程与评审标准
意向沟通: 贡献者请在本帖或项目仓库的Issue中声明意向,并说明计划贡献的模块。
Fork & PR: 遵循标准的GitHub/GitCode工作流:Fork仓库 -> 创建功能分支 -> 开发 -> 提交Pull Request。
自动化流水线: 每个PR将自动触发CI/CD流水线,执行编译、静态代码分析和单元测试覆盖率检查。未能通过自动化检查的PR将不会被人工评审。
人工评审: 项目维护者将进行深度代码评审,评审维度如下:
评审维度
权重
关注点
架构与设计
30%
代码结构、模块划分、扩展性、是否符合设计原则。
代码质量与规范
25%
可读性、命名、注释、是否遵循编码规范。
测试覆盖率与质量
25%
测试用例的完备性、设计的合理性。
文档完整性
20%
API文档、README、代码内注释是否清晰准确。
合并与认证: 通过全部评审的代码将被合并。优秀的贡献者将被邀请成为项目的长期维护者。
相关附件
质量认证要求
交付件
NO | 交付件描述 | 备注 |
1 | 三方库源代码 | 源代码 |
2 | 三方库测试方案和用例 | 测试用例和文档 |
3 | 用户手册,API文档,设计文档,license文档 | 资料和文档 |
验收标准
1.功能
三方库必须有明确的功能;
如果参考对标库移值开发,功能与参考三方库保持一致。
2.资料
Readme:包含简介,软件架构,目录结构,下载安装(编译构建),接口说明,使用示例,约束限制,开源协议,参与贡献等内容;
Changelog,三方库版本需包含基本的修改说明。
3.标准遵从性(可选),三方库实现需满足对应协议或行业标准,举例
appquth:支持对OAuth 的PKCE扩展;
icu4j:支持unicode标准库,通用字符集ISO/IEC 10646。
4.性能目标
性能敏感三方库接口运行性能持平对标三方库
5.开源协议遵从,必须包含License文件
放置合适的开源License协议,建议Apache License Version 2.0;
引用或参考开源三方库,需遵从开源协议。
6.网络安全要求
满足基础的网络安全红线及隐私要求,符合安全编码规范。
过程质量要求
指标分类 | 指标名称 | 指标要求 | 度量工具 | 牵引 OR Must |
代码度量 | 平均文件代码行 | ≤300 LOC | CMetricsPlus,CJMetric | Must |
总文件重复率 | C/C++≤4%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
源文件重复率 | C/C++≤4%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
平均函数或方法代码行* | ≤30 LOC | CMetricsPlus,CJMetric | Must | |
总代码重复率 | C/C++≤10%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
源文件代码重复率 | C/C++≤10%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
平均圈复杂度 | ≤5;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
冗余代码 | “0” 【2】; | CMetricsPlus,CJMetric | Must | |
不安全函数 | NA | CMetricsPlus,CJMetric | Must | |
静态检查 | 编译告警 | “0” 【2】 | Compile工具 | 牵引 |
通用静态告警 | “0” 【2】 | Pclint plus,CJLINT | Must | |
开发者测试 | DT用例密度(个/KLOC) | > 40 | 手工 | 牵引 |
DT代码语句覆盖率 | >=85% | Gcov,cjcov | 牵引 | |
DT代码分支覆盖率 | >=50% | Gcov,cjcov | 牵引 | |
未做DT文件数 | 0 | 手工 | 牵引 | |
问题解决率 | 遗留问题DI | 整体<10 | Issue | 牵引 |
遗留致命缺陷数(0) | 0 | Issue | Must | |
累计缺陷解决率 | 85% | Issue | 牵引 | |
软件开发 | 每日构建成功率 | 100% | CI | 牵引 |
测试评估 | 测试缺陷密度(/KLOC) | 5-9 | 人工 | 牵引 |
测试用例密度(个/KLOC) | 20-40 | 人工 | 牵引 | |
初验用例自动化率 | 100% | CIDA | 牵引 | |
HLT自动化用例比率 | 【85%,95%】 | CIDA | 牵引 | |
开源第三方(含构建工具) | 开源片段引用 | 0(除例外备案类) | FOSSBOT+人工 | Must |
可信构建 | 二进制一致性 | 0(含可澄清) | 人工 | Mus |

