|
|
|
@ -0,0 +1,54 @@
|
|
|
|
|
程序代码质量分析报告
|
|
|
|
|
报告人:鲍贤慧
|
|
|
|
|
|
|
|
|
|
1. 待分析程序代码概述
|
|
|
|
|
程序名称:小米便签
|
|
|
|
|
主要功能:实现智能文件夹管理、便签关联闹钟提醒、一键拨打电话 / 发短信、网页快速访问等功能。
|
|
|
|
|
编程语言:Java(Android 端)
|
|
|
|
|
代码规模:约 5000 行代码,包含 15 个程序包、30 个类,涉及 UI 界面、系统调用、数据存储等模块。
|
|
|
|
|
|
|
|
|
|
2. 质量分析方法及工具
|
|
|
|
|
2.1 分析的软件质量要素
|
|
|
|
|
内部质量:编码风格合规性、模块设计合理性、代码可维护性。
|
|
|
|
|
外部质量:功能缺陷、兼容性问题、性能瓶颈
|
|
|
|
|
2.2 软件质量方法
|
|
|
|
|
人工分析:逐模块阅读代码,检查编码规范、设计模式应用及逻辑合理性。
|
|
|
|
|
工具分析:使用 Android Studio 自带的 Lint 工具进行静态代码分析,结合 JUnit 进行单元测试验证功能逻辑。
|
|
|
|
|
2.3软件质量分析工具
|
|
|
|
|
Android Studio Lint 静态代码分析 代码风格、潜在 bug、性能优化点
|
|
|
|
|
JUnit 单元测试框架 功能逻辑正确性、异常处理覆盖度
|
|
|
|
|
SonarQube 代码质量管理 代码复杂度、重复代码、注释完整性
|
|
|
|
|
3 人工分析代码的质量情况
|
|
|
|
|
|
|
|
|
|
3.1 代码风格
|
|
|
|
|
编码规范:遵循小米 Android 开发规范。
|
|
|
|
|
典型问题:部分布局文件(XML)未添加注释,如activity_main.xml中按钮控件的功能描述缺失。
|
|
|
|
|
结论:整体风格统一,但注释完整性需提升,尤其 UI 布局和复杂逻辑处。
|
|
|
|
|
|
|
|
|
|
3.2 代码设计
|
|
|
|
|
3.2.1模块化设计:
|
|
|
|
|
核心模块拆分清晰:NoteManager(便签管理)、ReminderService(闹钟服务)、DeviceServiceProxy(系统调用代理)。
|
|
|
|
|
示例:ReminderService通过AlarmManager实现闹钟逻辑,与NoteStorage解耦,符合单一职责原则。
|
|
|
|
|
3.2.2耦合度:
|
|
|
|
|
CallService与 Android 系统 API(TelephonyManager)强耦合,可引入接口抽象以提升跨平台兼容性。
|
|
|
|
|
3.2.3结论:模块设计合理,但部分系统依赖模块可优化解耦。
|
|
|
|
|
3.3 编程技能
|
|
|
|
|
使用 Java 设计模式优化代码结构,如工厂模式(NoteFactory.java)创建不同类型便签处理器。
|
|
|
|
|
// 示例
|
|
|
|
|
public class ConfigManager {
|
|
|
|
|
private static final ConfigManager INSTANCE = new ConfigManager();
|
|
|
|
|
private ConfigManager() {}
|
|
|
|
|
public static ConfigManager getInstance() { return INSTANCE; }
|
|
|
|
|
}
|
|
|
|
|
3.4 代码质量问题
|
|
|
|
|
3.4.1空指针风险:BrowserDispatcher.java中未校验context对象是否为 null,直接调用context.startActivity(intent),可能引发NullPointerException。
|
|
|
|
|
3.4.2硬编码问题:Java 代码中闹钟重复频率使用整数常量(int DAILY = 0;),未定义枚举类(如RepeatFrequencyEnum),可读性差。
|
|
|
|
|
3.4.3异常处理缺失:NoteStorage.java的deleteNote()方法未捕获SQLException,导致数据库操作失败时未给出错误提示。
|
|
|
|
|
4 工具分析代码的质量情况
|
|
|
|
|
4.1高优先级(FindBugs 检测):
|
|
|
|
|
检测到 几处未使用的导入语句(如import android.util.Log未调用)。
|
|
|
|
|
多个布局文件存在冗余属性(如android:layout_marginLeft与android:marginStart重复)。
|
|
|
|
|
4.2中等风险(Checkstyle 检测):
|
|
|
|
|
ReportGenerator.java中方法generateReport()的圈复杂度为 18(阈值 15),代码逻辑过于复杂。
|
|
|
|
|
4.3建议优化(FindBugs 检测):
|
|
|
|
|
检测到 3 处重复代码块,如NoteListActivity.java和NoteEditActivity.java中均存在相同的按钮初始化逻辑,建议提取为公共方法 `initButton ()。
|