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

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

项目 内容
这个作业属于哪个课程 2025年春季软件工程(罗杰、任健)
这个作业的要求在哪里 [I.2]个人作业:软件案例分析
我在这个课程的目标是 提升前后端开发能力,掌握软件工程方法,强化团队协作和项目管理能力,实现高效的软件开发实践。
这个作业在哪个具体方面帮助我实现目标 理解软件工程核心概念,培养批判性思维,提高对需求分析、软件设计、测试及团队协作的理解

0. 选题

Open source is FREE!

基于开源工具Geant4进行分析。结合官网给出的介绍,Geant4(几何与跟踪)是由欧洲核子研究组织(CERN)开发的一个开放源代码软件工具包,旨在模拟粒子穿过物质时的行为。

这是一个用于模拟粒子穿过物质的工具包。其应用领域包括高能物理、核物理和加速器物理,以及医学和空间科学研究。

  • 几何模块:定义实验的物理布局,如探测器和吸收体的形状、大小和材料等。
  • 跟踪模块:模拟粒子通过物质时的路径,考虑可能的相互作用和衰变过程。
  • 探测器响应模块:记录粒子通过探测器时的信号,模拟实际探测器的响应。
  • 运行管理模块:管理和记录每次运行的详细信息,允许在不同运行之间设置实验的不同配置。
  • 可视化模块:提供多种可视化选项,如OpenGL等,用于展示实验几何结构和粒子轨迹。

1. 软件评测

1.1 软件使用

软件安装的服务器硬件配置如下:

Name Detail
CPU 4*Intel Xeon Gold 6530
2.10GHz 64 cores
Memory 384GB DDR5
Hard disk 2TB SSD
FDR-IB switch Mellanox InfiniBand switch, 36 QSFP port
HCA Card Mellanox ConnectX-3 HCA card, single port QSFP, HDR
GbE switch 24 ports Gigabit Unmanaged switch
Gigabit CAT6 cables 1*CAT6 copper cable, blue, 3m
InfiniBand cable 1*InfiniBand FDR optical fiber cable, QSFP port, cooperating with the InfiniBand switch for use
GPU 4*NVIDIA Tesla A100, PCIE, 40GB, 6912 CUDA cores

但是这里我们并没有用到GPU。

下载软件

在工作目录下:

git clone git@github.com:Geant4/geant4.git 

编译安装

#! /bin/bash
# 确保这些目录都存在
cd /home/hj/Geant4/build
cmake -DCMAKE_INSTALL_PREFIX=/home/hj/Geant4/install -DGEANT4_INSTALL_DATA=ON /home/hj/Geant4/geant4-11.3.0/
# 可能下载数据集报错,那就手动下载
# cmake -DCMAKE_INSTALL_PREFIX=/home/hj/Geant4/install -DGEANT4_INSTALL_DATA=OFF /home/hj/Geant4/geant4-11.3.0/
# 安装到  /home/hj/Geant4/install/share/Geant4/data
# 手动下载数据集
# wget https://cern.ch/geant4-data/datasets/G4NDL.4.7.1.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4EMLOW.8.6.1.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4PhotonEvaporation.6.1.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4RadioactiveDecay.6.1.2.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4PARTICLEXS.4.1.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4PII.1.3.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4RealSurface.2.2.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4SAIDDATA.2.0.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4ABLA.3.3.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4INCL.1.2.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4ENSDFSTATE.3.0.tar.gz
# wget https://cern.ch/geant4-data/datasets/G4CHANNELING.1.0.tar.gz
make -j32
make install

cd /home/hj/Geant4/install/share/Geant4/datasets
source download.sh # 使用source会保留环境变量
for file in *.tar.gz; do tar -xzvf "$file"; done

运行软件(命令行版):

运行该软件有交互式和直接将将.mac文件作为输入即可两种方式

source /home/hj/Geant4/install/bin/geant4.sh
cd /home/hj/Geant4/install/share/Geant4/examples/basic

i=1
mkdir -p exampleB$i-build
cd exampleB$i-build
cmake -DGeant4_DIR=/home/hj/Geant4/install/lib/Geant4/ ../B$i
make -j 16 exampleB$i
# make install 
time ./exampleB$i run1.mac >> run1.log
time ./exampleB$i run2.mac >> run2.log

如果直接运行./exampleB1即可进入交互式运行

运行照片:

直接运行run1.mac和run2.mac

交互式运行:


由于该项目提供了可视化接口,为了方便使用,我打开了我的双系统中的debian12,然后使用可视化界面

sudo apt install gcc cmake libxerces-c-dev libfreetype6-dev \
     qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
     libxmu-dev
cmake -DCMAKE_INSTALL_PREFIX=./ -DGEANT4_USE_FREETYPE=ON    \
    -DGEANT4_USE_GDML=ON    \
    -DGEANT4_USE_QT=ON      \
    -DGEANT4_USE_OPENGL=ON \
    -DGEANT4_USE_OPENGL_X11=ON \
    -DGEANT4_USE_RAYTRACER_X11=ON \
    /home/hj/Geant4/geant4-11.3.0

相应地在命令行会有如下输出:

1.2 软件分析

通过分析.mac文件以及查看文档可以发现:Geant4 的基本使用流程如下:

  1. 定义几何结构
    • 用户创建模拟实验的几何结构,例如粒子探测器、目标材料等。
    • 使用 C++ 代码编写几何描述,并指定各部分的材料属性。
  2. 设置物理过程
    • 选择合适的物理模型(如电磁、强相互作用、衰变等)。
    • 设置粒子的交互规则,例如能量损失、散射、湮灭等。
  3. 定义粒子源
    • 设定初始粒子类型(如光子、电子、质子等)、能量分布和方向。
  4. 运行模拟
    • 执行模拟,Geant4 会追踪每个粒子在材料中的运动路径和相互作用过程。
    • 结果数据可以存储到文件中供后续分析。
  5. 可视化与结果分析
    • Geant4 提供 OpenGL、VRML、DAWN 以及 ROOT 等可视化工具来观察粒子轨迹。
    • 通过外部分析工具(如 Python、ROOT)处理和分析输出数据。

Geant4 适用于需要精确模拟粒子与物质相互作用的应用场景,例如:

  • 高能物理实验(如 CERN 的 ATLAS、CMS 实验)。
  • 核医学与放射治疗(如质子治疗剂量计算)。
  • 宇宙射线研究(如 NASA 空间探测器辐射防护评估)。
  • 辐射探测器设计(如高能物理实验中的硅探测器)。

对于这些领域的用户,Geant4 提供了一种高精度、可扩展的仿真框架,基本能够满足需求。但其学习曲线陡峭,对于初学者可能需要较长时间掌握 C++ 编程和物理模型的配置。在这里我也花了很多时间进行配置,特别是数据集的配置需要花费比较多的时间。


进行基本的测试后,首先对于该软件给出的不同example进行了基本的时间测试,测试结果如下:

example run1.mac time run2.mac time
1 real 0m2.055s real 0m2.224s
2a real 0m3.113s real 0m2.947s
2b real 0m3.001s real 0m3.013s
3a real 0m1.183s real 0m1.861s
3b real 0m1.088s real 0m1.830s
4a real 0m2.772s real 0m3.025s
4b real 0m2.755s real 0m3.020s
4c real 0m2.877s real 0m3.073s
4d real 0m2.875s real 0m3.260s
5 real 0m3.399s real 0m5.270s

找到一个稍微大一点的数据集:

data time
extended/hadronic/Hadr07 real 0m3.903s
user 0m12.500s
sys 0m4.612s

数据量/界面/功能/准确度/用户体验分析

维度 优点 缺点
数据量 能处理大规模粒子跟踪数据,适用于高能物理实验 计算资源需求高,模拟时间长,存储需求大
界面 提供多种可视化工具,如 OpenGL、VRML、DAWN 无 GUI 交互界面,主要依赖 C++ 代码编写
功能 提供全面的粒子物理仿真功能,支持用户自定义扩展 入门难度高,需要较强的编程能力
准确度 基于精确的物理模型,支持多种粒子相互作用 计算精度依赖于用户选择的物理模型,可能需要优化参数
用户体验 开源、可定制,社区活跃,有详细文档 学习成本高,缺乏友好的入门工具,调试难度较大

总而言之:

  • 适用人群:科研人员、高能物理学家、医学物理学家、航天工程师。

  • 适用场景:粒子物理实验模拟、医学放疗计算、航天辐射研究、探测器优化设计。

  • 主要优势:开源、可扩展、高精度、多物理过程支持。

  • 主要劣势:无 GUI 界面、学习成本高、计算资源需求大。

1.3 改进意见

Geant4 的安装过程较为复杂,涉及多个依赖项(如 CMake、GCC、CLHEP、ROOT 等),而且不同操作系统下的配置可能会有所不同。针对这一问题,以下是一些改进建议:

1. 提供一键安装包

问题:用户需要手动编译 Geant4,配置 CMake 选项,容易出现兼容性问题。
改进建议

  • 官方提供预编译安装包:针对不同操作系统(Windows、Linux、macOS)提供 预编译的二进制包,避免用户手动编译。
  • 支持 Conda 安装:提供 conda install geant4,让用户可以直接通过 Conda 进行一键安装,而无需处理依赖项。
  • 提供 Windows MSI / macOS DMG 安装包:让非 Linux 用户也能轻松安装,而不需要配置 CMake 和编译环境。

2. 提供基于 Docker / 容器的安装方式

问题:Geant4 依赖多个软件包,不同系统的环境可能会导致安装失败。
改进建议

  • 官方提供 Docker 镜像,用户可以直接运行:

    docker run -it geant4/geant4 bash
    

    这样就可以在隔离环境中使用 Geant4,而不需要修改本地系统环境。

  • 支持 Singularity 容器,适用于 HPC 计算集群,便于高性能计算环境下的部署。


3. 改进 Windows 兼容性

问题:Windows 安装 Geant4 较为复杂,需要安装 MinGW 或 Windows Subsystem for Linux(WSL),而且不支持所有 Geant4 功能。
改进建议

  • 官方支持 Windows 原生版本,不需要 WSL 或 Cygwin,即可运行 Geant4(如基于 Microsoft MSVC 进行官方编译)。
  • 增强 Visual Studio 支持,提供 .sln 解决方案文件,方便 Windows 用户使用 VS 编译和调试。

4. 设计更简洁的安装流程

问题:Geant4 需要手动配置环境变量,并手动安装 geant4-data
改进建议

  • 自动下载数据包:安装时自动检测缺失的数据文件并下载,例如:

    geant4-config --install-data
    
  • 提供 geant4-setup 脚本:自动配置环境变量,减少用户手动修改 .bashrc.profile 的麻烦。

1.4 用户调研

这里我们调研了武宇坤同学关于这个软件的基本认识。

个人认为这种科学应用软件在我们学生中的使用还是太少了

相对不用户友好的页面给我们的使用还是带来了比较大的困惑。

1.5 评测结论

Geant4 在物理模拟方面表现优异,但安装复杂,学习成本较高。如果是专业用户(如高能物理研究人员),Geant4 是非常值得推荐的。但对于新手或计算机背景的用户,初始使用体验较差,需要投入较多时间学习。

类别 描述 评分(满分 10 分)
核心功能 物理过程建模、粒子跟踪、探测器模拟等 9
细节 提供详细的物理模型和参数调整选项 8
用户体验 交互界面不友好,配置较复杂 5
辅助功能 支持 GUI 可视化工具,但配置较难 6
差异化功能 独特的物理模拟能力,适用于多领域 9
软件效能 计算效率高,有并行支持 10
适应性 适用于 Linux/Windows/macOS,但 Windows 兼容性一般 7
成长性 版本迭代快,社区活跃 8
用户控制权 需要手动调整大量参数,初学者不友好 5
自选评分(安装体验) 依赖较多,安装复杂 4

总体评价为c)一般

2. Bug分析和提交

2.1 测试环境

为我本机的debian12系统,具体信息如下:

Name Detail
CPU 12th Gen Intel(R) Core(TM) i5-12500H
2.50GHz 12 cores
Memory 16GB 4800 MT/s
GPU Intel(R) Iris(R) Xe Graphics

在运行exampleB1的时候图形化界面的显示有bug。

2.2 可复现性及具体复现步骤

在命令行运行exampleB1,然后进行多次渲染即可。

2.3 Bug具体情况描述

如图

2.4 Bug分析

尝试 OpenGL 可视化

在 Geant4 示例中运行以下命令:

./exampleB1

然后在 Geant4 终端中输入:

/vis/open OGL
/vis/viewer/set/viewpointThetaPhi 60 30
/vis/drawVolume

尝试 OGLSXOGLIQt

/vis/open OGLIQt

使用 MESA 渲染

感觉可能是 Intel 核显的驱动可能会导致 OpenGL 兼容性问题,尝试强制使用 MESA:

export LIBGL_ALWAYS_SOFTWARE=1
./exampleB1

我感觉可能还是因为我的电脑性能问题。。。

2.5 Bug改进建议

对于这个 Geant4 可视化 bug,除了尝试修复 OpenGL 在 Intel Iris Xe Graphics 上的兼容性问题外,还可以考虑 改进 Geant4 的可视化系统,以提升用户体验,特别是提供更现代化的展示方式。

提供基于 Web 的可视化前端

建议: Geant4 可以增加一个基于 WebGL 或 WebGPU 的可视化前端,让用户可以直接在浏览器中查看 3D 物理模拟结果,而不依赖于本地 OpenGL 驱动。

  • 使用 WebGL (Three.js / Babylon.js): 允许 Geant4 导出几何模型,并在网页端进行渲染,例如:
    • 生成 .gltf / .obj / .stl 文件,让用户在 Web 端查看模拟结果。
    • 通过 WebSockets 实时传输模拟数据,让网页端动态渲染粒子轨迹。
  • 使用 WebGPU (wgpu / Babylon.js): 比 WebGL 具有更好的 GPU 兼容性,避免 OpenGL 依赖问题。

增强 Geant4 可视化的远程支持

建议: 目前 Geant4 的 OpenGL 依赖于本机渲染,但可以增加远程渲染支持,例如:

  • 基于 VTK + ParaView:使用 VTK 生成 3D 视图,并通过 ParaView 服务器提供远程访问。
  • 通过 WebSockets 提供数据流:让 Geant4 服务器推送模拟结果到远程前端(类似 Jupyter Notebook + Plotly 方式)

2.6 Bug反馈

通过官方给出的渠道对问题进行了反馈,具体图片和链接如下:

https://bugzilla-geant4.kek.jp/show_bug.cgi?id=2648

3. 分析

3.1 工作量分析

工作量还是很大的,毕竟可是有87万行代码的(

功能模块 子功能 开发时间估算(人月)
物理引擎 物理过程建模(电磁、强相互作用、弱相互作用等) 12
粒子跟踪 粒子探测、碰撞、散射、吸收等 10
几何建模 复杂几何体支持、材料属性计算 8
模拟控制系统 运行管理、参数调整、输入/输出接口 6
并行计算优化 多线程支持、GPU 加速 8
用户界面(UI) GUI 设计、3D 可视化 6
安装与部署 编译支持、跨平台兼容性(Windows/Linux/macOS) 6
文档与教程 官方文档、示例代码、用户指南 4
测试与优化 单元测试、集成测试、性能调优 6

假设完全从零开发一个类似 Geant4 的软件,6 人团队至少需要 1 年时间,并且仍需持续维护和优化。如果基于现有开源框架改进 Geant4 的安装和 UI 体验,则可以缩短到 6-8 个月

3.2 软件质量分析

软件的架构非常优秀。

在该图表的底部,提供整个工具包的基本服务的包包括:

  • global:处理基本功能(单位系统、物理常数、数学方法和随机数)。
  • materialgeometry:用于实验装置的建模。
  • particle:编码粒子特征。
  • graphic_repsintercoms:封装用于图形显示和与 Geant4 内核交互的基本方法。

在这些包之上,核心的粒子输运部分包括:

  • track:负责输运的关键部分,包括轨迹和步长相关的类。
  • processes:处理粒子在输运过程中发生的相互作用。
  • digits_hits:负责生成实验装置对物理过程的响应。
  • tracking:管理粒子输运的演化及其在实验装置中敏感体积内的影响。
  • runevent:用于模拟的控制。

此外,interfacesvisualisationpersistency 依赖于上述包,并通过抽象接口连接外部设施,实现仿真的控制、可视化以及数据的持久化存储。

这种面向对象的架构有如下优势:

模块化设计:各个功能被拆分成独立的包,方便维护和扩展。用户可以针对特定需求修改或替换某些模块,而不会影响整个系统。

高内聚、低耦合:每个包都围绕特定功能设计,依赖关系清晰,减少了不同模块之间的耦合,提高了系统的可维护性和可重用性。

扩展性强:用户可以通过继承和多态机制轻松扩展功能,例如添加新的物理过程或自定义的可视化方法。

清晰的层次结构:底层提供基础服务,上层模块依赖底层模块,形成逻辑清晰的层次结构,有助于理解和开发。

面向用户的灵活性:通过接口和抽象层,用户可以无缝地连接外部工具,如可视化引擎、数据库或其他计算工具,增强系统的适应性和兼容性。

G4UserRunAction 是 Geant4 内核中的一个类,负责在用户定义的实验场景中组织粒子输运,并在仿真过程中通过一组初始化和动作类与 Geant4 内核交互。这些类是从 Geant4 内核中已有的基类派生而来的。

在图中以黄色显示的这些类允许用户自定义仿真,它们负责:

  • 生成输入到仿真中的初级粒子
  • 建模实验装置
  • 选择与实验问题相关的物理过程和模型
  • 在仿真不同阶段与输运内核交互

图中的类图反映了所有基于 Geant4 的仿真的概念配置,而在大规模实验的仿真中,Geant4 需要复杂的软件设计和实现来进行详细建模。

4. 建议和规划

4.1 市场现状

Geant4 是一个用于模拟粒子与物质相互作用的开源软件框架,广泛应用于高能物理、医学物理、空间科学等领域。

市场概况:

  • 直接用户: 主要包括高能物理研究人员、医学物理学家、空间科学家和核工程师等专业人士。
  • 潜在用户: 随着核技术应用产业的快速发展,相关领域的研究人员和工程师数量持续增长。根据国家原子能机构的报告,2019 年我国核技术应用产业的年产值约为 5000 亿元,是 2010 年的 5 倍,年增长率保持在 15%~20% 之间。 citeturn0search1

竞争产品:

  • EGSnrc: 主要用于电子和光子输运模拟,采用 Fortran 和 MORTRAN3 语言编写,代码阅读和维护难度较大。
  • OpenMC: 基于 Python 和 C++ 的中子输运模拟软件,安装相对方便,支持通过 Conda 或 Docker 容器进行安装,但并行化能力相对较弱。
  • MCNP 和 Tripoli: 这两款软件在中子和光子输运模拟领域具有广泛应用,但由于未开源,获取和使用受到限制。

产品定位、优势与劣势:

  • Geant4:
    • 优势: 功能全面,适用于多种粒子和能量范围的模拟,拥有活跃的用户社区和丰富的文档支持。
    • 劣势: 安装和配置过程复杂,学习曲线陡峭。
  • EGSnrc:
    • 优势: 在电子和光子输运模拟方面具有高精度。
    • 劣势: 采用 Fortran 和 MORTRAN3 语言,代码维护和扩展性差,用户界面不友好。
  • OpenMC:
    • 优势: 安装简便,具有现代化的代码结构,易于扩展。
    • 劣势: 并行计算能力相对不足,可能影响大规模模拟的效率。
  • MCNP 和 Tripoli:
    • 优势: 功能强大,经过长期验证,可靠性高。
    • 劣势: 未开源,获取和使用受到限制,社区支持相对较少。

竞争态势:

Geant4 凭借其开源特性和广泛的应用领域,在市场上占据重要地位。然而,复杂的安装和使用过程可能阻碍新用户的采用。EGSnrc 和 OpenMC 各自在特定领域有优势,但也存在局限性。MCNP 和 Tripoli 虽功能强大,但由于未开源,使用受限。总体而言,Geant4 在功能全面性和社区支持方面具有优势,但需要在用户体验和易用性方面进行改进,以保持竞争力。


因此Geant4的论文的引用量远大于其他使用蒙特卡洛模拟的软件

4.2 市场与产品生态

1. 核心用户群

  • 典型用户: 硕士及以上学历,物理学、核工程、医学物理等领域科研人员。
  • 年龄范围: 25-45 岁。
  • 主要需求: 精确模拟粒子与物质相互作用,支持实验设计和数据分析。
  • 潜在需求: 安装简便、易用性提升、丰富学习资源、技术支持完善。

2. 用户群体关系与生态

  • 学术会议、在线论坛、邮件列表 促进用户交流。
  • 合作研究项目 形成科研团队合作生态。
  • 开源社区 提供代码贡献和改进机会。

3. 产品生态

  • 子产品: GATE(医学成像)、GRAS(航天辐射分析)。
  • 相关工具: CERN ROOT(数据分析)、MCNP(竞争产品)。
  • 竞争态势: Geant4 开源灵活但安装复杂,OpenMC 便于安装但并行性较弱,EGSnrc 代码阅读难度较大,MCNP/Tripoli 未开源。

4.3 产品规划

1. 新功能设计

功能:Geant4 一键安装与图形化配置工具

  • 目的:降低 Geant4 安装与配置的复杂度,提高用户体验,减少新用户入门门槛。
  • 方式:
    • 一键安装:提供 Windows、Linux、MacOS 预编译版本,并支持 Conda、Docker 快速安装。
    • GUI 配置工具:提供基于 Qt/PyQt 的图形化界面,让用户可视化选择物理模型、材料、探测器等。
    • 自动环境检测:智能识别缺失的依赖项,并引导用户安装。

2. NABCD 分析

  • N(Need,需求)
    • Geant4 安装繁琐,尤其是新手难以上手,依赖库配置复杂。
    • 研究人员希望能更快地搭建模拟环境,将更多时间放在研究上。
  • A(Approach,做法)
    • 提供官方预编译安装包,支持 Conda、Docker 直接安装。
    • 开发 GUI 让用户直观配置 Geant4 环境,无需手动修改 CMake 选项。
  • B(Benefit,好处)
    • 降低入门门槛,使更多科研人员能快速使用 Geant4。
    • 减少因环境配置问题导致的错误,节省调试时间。
  • C(Competitors,竞争)
    • OpenMC 具有更简便的安装方式,但功能不及 Geant4 强大。
    • MCNP 由于未开源,用户无法自由优化安装方式。
  • D(Delivery,推广)
    • 在 Geant4 官方网站和 GitHub 发布 GUI 安装工具,并提供详细文档。
    • 在学术会议、论坛、开源社区推广,吸引科研人员使用。

3. 团队角色配置(6人)

角色 人数 主要任务
项目经理 1 负责规划、进度管理、协调团队合作
开发工程师 3 负责 GUI、安装脚本、环境检测等功能开发
测试工程师 1 负责功能测试、兼容性测试
UI/UX 设计师 1 设计 GUI 界面,优化用户体验

4. 16 周开发规划

周数 任务
1-2 周 需求分析,竞品调研,确定 GUI 设计方案,技术选型(Qt/PyQt、CMake 等)
3-4 周 设计 UI 原型,开发 GUI 基础框架,研究 Conda、Docker 打包方案
5-6 周 开发一键安装功能,实现 Conda/Docker 安装支持
7-8 周 开发 GUI 配置功能(物理模型、材料、探测器选择)
9-10 周 完善自动环境检测功能,智能提示缺失的依赖项
11-12 周 进行内部测试,修复 bug,优化 UI/UX
13-14 周 邀请用户测试(科研人员),收集反馈并优化
15 周 完成最终版本,编写文档,制作安装指南
16 周 发布软件,推广至 Geant4 社区、论坛、GitHub

5. 预期成果

  • 降低 Geant4 安装门槛,提高用户体验
  • 吸引更多用户,增强 Geant4 的社区活跃度
  • 相比其他工具(如 OpenMC),增强 Geant4 的竞争力
posted @ 2025-03-16 08:35  hjzts666  阅读(31)  评论(0)    收藏  举报