|
|
|
|
@ -0,0 +1,310 @@
|
|
|
|
|
# 3.3 用例设计
|
|
|
|
|
|
|
|
|
|
## 3.3.1 "执行代码检测"用例实现的设计方案
|
|
|
|
|
|
|
|
|
|
"执行代码检测"功能的实现主要是通过"ToolManager"对象提供的服务,调用多个代码质量检测工具(Bandit、Flake8、Pylint)对用户上传的Python代码文件进行分析,从而生成详细的检测报告。具体实现过程见图3.3.1 所描述的用例实现顺序图。
|
|
|
|
|
|
|
|
|
|
**图3.3.1 "执行代码检测"用例实现的顺序图**
|
|
|
|
|
|
|
|
|
|
```plantuml
|
|
|
|
|
@startuml
|
|
|
|
|
title 图3.3.1 "执行代码检测"用例实现的顺序图
|
|
|
|
|
|
|
|
|
|
actor 用户
|
|
|
|
|
participant "<<boundary>>\n<u>DashboardView</u>" as LoginUI
|
|
|
|
|
participant "<<controller>>\n<u>BackendService</u>" as LoginManager
|
|
|
|
|
participant "<<entity>>\n<u>FileStorageManager</u>" as UserLibrary
|
|
|
|
|
participant "<<entity>>\n<u>DetectionTask</u>" as DetectionTask
|
|
|
|
|
participant "<<controller>>\n<u>ToolManager</u>" as ToolManager
|
|
|
|
|
participant "<<entity>>\n<u>CodeAnalysisEngine</u>" as ExtTool
|
|
|
|
|
participant "<<controller>>\n<u>ReportGenerator</u>" as ReportGenerator
|
|
|
|
|
|
|
|
|
|
用户 -> LoginUI: 1. 输入账号和密码
|
|
|
|
|
用户 -> LoginUI: 2. 选择代码文件并上传
|
|
|
|
|
用户 -> LoginUI: 3. 选择检测工具
|
|
|
|
|
用户 -> LoginUI: 4. 点击"开始检查"按钮
|
|
|
|
|
|
|
|
|
|
LoginUI -> LoginManager: 5. handleCodeCheck(file, tools)
|
|
|
|
|
activate LoginManager
|
|
|
|
|
|
|
|
|
|
LoginManager -> LoginManager: 6. 验证请求参数
|
|
|
|
|
LoginManager -> UserLibrary: 7. saveUploadedFile(file)
|
|
|
|
|
activate UserLibrary
|
|
|
|
|
UserLibrary -> UserLibrary: 8. isFileValid(file)
|
|
|
|
|
UserLibrary --> LoginManager: 9. VerificationResult (文件路径)
|
|
|
|
|
deactivate UserLibrary
|
|
|
|
|
|
|
|
|
|
LoginManager -> DetectionTask: 10. new DetectionTask(filePath, fileName, tools)
|
|
|
|
|
activate DetectionTask
|
|
|
|
|
DetectionTask -> DetectionTask: 11. 初始化任务属性\n(生成taskId, 设置status=Pending)
|
|
|
|
|
DetectionTask --> LoginManager: 12. 返回任务对象
|
|
|
|
|
deactivate DetectionTask
|
|
|
|
|
|
|
|
|
|
LoginManager -> DetectionTask: 13. start()
|
|
|
|
|
activate DetectionTask
|
|
|
|
|
DetectionTask -> DetectionTask: 14. 设置status=Running\n记录startTime
|
|
|
|
|
deactivate DetectionTask
|
|
|
|
|
|
|
|
|
|
loop 遍历每个选中的工具
|
|
|
|
|
LoginManager -> ToolManager: 15. runTool(toolName, filePath)
|
|
|
|
|
activate ToolManager
|
|
|
|
|
ToolManager -> ToolManager: 16. generateCommand(toolName, filePath)
|
|
|
|
|
ToolManager -> ExtTool: 17. executeCommand(command)
|
|
|
|
|
activate ExtTool
|
|
|
|
|
ExtTool -> ExtTool: 18. 分析代码文件
|
|
|
|
|
ExtTool --> ToolManager: 19. 返回原始输出 (stdout)
|
|
|
|
|
deactivate ExtTool
|
|
|
|
|
ToolManager -> ToolManager: 20. parseToolOutput(toolName, stdout)
|
|
|
|
|
ToolManager --> LoginManager: 21. 返回结构化结果
|
|
|
|
|
deactivate ToolManager
|
|
|
|
|
|
|
|
|
|
LoginManager -> DetectionTask: 22. addResult(toolName, result)
|
|
|
|
|
activate DetectionTask
|
|
|
|
|
DetectionTask -> DetectionTask: 23. 添加结果到results数组
|
|
|
|
|
deactivate DetectionTask
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
LoginManager -> ReportGenerator: 24. generateReport(results, filename)
|
|
|
|
|
activate ReportGenerator
|
|
|
|
|
ReportGenerator -> ReportGenerator: 25. formatToolResult(toolResult)
|
|
|
|
|
ReportGenerator --> LoginManager: 26. 返回报告内容
|
|
|
|
|
deactivate ReportGenerator
|
|
|
|
|
|
|
|
|
|
LoginManager -> UserLibrary: 27. saveReport(reportContent, filename)
|
|
|
|
|
activate UserLibrary
|
|
|
|
|
UserLibrary -> UserLibrary: 28. 保存报告到输出目录
|
|
|
|
|
UserLibrary --> LoginManager: 29. 返回报告路径
|
|
|
|
|
deactivate UserLibrary
|
|
|
|
|
|
|
|
|
|
LoginManager -> DetectionTask: 30. complete()
|
|
|
|
|
activate DetectionTask
|
|
|
|
|
DetectionTask -> DetectionTask: 31. 设置status=Completed\n记录endTime
|
|
|
|
|
DetectionTask --> LoginManager: 32. 返回任务结果
|
|
|
|
|
deactivate DetectionTask
|
|
|
|
|
|
|
|
|
|
LoginManager --> LoginUI: 33. CheckResult (检测结果和报告路径)
|
|
|
|
|
deactivate LoginManager
|
|
|
|
|
|
|
|
|
|
LoginUI -> LoginUI: 34. 更新界面显示\n(进度、结果列表)
|
|
|
|
|
LoginUI -> 用户: 35. 展示检测结果
|
|
|
|
|
|
|
|
|
|
@enduml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
首先,用户通过边界类"DashboardView"对象选择并上传Python代码文件,选择要使用的检测工具(Bandit、Flake8、Pylint),随后该对象向控制类"BackendService"对象发消息"handleCodeCheck(file, tools)",以请求执行代码检测。接收到消息后,"BackendService"对象首先调用实体类"FileStorageManager"对象的方法"saveUploadedFile(file)"以保存上传的文件到临时目录,"FileStorageManager"对象通过自身内部的方法"isFileValid(file)"来判断文件是否有效,并将验证的结果"VerificationResult"返回给"BackendService"对象。
|
|
|
|
|
|
|
|
|
|
"BackendService"对象收到文件保存成功后,创建实体类"DetectionTask"对象以封装检测任务信息,并调用其"start()"方法将任务状态设置为"Running"。随后,"BackendService"对象遍历用户选中的检测工具,向控制类"ToolManager"对象发消息"runTool(toolName, filePath)"以执行代码检测。"ToolManager"对象通过自身内部的方法"generateCommand(toolName, filePath)"生成命令行命令,并向实体类"CodeAnalysisEngine"对象发消息"executeCommand(command)"以执行代码分析。"CodeAnalysisEngine"对象接收到消息后,根据命令类型调用对应的检测工具(Bandit、Flake8或Pylint)执行代码分析。检测工具完成分析后,"CodeAnalysisEngine"对象返回原始输出结果给"ToolManager"对象,"ToolManager"对象通过"parseToolOutput(toolName, stdout)"方法解析原始输出,将其转换为结构化的检测结果,并返回给"BackendService"对象。
|
|
|
|
|
|
|
|
|
|
"BackendService"对象将每个工具的检测结果添加到"DetectionTask"对象的results数组中。所有工具执行完成后,"BackendService"对象向控制类"ReportGenerator"对象发消息"generateReport(results, filename)"以生成检测报告。"ReportGenerator"对象通过自身内部的方法"formatToolResult(toolResult)"格式化每个工具的检测结果,生成Markdown格式的报告内容,并返回给"BackendService"对象。
|
|
|
|
|
|
|
|
|
|
随后,"BackendService"对象调用"FileStorageManager"对象的方法"saveReport(reportContent, filename)"保存报告到输出目录,并调用"DetectionTask"对象的"complete()"方法将任务状态设置为"Completed"。"BackendService"对象将包含检测结果和报告路径的"CheckResult"返回给"DashboardView"对象,"DashboardView"对象更新界面显示检测结果列表和统计信息,用户可以在界面上查看详细的检测结果。一旦检测完成,系统将检测结果以列表形式展示给用户,用户可以通过筛选功能查看不同类型的问题(错误、警告、信息)。
|
|
|
|
|
|
|
|
|
|
## 3.3.2 "创建项目"用例实现的设计方案
|
|
|
|
|
|
|
|
|
|
"创建项目"功能的实现主要是通过"BackendService"对象提供的服务,创建新的代码检查项目记录,并根据项目来源类型(GitHub、Gitee或文件上传)保存相应的项目信息,从而使用户能够对不同类型的代码进行分类管理和检查。具体实现过程见图3.3.2 所描述的用例实现顺序图。
|
|
|
|
|
|
|
|
|
|
**图3.3.2 "创建项目"用例实现的顺序图**
|
|
|
|
|
|
|
|
|
|
```plantuml
|
|
|
|
|
@startuml
|
|
|
|
|
title 图3.3.2 "创建项目"用例实现的顺序图
|
|
|
|
|
|
|
|
|
|
actor 用户
|
|
|
|
|
participant "<<boundary>>\n<u>ProjectManagementView</u>" as SettingUI
|
|
|
|
|
participant "<<controller>>\n<u>BackendService</u>" as SettingManager
|
|
|
|
|
participant "<<entity>>\n<u>FileStorageManager</u>" as FileStorage
|
|
|
|
|
participant "<<entity>>\n<u>Project</u>" as Project
|
|
|
|
|
|
|
|
|
|
用户 -> SettingUI: 1. 点击"新建项目"按钮
|
|
|
|
|
SettingUI -> SettingUI: 2. 显示新建项目对话框
|
|
|
|
|
用户 -> SettingUI: 3. 输入项目信息\n(名称、描述)
|
|
|
|
|
用户 -> SettingUI: 4. 选择项目来源类型
|
|
|
|
|
|
|
|
|
|
alt 项目来源为GitHub或Gitee
|
|
|
|
|
用户 -> SettingUI: 5. 输入Git URL
|
|
|
|
|
SettingUI -> SettingManager: 6. startSetting()
|
|
|
|
|
activate SettingManager
|
|
|
|
|
SettingManager -> SettingManager: 7. 验证项目信息
|
|
|
|
|
SettingManager -> Project: 8. new Project(name, description, sourceType, sourceUrl)
|
|
|
|
|
activate Project
|
|
|
|
|
Project -> Project: 9. 初始化项目属性\n(生成projectId, 设置创建时间)
|
|
|
|
|
Project --> SettingManager: 10. 返回项目对象
|
|
|
|
|
deactivate Project
|
|
|
|
|
SettingManager -> SettingManager: 11. 保存项目记录
|
|
|
|
|
SettingManager --> SettingUI: 12. CreateProjectResult (项目ID和基本信息)
|
|
|
|
|
deactivate SettingManager
|
|
|
|
|
else 项目来源为文件上传
|
|
|
|
|
用户 -> SettingUI: 7. 选择文件或文件夹
|
|
|
|
|
SettingUI -> SettingManager: 8. startSetting()
|
|
|
|
|
activate SettingManager
|
|
|
|
|
SettingManager -> SettingManager: 9. 验证项目信息
|
|
|
|
|
SettingManager -> Project: 10. new Project(name, description, sourceType)
|
|
|
|
|
activate Project
|
|
|
|
|
Project -> Project: 11. 初始化项目属性\n(生成projectId, 设置创建时间)
|
|
|
|
|
Project --> SettingManager: 12. 返回项目对象
|
|
|
|
|
deactivate Project
|
|
|
|
|
SettingManager -> SettingManager: 13. 保存项目记录
|
|
|
|
|
SettingManager --> SettingUI: 14. CreateProjectResult (项目ID)
|
|
|
|
|
deactivate SettingManager
|
|
|
|
|
|
|
|
|
|
SettingUI -> SettingManager: 15. uploadProjectFiles(projectId, files)
|
|
|
|
|
activate SettingManager
|
|
|
|
|
loop 遍历每个文件
|
|
|
|
|
SettingManager -> FileStorage: 16. saveUploadedFile(file, projectPath)
|
|
|
|
|
activate FileStorage
|
|
|
|
|
FileStorage -> FileStorage: 17. 保存文件到项目目录
|
|
|
|
|
FileStorage --> SettingManager: 18. 返回文件路径
|
|
|
|
|
deactivate FileStorage
|
|
|
|
|
end
|
|
|
|
|
SettingManager --> SettingUI: 19. UploadResult (上传文件数量)
|
|
|
|
|
deactivate SettingManager
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
SettingUI -> SettingUI: 20. 刷新项目列表
|
|
|
|
|
SettingUI -> 用户: 21. 显示新创建的项目
|
|
|
|
|
|
|
|
|
|
@enduml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
边界类"ProjectManagementView"对象基于用户输入的项目信息(如项目名称、描述、来源类型等),向控制类"BackendService"对象发消息"startSetting()"以进行项目创建的初始化工作;"BackendService"对象接收到消息后,首先验证用户输入的项目信息是否有效,随后创建实体类"Project"对象并初始化项目属性(生成projectId、设置创建时间等),至此项目创建的初始化工作已经完成。
|
|
|
|
|
|
|
|
|
|
如果项目来源类型为GitHub或Gitee,用户需要输入Git仓库的URL,"BackendService"对象将Git URL信息保存到"Project"对象中,并返回创建结果给"ProjectManagementView"对象。如果项目来源类型为文件上传,用户需要选择本地文件或文件夹,"BackendService"对象创建项目记录后,"ProjectManagementView"对象通过消息"uploadProjectFiles(projectId, files)"将文件上传请求发送给"BackendService"对象,随后"BackendService"对象将文件上传请求转发给实体类"FileStorageManager"对象,请求保存文件到项目的专用目录。"FileStorageManager"对象接收到文件后,将文件保存到对应项目的目录中,并返回文件保存结果。
|
|
|
|
|
|
|
|
|
|
一旦项目创建任务完成,"BackendService"对象将通过消息"CreateProjectResult"将项目创建结果信息反馈给边界类"ProjectManagementView"对象,"ProjectManagementView"对象刷新项目列表并显示新创建的项目,用户可以在项目管理界面中看到新创建的项目。
|
|
|
|
|
|
|
|
|
|
## 3.3.3 "查看检测结果"用例实现的设计方案
|
|
|
|
|
|
|
|
|
|
根据用户选择要查看的检测记录,"ProjectDetailView"对象将向"BackendService"对象请求加载检测结果详情,"BackendService"对象从"DetectionTask"对象中获取存储的检测结果,并通过"ReportGenerator"对象格式化结果数据,最终将详细的检测结果展示给用户,具体实现过程见图3.3.3 所描述的用例实现顺序图。
|
|
|
|
|
|
|
|
|
|
**图3.3.3 "查看检测结果"用例实现的顺序图**
|
|
|
|
|
|
|
|
|
|
```plantuml
|
|
|
|
|
@startuml
|
|
|
|
|
title 图3.3.3 "查看检测结果"用例实现的顺序图
|
|
|
|
|
|
|
|
|
|
actor 用户
|
|
|
|
|
participant "<<boundary>>\n<u>ProjectDetailView</u>" as SettingUI
|
|
|
|
|
participant "<<controller>>\n<u>BackendService</u>" as SettingManager
|
|
|
|
|
participant "<<entity>>\n<u>DetectionTask</u>" as DetectionTask
|
|
|
|
|
participant "<<controller>>\n<u>ReportGenerator</u>" as ReportGenerator
|
|
|
|
|
participant "<<entity>>\n<u>FileStorageManager</u>" as FileStorage
|
|
|
|
|
|
|
|
|
|
用户 -> SettingUI: 1. 进入检测结果查看界面
|
|
|
|
|
SettingUI -> SettingManager: 2. getCheckHistory(projectId)
|
|
|
|
|
activate SettingManager
|
|
|
|
|
SettingManager -> SettingManager: 3. 查询检测历史记录
|
|
|
|
|
SettingManager --> SettingUI: 4. CheckHistoryList (检测历史列表)
|
|
|
|
|
deactivate SettingManager
|
|
|
|
|
|
|
|
|
|
SettingUI -> SettingUI: 5. 显示检测历史列表
|
|
|
|
|
用户 -> SettingUI: 6. 选择要查看的检测记录
|
|
|
|
|
|
|
|
|
|
SettingUI -> SettingManager: 7. getCheckResult(projectId, checkId)
|
|
|
|
|
activate SettingManager
|
|
|
|
|
SettingManager -> DetectionTask: 8. getResults(checkId)
|
|
|
|
|
activate DetectionTask
|
|
|
|
|
DetectionTask -> DetectionTask: 9. 查询检测结果数据
|
|
|
|
|
DetectionTask --> SettingManager: 10. 返回检测结果
|
|
|
|
|
deactivate DetectionTask
|
|
|
|
|
|
|
|
|
|
SettingManager -> ReportGenerator: 11. formatResults(results)
|
|
|
|
|
activate ReportGenerator
|
|
|
|
|
ReportGenerator -> ReportGenerator: 12. 格式化结果数据\n(按类型分类、排序)
|
|
|
|
|
ReportGenerator --> SettingManager: 13. 返回格式化后的结果
|
|
|
|
|
deactivate ReportGenerator
|
|
|
|
|
|
|
|
|
|
SettingManager --> SettingUI: 14. CheckResult (问题列表、统计信息)
|
|
|
|
|
deactivate SettingManager
|
|
|
|
|
|
|
|
|
|
SettingUI -> SettingUI: 15. 显示检测结果摘要\n(错误数、警告数等)
|
|
|
|
|
SettingUI -> SettingUI: 16. 显示问题列表
|
|
|
|
|
|
|
|
|
|
用户 -> SettingUI: 17. 选择筛选类型\n(全部/错误/警告/信息)
|
|
|
|
|
SettingUI -> SettingUI: 18. 根据类型筛选问题列表
|
|
|
|
|
|
|
|
|
|
用户 -> SettingUI: 19. 点击问题查看详情
|
|
|
|
|
SettingUI -> SettingUI: 20. 显示问题详情和修复建议
|
|
|
|
|
|
|
|
|
|
用户 -> SettingUI: 21. 点击下载报告按钮
|
|
|
|
|
SettingUI -> SettingManager: 22. downloadReport(reportId)
|
|
|
|
|
activate SettingManager
|
|
|
|
|
SettingManager -> FileStorage: 23. readFile(reportPath)
|
|
|
|
|
activate FileStorage
|
|
|
|
|
FileStorage -> FileStorage: 24. 读取报告文件内容
|
|
|
|
|
FileStorage --> SettingManager: 25. 返回报告内容
|
|
|
|
|
deactivate FileStorage
|
|
|
|
|
SettingManager --> SettingUI: 26. 返回报告文件
|
|
|
|
|
deactivate SettingManager
|
|
|
|
|
|
|
|
|
|
SettingUI -> 用户: 27. 触发文件下载
|
|
|
|
|
|
|
|
|
|
@enduml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
边界类"ProjectDetailView"对象首先向控制类"BackendService"对象发消息"getCheckHistory(projectId)"以获取项目的检测历史记录列表,"BackendService"对象查询数据库中存储的检测任务记录,并将检测历史列表"CheckHistoryList"返回给"ProjectDetailView"对象,"ProjectDetailView"对象在界面上显示检测历史列表供用户选择。
|
|
|
|
|
|
|
|
|
|
用户选择要查看的检测记录后,"ProjectDetailView"对象向"BackendService"对象发消息"getCheckResult(projectId, checkId)"以请求加载详细的检测结果。"BackendService"对象接收到消息后,向实体类"DetectionTask"对象发消息"getResults(checkId)"以获取存储的检测结果数据。"DetectionTask"对象从其results属性中查询对应的检测结果,并将结果返回给"BackendService"对象。
|
|
|
|
|
|
|
|
|
|
"BackendService"对象接收到检测结果后,向控制类"ReportGenerator"对象发消息"formatResults(results)"以格式化结果数据。"ReportGenerator"对象通过自身内部的方法对检测结果进行格式化处理,包括按问题类型(错误、警告、信息)进行分类、按严重程度排序等,并将格式化后的结果返回给"BackendService"对象。
|
|
|
|
|
|
|
|
|
|
"BackendService"对象将包含问题列表和统计信息的"CheckResult"返回给"ProjectDetailView"对象,"ProjectDetailView"对象在界面上显示检测结果摘要(错误数、警告数、信息数等)和详细的问题列表。用户可以通过筛选功能选择查看特定类型的问题,"ProjectDetailView"对象根据用户选择的筛选类型过滤问题列表并更新显示。
|
|
|
|
|
|
|
|
|
|
如果用户需要下载检测报告,"ProjectDetailView"对象向"BackendService"对象发消息"downloadReport(reportId)"以请求下载报告文件。"BackendService"对象调用实体类"FileStorageManager"对象的方法"readFile(reportPath)"读取报告文件内容,并将报告文件返回给"ProjectDetailView"对象,"ProjectDetailView"对象触发浏览器下载文件,用户可以将检测报告保存到本地。
|
|
|
|
|
|
|
|
|
|
## 3.3.4 "上传规则文件"用例实现的设计方案
|
|
|
|
|
|
|
|
|
|
"上传规则文件"功能的实现主要是通过"BackendService"对象提供的服务,接收用户上传的规则配置文件,验证文件格式的有效性,并将文件保存到规则集目录中,从而使用户能够自定义代码检测规则以满足不同项目或团队的要求。具体实现过程见图3.3.4 所描述的用例实现顺序图。
|
|
|
|
|
|
|
|
|
|
**图3.3.4 "上传规则文件"用例实现的顺序图**
|
|
|
|
|
|
|
|
|
|
```plantuml
|
|
|
|
|
@startuml
|
|
|
|
|
title 图3.3.4 "上传规则文件"用例实现的顺序图
|
|
|
|
|
|
|
|
|
|
actor 用户
|
|
|
|
|
participant "<<boundary>>\n<u>RuleSetManagementView</u>" as SettingUI
|
|
|
|
|
participant "<<controller>>\n<u>BackendService</u>" as SettingManager
|
|
|
|
|
participant "<<entity>>\n<u>FileStorageManager</u>" as FileStorage
|
|
|
|
|
participant "<<entity>>\n<u>RuleSet</u>" as RuleSet
|
|
|
|
|
|
|
|
|
|
用户 -> SettingUI: 1. 点击"上传规则文件"按钮
|
|
|
|
|
SettingUI -> SettingUI: 2. 打开文件选择对话框
|
|
|
|
|
用户 -> SettingUI: 3. 选择规则文件\n(如setup.cfg)
|
|
|
|
|
用户 -> SettingUI: 4. 选择规则类型\n(Pylint/Flake8)
|
|
|
|
|
|
|
|
|
|
SettingUI -> SettingManager: 5. uploadRuleFile(file, ruleType)
|
|
|
|
|
activate SettingManager
|
|
|
|
|
SettingManager -> SettingManager: 6. 验证文件格式
|
|
|
|
|
SettingManager -> SettingManager: 7. isFileValid(file, ruleType)
|
|
|
|
|
|
|
|
|
|
alt 文件格式有效
|
|
|
|
|
SettingManager -> FileStorage: 8. saveRuleFile(file, ruleType)
|
|
|
|
|
activate FileStorage
|
|
|
|
|
FileStorage -> FileStorage: 9. 保存文件到规则集目录
|
|
|
|
|
FileStorage --> SettingManager: 10. 返回文件路径
|
|
|
|
|
deactivate FileStorage
|
|
|
|
|
|
|
|
|
|
SettingManager -> RuleSet: 11. new RuleSet(fileName, filePath, ruleType)
|
|
|
|
|
activate RuleSet
|
|
|
|
|
RuleSet -> RuleSet: 12. 初始化规则文件属性\n(生成ruleId, 设置更新时间)
|
|
|
|
|
RuleSet --> SettingManager: 13. 返回规则对象
|
|
|
|
|
deactivate RuleSet
|
|
|
|
|
|
|
|
|
|
SettingManager -> SettingManager: 14. 保存规则文件元数据
|
|
|
|
|
SettingManager --> SettingUI: 15. UploadRuleResult (规则ID和基本信息)
|
|
|
|
|
else 文件格式无效
|
|
|
|
|
SettingManager --> SettingUI: 16. UploadRuleResult (错误信息)
|
|
|
|
|
endif
|
|
|
|
|
deactivate SettingManager
|
|
|
|
|
|
|
|
|
|
SettingUI -> SettingUI: 17. 刷新规则文件列表
|
|
|
|
|
SettingUI -> 用户: 18. 显示新上传的规则文件
|
|
|
|
|
|
|
|
|
|
@enduml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
边界类"RuleSetManagementView"对象基于用户选择的规则文件和规则类型(如Pylint的.pylintrc文件或Flake8的setup.cfg文件),向控制类"BackendService"对象发消息"uploadRuleFile(file, ruleType)"以请求上传规则文件;"BackendService"对象接收到消息后,首先通过自身内部的方法"isFileValid(file, ruleType)"验证文件格式是否符合对应的规则类型要求,如果文件格式有效,则向实体类"FileStorageManager"对象发消息"saveRuleFile(file, ruleType)"以保存规则文件到规则集目录。
|
|
|
|
|
|
|
|
|
|
"FileStorageManager"对象接收到消息后,将规则文件保存到对应的规则集目录中(如Pylint规则文件保存到pylint_rules目录,Flake8规则文件保存到flake8_rules目录),并返回文件保存路径给"BackendService"对象。"BackendService"对象收到文件保存成功后,创建实体类"RuleSet"对象以封装规则文件信息,调用其构造函数"new RuleSet(fileName, filePath, ruleType)"初始化规则文件属性(生成ruleId、记录文件大小、设置更新时间等),并将规则文件元数据保存到系统中。
|
|
|
|
|
|
|
|
|
|
一旦规则文件上传任务完成,"BackendService"对象将通过消息"UploadRuleResult"将上传结果信息反馈给边界类"RuleSetManagementView"对象,如果上传成功则返回规则ID和基本信息,如果上传失败则返回错误信息。"RuleSetManagementView"对象刷新规则文件列表并显示新上传的规则文件,用户可以在规则集管理界面中看到新上传的规则文件,并可以对其进行编辑、下载或删除操作。上传的规则文件可以在后续的代码检测中使用,"ToolManager"对象在执行检测时会自动读取并使用相应的规则配置文件。
|