探索与分析实践中的软件结构重构

本文研究的内容

软件持续迭代使软件结构恶化,软件质量降低。重构就有必要了。本篇就是(通过分析帖子)研究实践中的软件结构重构。(我嘞个软件云重构)。 分析694个帖子中的3468条讨论,基于两种分类维度,分出了12种结构重构。

Through our analysis of 694 posts with 3,468 discussion threads, we identified 12 types of architecture refactoring basedon two classification dimensions

总结了开发者面临的软件结构问题,并给予这些问题相应的重构方案。

we categorized architecture problems faced by practitioners and explored their corresponding refactoring solutions.

总结了6个可能导致软件重构的风险。

we revealed six potential risks that may result from architecture refactoring.

研究方法

回答的问题: 1.有哪些常见的重构类型? 2.什么样的结构问题,最常导致重构? 3.重构中,最常采用的方案是? 4.重构会带来哪些潜在危害?

通过在stack overflow平台上进行通配符搜索得到本次的信息源,

Therefore, we defined “architect∗” as related to architecture and “refactor∗” as related to refactoring. Then we combined these terms (“architect∗ refactor∗”) to represent architecture refactoring….Finally, we retrieved a total of 3,468 posts.

人工筛选符合重构的帖子

Second, to guarantee the relevance and quality of our col-lected data, we further conducted a manual screening process.Two authors independently reviewed each post to determine its applicability to our study.

并移除重复的答案(针对类似问题)

Third, since Stack Overflow allows multiple answers to a single question, we further processed the data to remove duplication.

收集合格的帖子的浏览量与评分(通过官方api)

For these collected posts, we further called the Stack Overflow API [61] to retrieve their basic metrics, including the number of views, votes, and posting time. On average, each post receives 2,273 views and has a 4.1 score.

人工归纳结构重构的类型,将相似主题的归纳为一类,比如(e.g., “Module Refactoring”, “Maintainability Refactoring”)

两个人单独分析这些问题,遇到分歧,则在另一个有行业经验与学术背景的人的指导下解决。

结果

从两个维度进行分类(共12个类别),得到下表(回答问题1)

模块问题最常导致重构(回答问题2)

编码,结构性的灵活的问题才是更应该关注的,正如Claude在1月份的报告中提到。

这里提到了Requirements-Architecture Mismatch.(架构与需求不匹配),随着需求的增加,原有的架构不适应与现在的需求。这里采用微服务的方式来解决。

将单体架构中耦合的业务模块拆分为按领域 / 职责划分的独立微服务(如订单、支付、用户、商品服务),每个服务可独立开发、测试、部署。当业务产生新需求时,仅需对对应微服务进行修改 / 拓展,无需改动整个系统,解决了单体架构 “改一点动全身” 的问题,适配高频的需求变更。

性能问题,引入多线程。这里不是简单的引入多线程,而是推荐采取类似Node.js中的异步io方式(当然这里针对计算密集型任务的多线程方案),一个主线程不停接收请求,转而将接收到的请求交给下面的worker线程来完成。前者是大堂经理,后者是服务人员。

重构后可能带来:性能不佳,函数功能改变了等问题。下表提供了每种可能出现的风险,及其占比。

总结

优化系统模块,增强可维护性,是实践结构重构中最为常见的做法。 也就是说通过解决模块问题的重构,提高整体系统的可维护性是重建中的常见做法。

indicating that optimizing system modules and enhancing maintainability are the most prominent

补充:

案例研究——mirofish

介绍:基于多智能体的平行世界仿真(类似舆情推演) 操作:上传相关文档,提出问题,等待多智能体推演。 需求分析 静态分析的本质局限:传统系统以历史数据统计、机器学习拟合为核心逻辑,完全忽略复杂系统中 “个体交互→群体反馈→环境干预→趋势突变” 的动态闭环。例如舆情预测中,无法模拟 “关键用户发声→圈层传播→平台算法放大→跨平台共振” 的完整过程,预测结果与真实场景偏差显著。 预测颗粒度的层级缺失:传统系统多聚焦 “宏观趋势输出”,难以穿透到 “个体行为” 层面 —— 既无法还原不同角色(如普通用户、意见领袖、媒体)的差异化行为逻辑,也无法解释 “为何某个微小事件会引发群体行为转向”,导致预测结果缺乏可解释性,无法支撑决策层的精细化干预。 而mirofish中智能体可触发 / 响应事件(如初始帖子发布、热点话题参与),模拟 “关键用户发声”; 支持对单个 / 批量智能体发起 “采访” 指令,模拟 “人工干预 / 外部事件冲击”; 来满足上述需求。 功能设计:发布问卷(向多智能体发布)、推演舆情走向生成推演结果报告、对话(与实体仿真agent进行对话)等 体系结构:

创新点: 1.使用简单,用户上传文档并提出问题,即可推演。用户可是在推演轮数,推演轮数对应于现实世界中多少天。 2.技术创新,区别于传统 “数据统计 + 机器学习” 的预测模式,MiroFish 通过 GraphRAG 构建现实世界的实体关系图谱,再基于图谱生成高多个智能体,模拟 “个体交互→群体涌现” 的完整过程.在上传文档进行推演后,可以选择个体或全体进行对话。