[I.2] 个人作业:软件案例分析

[I.2] 个人作业:软件案例分析

项目 内容
这个作业属于哪个课程 2025年春季软件工程(罗杰、任健)
这个作业的要求在哪里 [I.2] 个人作业:软件案例分析
我在这个课程的目标是 学习软件工程的理论知识并进行实践
这个作业在哪个具体方面帮助我实现目标 通过分析优秀开源软件,站在用户视角,抓住软件开发的一些关键点。

选题背景

ARDM的起源

  • 诞生背景

    Redis 是一种高性能的键值存储数据库,广泛应用于缓存、消息队列、实时数据分析等场景。随着 Redis 在开发中的普及,开发者对可视化操作界面的需求日益增长。命令行工具(redis-cli)虽强大,但难以直观管理复杂数据结构(如嵌套Hash、JSON),团队协作场景下也需可视化权限管理、监控统计等功能,降低运维门槛。在此背景下,Redis 可视化管理工具应运而生,Redis Desktop Manager(RDM)曾是市场主流,但其在2020年闭源 (现在能下载最新版本0.9),并推出新的收费版本 Redis Insight

    中国开发者qishibo因不满RDM闭源策略,基于Electron框架开发了Another Redis Desktop Manager(简称ARDM),目标为提供免费、开源、跨平台的Redis管理工具 (这就是大佬么orz)。

    64adf150a1e006e2af84a2482019528
  • 关键里程碑

    可在 https://goanother.com/cn/ 上查看

    • 2019年:支持SSH隧道和TLS加密,成为首个开源支持安全连接的Redis GUI。
    • 2021年:GitHub突破10k Star,被纳入多个开源软件推荐榜单。
    • 2023年:推出集群管理模式(实验性功能),支持Redis 7.0新特性(如Streams数据类型)。
  • 社区生态

    • 开发者贡献:累计400+ GitHub Issue,60+ Pull Request,社区插件(如RedisJSON支持)逐步丰富。
    • 用户基数:全球月活跃用户超50万,中国用户占比40%(Gitee镜像下载量统计)。

为什么研究ARDM?

  1. 开源代表性

    • MIT协议允许自由商用,GitHub仓库完整开放,是开源社区驱动的典型范例。
    • 对比闭源的RDM,ARDM展现了开源工具在迭代速度和用户信任上的优势。
  2. 技术架构独特性

    • 基于Electron + React实现跨平台,利用Web技术降低开发成本。
    • 数据渲染采用虚拟滚动优化性能(尽管仍存在瓶颈),值得研究其技术取舍。
  3. 市场影响力

    • 2023年DB-Engines数据库工具排行中,ARDM位列Redis GUI类第2名(仅次于RedisInsight)。
    • 被阿里云、腾讯云等厂商推荐为开发者配套工具,形成开源与商业生态的互补。
  4. 国产开源标杆

    • 对比同类工具(如RedisInsight、RDM、Medis等均为国外团队主导),ARDM是唯一由国内开发者主导并持续维护的开源Redis GUI
    • 被纳入工信部《2023年开源软件生态发展白皮书》案例,成为国产开源工具“小而美”的典范。
  5. 个人原因

    • 当初觉得这个颜值还行就选这个了

第一部分 调研与评测

软件评测

软件使用

下载与安装

Windows:

  • 可以在github 或者 gitee下载exe安装包
  • 或者通过chocolatey: choco install another-redis-desktop-manager
  • 或者通过winget: winget install qishibo.AnotherRedisDesktopManager

Linux

  • 可以在github 或者 gitee下载AppImage包,chmod +x, 双击运行
  • 或者通过snap: sudo snap install another-redis-desktop-manager Tips: 如果选择私钥时提示权限不足,执行sudo snap connect another-redis-desktop-manager:ssh-keys来获取对~/.ssh文件夹的权限

Mac 用户:

如果通过brew或者dmg安装后无法打开,报错不受信任或者移到垃圾箱,执行下面命令后再启动即可:
sudo xattr -rd com.apple.quarantine /Applications/Another\ Redis\ Desktop\ Manager.app

  • 可以在github 或者 gitee下载dmg安装包

  • 通过 brew: brew install --cask another-redis-desktop-manager

连接配置

  • 点击主界面左上角 + 新建连接

  • 填写基本信息:

    • 地址:Redis服务器IP(本地默认127.0.0.1
    • 端口:默认6379
    • 密码:若启用认证需要填写
    • 连接名称:自定义标识(如“本地测试环境”)
  • 高级配置(可选):

    • SSH隧道:通过跳板机连接内网Redis。

    • TLS加密:启用SSL/TLS保证传输安全。

    • 集群模式:手动添加集群节点(需填写多个节点地址)。

软件功能

  • new key 最基础、最重要的功能。

    image-20250315214038426

  • 树状视图 : 定义 Key 时候相关字段用 ':' 隔开即可实现树状的效果。

    image-20250315232707781

  • 多格式解析 支持 Json Binary Hex Protobuf 等数据格式

    image-20250315215931651

  • **实时监控面板 ** 内存使用率、连接数、命令统计(支持按命令类型过滤)。

    image-20250315214135929

  • 命令模式智能提示 输入 关键词时自动提示参数格式

    image-20250315214419578

  • Stream 数据类型深度支持 支持查看 Stream 的消费者组、待处理消息、历史消息

image-20250315214702236

  • 命令日志功能

    abebab22fc882cb8f21b0ca995dd598

  • 内存分析工具 生成 Top 内存占用 Key 列表

    image-20250315215613002

  • Slow Query 支持慢查询日志记录

    image-20250315220100807

软件分析

基本流程

  1. 连接 Redis 实例:输入主机、端口、密码等信息,支持 SSH 隧道和 SSL 加密。
  2. 导航与管理键值
    • 树形结构浏览键空间,支持模糊搜索。
    • 查看键值详情(String/List/Hash 等格式),支持增删改查操作。
  3. 执行命令:通过命令行界面直接执行 Redis 指令。
  4. 高级功能:监控面板、数据导入导出、集群管理等。

是否解决用户需求?

  • 核心需求:基本满足用户对 Redis 实例管理、数据操作、命令执行的需求。
  • 进阶需求:支持集群/哨兵模式、数据流订阅,但部分高级功能(如性能分析)需依赖第三方插件。

各维度优缺点分析

维度 优点 缺点
数据量 支持模糊搜索,快速定位键值,中等数据量(10 万级键值)下响应流畅。 超大数据量(百万级)时加载延迟明显,内存占用较高。
界面 布局清晰,暗黑模式友好,树形结构直观易用。 分组功能缺失(需手动拼接键名前缀), 部分操作入口较深(如批量删除)。
功能 支持多种数据格式,提供命令行交互和监控面板。 集群管理功能较基础。
准确度 命令执行结果准确,数据展示一致性强。 部分特殊字符显示异常。
用户体验 交互流畅,快捷键支持完善。 文档简洁,适合开发者。 新手学习成本较高,错误提示不够友好。

改进意见

软件整体还是满优秀的,我觉得可以加一个功能:支持自定义快捷键,适配不同用户习惯。

用户调研

采访对象:大三同学,日常使用Redis进行缓存管理,需求为键值搜索、TTL修改。

5f34dbf3b907580610a0bc83c1fd311

71d0989db7758c33b69c956790893a9

评测结论

  • 评级d) 好,不错
  • 优点: UI 简洁清晰,支持高级特性如集群和哨兵,适应不同数据格式需求。
  • 缺点: 对新手来说,可能需要一些时间适应和配置高级功能。
  • 定量评分(满分5星):
    • 功能性 ★★★☆
    • 性能 ★★☆
    • 用户体验 ★★★★
    • 社区支持 ★★★★☆

Bug分析

  • 操作系统:Ubuntu 22.04 LTS
  • Redis版本:7.0.15
  • 客户端工具
    • redis-cli:7.0.15(默认命令行工具)
    • Another Redis Desktop Manager:1.7.1.0(可视化管理工具)

Bug 1: 特殊 ASCII 字符显示错误

可复现性

  • 必然发生:只要键值包含非UTF-8编码字符(如控制字符、二进制数据),在Another Redis Desktop Manager中必然无法正确显示。
  • 触发条件:键值为二进制数据或包含不可打印ASCII字符(例如\x00-\x1F范围内的字符)。

复现步骤

  1. 写入测试数据
    通过redis-cli写入一个包含控制字符的键值:

    set bug_key "\x0b\x0b\x01"
    
  2. 验证redis-cli显示

     get bug_key
    

    输出:\x0b\x0b\x01

    image-20250315231939836

  3. 验证图形化工具显示
    打开Another Redis Desktop Manager,连接Redis后查看bug_key的值:

    值无法正常展示,界面显示为错误提示。

    0be096de2f2f41589198a36a191681d

    并且除了 binary,其他格式均无法正确解析。

    9e9b9c91275550d569591b6cfa28fb5

可能成因

  1. 客户端编码处理差异
    • redis-cli支持 --raw 模式直接输出二进制数据,而图形化工具可能默认尝试以UTF-8解码值,遇到非法字节时丢弃或替换字符。
  2. 控制字符过滤
    • 图形化工具为避免控制字符影响界面渲染(如\x0b可能干扰布局),主动过滤了不可见字符。

严重性评估

维度 分析 量化指标(★)
系统功能 不影响Redis服务端存储和读写,但影响用户查看数据。 ★☆☆☆☆
安全性 无直接安全风险。 ★☆☆☆☆
用户体验 用户无法通过图形化工具管理二进制数据,需依赖命令行,体验显著下降。 ★★☆☆☆

为何软件团队未修复?

  1. 测试覆盖不足

    • 图形化工具测试用例可能未覆盖二进制数据或非UTF-8编码的场景。
  2. 需求优先级低

    • 开发团队可能认为二进制数据管理属于小众需求,优先处理常见功能。
  3. 技术实现复杂度

    • 支持二进制数据展示需额外处理编码转换、控制字符转义等逻辑,增加开发成本。

Bug 2:不支持 help 命令

可复现性

  • 必然发生:在特定客户端中,输入helphelp <command>时无法获取帮助信息。
  • 触发条件:客户端未实现help命令解析逻辑或界面交互设计不支持。

复现步骤

  1. 在redis-cli中验证help命令help set

    输出:显示SET命令的完整帮助文档。

    img

  2. 在图形化客户端中尝试help命令

    输入help,界面提示“Input your command and select from tips”。

    img

可能成因

未实现help命令的解析逻辑,可能仅依赖自动补全提示而非完整的帮助系统。

严重性评估

维度 分析 量化指标(★)
系统功能 不影响Redis服务端功能,但用户无法通过客户端快速查询命令用法。 ★★☆☆☆
用户体验 用户需切换至redis-cli或查阅外部文档,操作流程中断,体验下降。 ★★☆☆☆

为何软件团队未修复?

需求优先级低,更注重可视化操作,help命令可能被视为边缘需求

BUG 改进建议

  1. 集成Redis命令元数据:客户端内置Redis命令列表及帮助文档(如从Redis源码提取help输出)。
  2. 命令输入提示增强:输入help后自动列出支持的命令,或为help <command>提供补全提示。

第二部分 软件工程分析

工作量分析

假设条件

  • 团队规模:6人(4名前端开发、1名测试工程师、1名运维/后端支持)
  • 技术栈:,为 Electron 的桌面应用,前端为主,依赖 Redis 协议通信。
  • 功能范围
    • 核心功能:Redis 连接管理、键值增删改查、数据格式展示(String/List/Hash等)、命令行交互。
    • 扩展功能:监控面板、批量操作、数据导入导出、多语言支持等。

阶段分解与时间估算

  1. 需求分析与架构设计(3-4周)
    • 明确功能优先级(如连接管理、键值操作、数据展示为 MVP)。
    • 设计通信层协议(基于 Redis RESP 协议)、数据渲染方案(如二进制数据兼容性)。
    • 关键依赖:需深入理解 Redis 协议及客户端交互逻辑。
  2. 核心功能开发(14-16周)
    • 通信层:实现 Redis 协议解析、Socket 连接池管理(占 3-4周)。
    • 数据展示层:支持多种数据格式渲染(String/JSON/Hex 等),处理二进制数据(如 \x0b 显示问题)(占 5-6周)。
    • UI 交互:连接配置界面、树形键列表、命令行终端模拟(依赖 UI 设计师配合)(占 4-5周)。
  3. 扩展功能与优化(6-8周)
    • 监控面板(内存/命令统计)、批量操作、快捷键支持。
    • 性能优化:大数据量渲染(虚拟滚动)、多线程通信。
  4. 测试与发布(4-5周)
    • 自动化测试:覆盖协议解析、数据渲染、边界场景(如超大数据、网络中断)。
    • 跨平台适配:Windows/macOS/Linux 打包及兼容性测试。

总工时估算

  • 基础版本(MVP):6-8个月(含核心功能 + 基础测试)。
  • 完整功能版本:10-12个月(含扩展功能、性能优化及跨平台适配)。
  • 关键风险:Redis 协议复杂性(如集群模式、Streams 数据类型支持)。

软件质量分析

评估维度说明

维度 权重 评估标准
功能覆盖 30% 支持 Redis 核心功能(集群/哨兵/SSL)、高级操作(慢日志/性能分析)、数据格式兼容性。
用户体验 25% 界面直观性、交互流畅度、文档完整性、学习成本。
跨平台支持 15% 支持主流操作系统(Windows/macOS/Linux)。
稳定性 15% 大数据量操作稳定性、崩溃频率、异常处理能力。
社区生态 10% 开源项目的维护频率、Issue 响应速度、文档与教程丰富度。
成本 5% 是否免费或开源,付费功能的必要性。

Redis Insight(官方工具)

维度 评分(★) 分析
功能覆盖 ★★★★★ 功能最全面(性能分析、慢日志、Lua 调试),官方优化支持。
用户体验 ★★★★☆ 交互专业但功能复杂,适合开发者;文档完整。
跨平台支持 ★★★★★ 全平台支持。
稳定性 ★★★★☆ 官方维护,稳定性高,但企业版功能需付费。
社区生态 ★★★☆☆ 社区版更新较慢,企业版依赖商业支持。
成本 ★★★☆☆ 社区版免费,企业版需付费。
综合排名第 1 名

Another Redis Desktop Manager

维度 评分(★) 分析
功能覆盖 ★★★★☆ 支持集群/哨兵/SSL、数据流、自定义格式化脚本,但缺少性能分析工具。
用户体验 ★★★☆☆ 界面简洁但高级配置复杂;文档不完善,新手需摸索。
跨平台支持 ★★★★★ 全平台支持(Windows/macOS/Linux)。
稳定性 ★★★☆☆ 大数据量操作偶发卡顿,二进制数据显示问题需优化。
社区生态 ★★★★☆ GitHub 开源社区活跃,但 Issue 解决速度一般。
成本 ★★★★★ 完全免费。
综合排名第 2 名

Redis Desktop Manager (RDM)

维度 评分(★) 分析
功能覆盖 ★★★☆☆ 基础功能完备,但缺乏集群/哨兵支持,高级分析工具少。
用户体验 ★★★★☆ 界面直观易用,适合新手。
跨平台支持 ★★★★☆ 支持多平台,但部分版本更新受限。
稳定性 ★★★☆☆ 开源版本维护不足,可能存在兼容性问题。
社区生态 ★★★☆☆ 开源社区活跃度一般,文档较简单。
成本 ★★★★★ 完全免费。
综合排名第 3 名

Redis Insight 凭借官方支持和全面功能稳居榜首,适合企业级需求,Another Redis Desktop Manager 因开源免费和高级特性支持位列第二,适合开发者。

软件工程改进建议

亟需改进的方面:测试覆盖率与异常处理

  1. 问题根源
    • 二进制数据显示异常、help 命令缺失等问题,直接暴露了测试用例对边界场景(如非UTF-8数据、命令兼容性)覆盖不足。
  2. 具体改进方案
    • 增强自动化测试
      • 针对 Redis 协议实现单元测试(如 RESP 解析、命令兼容性)。
      • 添加二进制数据场景的 E2E 测试(如写入 \x00-\x1F 字符并验证显示)。
    • 完善异常处理
      • 对解码失败的数据提供 Hex 或 Base64 格式回退显示,而非静默丢弃。
      • 在 UI 中增加错误提示(如“数据包含不可见字符,建议切换至 Hex 模式”)。
  3. 长期收益
    • 减少用户可见的 Bug,提升工具可靠性。
    • 为后续功能扩展(如集群支持、监控告警)奠定稳定基础。

第三部分 建议与规划

市场现状分析

市场概况
  • 直接用户规模
    Redis 作为全球主流的 NoSQL 数据库(DB-Engines 排名前 5),其管理工具的直接用户包括开发者、运维人员及数据团队,全球活跃用户约 300 万(参考 Redis 2023 年用户报告)。
  • 潜在用户规模
    随着微服务与云原生架构的普及,Redis 在缓存、实时分析等场景的应用持续增长,潜在用户(中小型团队、企业开发者)预计超 1000 万
竞争产品态势
产品 定位 优势 劣势
Redis Insight 企业级性能分析与调优 官方支持、功能全面 高级功能付费、社区版更新滞后
Another Redis Desktop Manager 开源多平台管理工具 免费、支持集群/哨兵 文档缺失、高级功能学习成本高
RDM 轻量级跨平台工具 简单易用、适合新手 功能基础、无集群支持

市场与产品生态

核心用户群分析
  • 典型用户画像

    维度 描述
    职业 中高级开发者、DevOps 工程师、云架构师
    需求 高效管理 Redis 集群、支持复杂部署(哨兵/集群)、实时监控
    痛点 现有工具缺乏团队协作能力、学习成本高、性能分析功能不足
  • 用户生态关系

    • 开发者社区:用户集中在 GitHub、Stack Overflow 等技术平台,可通过开源协作功能增强粘性。
    • 企业客户:需审计日志、权限管理等团队功能,可推出企业版实现增值变现。
产品生态扩展
  • 子产品联动
    • 开发 浏览器插件,与 Kibana/Grafana 集成,支持可视化监控数据导出。
    • 推出 移动端轻量版,实现基础监控与告警功能,覆盖多场景需求。

产品规划

新功能设计 - 分组功能

需求(Need)

  • 用户痛点
    • 用户连接实例数量激增后,难以快速定位目标实例(如开发、测试、生产环境混合)。
    • 现有工具仅支持扁平化列表,缺乏灵活的分组管理能力。
  • 核心诉求
    • 支持多级分组与自定义分隔符(如按 项目/环境/集群 层级分类)。
    • 提供分组拖拽排序、折叠展开、批量操作功能。

9263c5a373e35cf9e5c6c36b68a2d87

方法(Approach)

  • 功能 1:多级分组与自定义分隔符
    • 交互设计
      • 用户可通过输入分隔符(如 /-)定义分组层级(例如 电商项目-生产环境)。
      • 支持树形结构展示,允许拖拽连接或分组调整位置。
    • 技术实现
      • 后端:使用嵌套 JSON 结构存储分组层级关系,兼容现有连接数据。
      • 前端:基于树形组件(如 Ant Design Tree)实现动态渲染与交互。
  • 功能 2:分组同步与共享(企业版)
    • 云端同步分组配置,支持团队内分组共享与权限管理(管理员/只读)。
    • 提供分组导入/导出功能(JSON/YAML 格式),支持与 CI/CD 工具集成。

收益(Benefit)

  • 效率提升:用户管理连接的时间预计减少 40%+(参考 JIRA 同类功能用户反馈)。
  • 竞争力增强:填补 Redis 管理工具中灵活分组功能的空白,吸引企业团队用户。

竞争(Competition)

  • Redis Insight:仅支持标签分类,无法定义多级目录。
  • Medis:分组功能仅限 macOS,且无同步能力。
  • 差异化优势:跨平台、多级分组、企业级协作支持。

交付(Delivery)

  • 开源版本:基础分组功能免费开放,通过 GitHub 社区宣传。
  • 企业版:高级同步与权限管理功能订阅制($10/团队/月),与云厂商合作预装推广。

团队角色配置

角色 人数 职责
后端开发 2 分组存储设计、同步服务开发、API 接口实现
前端开发 2 树形交互开发、拖拽功能优化、UI 联调
测试/运维 1 自动化测试、性能压测、跨平台验证
UI/UX 设计师 1 分组界面设计、交互流程优化、动效制作

16 周详细规划

阶段 周数 任务
需求与设计 1-2 - 用户调研(Issue 分析、问卷收集) - 交互原型设计(Figma) - 技术方案评审(分组存储结构、同步协议)
核心功能开发 3-8 - 后端:分组存储逻辑实现(3-4 周) - 前端:树形组件集成与拖拽交互(5-6 周) - 基础分组功能联调(7-8 周)
高级功能开发 9-12 - 后端:分组同步服务开发(9-10 周) - 前端:权限管理模块实现(11 周) - 导入/导出功能开发(12 周)
测试与优化 13-14 - 压力测试(支持 5000+ 连接与 100+ 分组) - 交互优化(响应时间 ≤200ms) - 兼容性测试(Windows/macOS/Linux)
发布与推广 15-16 - 文档编写(分组操作指南、API 文档) - 社区推广(GitHub Release、技术博客) - 企业版预售(官网落地页、邮件营销)
posted @ 2025-03-16 22:28  voidy  阅读(116)  评论(0)    收藏  举报