Ramisali007/healthbridge-sre-analysis
GitHub: Ramisali007/healthbridge-sre-analysis
一套面向遗留 Java 医院管理系统的软件重建项目,整合了 SonarQube 静态分析、数据库模式规范化、数据异味识别和 Prisma ORM 驱动的 ETL 迁移全流程。
Stars: 0 | Forks: 0
# SRE 期末项目 — 重建传统医院管理系统
**课程:** 软件重建 (BSSE-8B)
**作者:** Ramis Ali (22F-3703) & Kamil Mohsin (22F-3713)
## 项目概述
本项目将完整的软件重建流程应用于:
1. **一个 Java 项目** (ZainAftab-dev/hospital-management-system) 用于代码分析 (A–D 部分)
2. **传统的 HealthBridge Hospital schema** 用于数据库重建 (E–G 部分)
## 仓库结构
```
SRE_FINAL_PROJECT/
├── java-project/ # Cloned HMS Java project
├── sql-scripts/
│ ├── 01_legacy_schema.sql # Legacy schema + sample data
│ ├── 02_normalised_schema.sql # Normalised tables (3NF)
│ └── 03_refactoring_scripts.sql # Five refactoring operations
├── prisma/
│ ├── schema.prisma # Prisma ORM schema definition
│ └── .env # Database connection string
├── migration/
│ ├── migration_etl.py # Python ETL script
│ └── legacy_appointments.csv # Sample legacy CSV data
├── sonar-project.properties # SonarQube scanner config
├── docs/ # Report and screenshots
└── README.md # This file
```
## 设置说明
### 1. 启动 SonarQube (Docker)
```
# 拉取并运行 SonarQube Community Edition
docker run -d --name sonarqube -p 9000:9000 sonarqube:community
# 等待约 60 秒,然后访问 http://localhost:9000
# 默认凭据:admin / admin
```
### 2. 运行 SonarScanner
```
# 导航到 Java 项目目录
cd java-project
# 将 sonar-project.properties 复制到项目根目录
cp ../sonar-project.properties .
# 运行 SonarScanner(必须已安装并位于 PATH 中)
sonar-scanner
```
### 3. 加载医院传统 Schema (MySQL)
```
# 登录 MySQL
mysql -u root -p
# 创建数据库
CREATE DATABASE healthbridge;
USE healthbridge;
# 加载 legacy schema
source sql-scripts/01_legacy_schema.sql;
# 加载 normalised schema
source sql-scripts/02_normalised_schema.sql;
# 运行 refactoring scripts
source sql-scripts/03_refactoring_scripts.sql;
```
### 4. 设置 Prisma
```
# 安装 Prisma
npm install prisma --save-dev
# 初始化 Prisma
npx prisma init
# 从 prisma/ 目录复制 schema.prisma
# 使用你的数据库 URL 更新 .env
# 运行 migrations
npx prisma migrate dev --name init
# 生成 Prisma Client
npx prisma generate
```
### 5. 运行迁移脚本
```
# 安装 Python 依赖
pip install mysql-connector-python
# 运行 ETL 迁移
cd migration
python migration_etl.py
```
### 6. 迁移后验证
```
-- V1: Row count
SELECT COUNT(*) AS migrated_rows FROM appointments;
-- V2: No NULL dates
SELECT COUNT(*) AS null_dates FROM appointments WHERE appt_datetime IS NULL;
-- V3: Valid statuses only
SELECT DISTINCT status FROM appointments;
-- V4: No orphan appointments
SELECT COUNT(*) AS orphans FROM appointments a
LEFT JOIN patients p ON a.patient_id = p.patient_id
WHERE p.patient_id IS NULL;
```
## 使用工具
| 工具 | 版本 | 用途 |
|------|---------|---------|
| Docker | 24.x+ | 托管 SonarQube 容器 |
| SonarQube | 10.x Community | 静态分析与指标度量 |
| SonarScanner | 5.x | 将项目提交至 SonarQube |
| MySQL | 8.0+ | 传统医院数据库 |
| Python | 3.10+ | 迁移 ETL 脚本 |
| Prisma | 5.x | 用于数据库任务的 ORM |
| Draw.io | Online | 依赖关系与 CFG 图 |
| Python Tutor | Online | 单步执行跟踪 |
| AST Explorer | Online | 抽象语法树检查 |
## 被分析的 Java 项目
**仓库:** https://github.com/ZainAftab-dev/hospital-management-system
**语言:** Java 8+ (100% Java)
**架构:** Swing GUI + 基于文件的 DAO + 服务层
**总类数:** 25+
**代码行数:** ~4,500+
## 许可证
本项目仅供学术用途 — 软件重建课程,BSSE-8B。
标签:Docker, ETL迁移, Java代码分析, JS文件枚举, MITM代理, Prisma ORM, Python, SonarQube, SQL脚本, 代码度量, 代码异味检测, 代码质量评估, 依赖耦合, 医院管理系统, 域名枚举, 多线程, 安全防御评估, 数据库重构, 数据异味识别, 数据清洗, 无后门, 架构优化, 模式规范化, 请求拦截, 软件再工程, 软件工程课程设计, 逆向工具, 遗留数据库, 遗留系统重构, 错误基检测, 静态代码分析