ASE作业4 从需求分析到软件设计

发布时间 2023-05-30 23:01:32作者: 开宝特攻

VSCode Remote Development分析

以VS Code Remote Development相关功能为例,选择一个用例进行需求分析和逆向工程
需求,用例,关键步骤,剧情描述,分析序列图,设计序列图,关键代码,软件设计

学号:SA*****200

需求

能够通过VS Code在本地编辑器的界面上远程连接到远程服务器或容器,并能够在远程环境中编辑、调试和运行代码。此外还应当有管理链接(增删)等其他小功能

用例

远程开发

其满足三个条件:由想远程写代码的用户触发(连接),能为用户完成特定的业务(在服务端进行远程开发),终止于用户(用户关闭连接,完成了工作)

  • 抽象用例:远程开发

  • 高层用例:在连接成功时开始,在断开连接时结束

  • 扩展用例:

用户 远程编辑器
1.ssh连接 2.与远程服务器建立连接
3.连接成功,响应出图形界面,显示有关文件
4.选择文件进行编辑,调试,运行等 5.响应用户操作,指行相关指令,操作文件
6.断开连接 7.断开连接
            ┌────────────┐
            │VscodeRemote│
            ├────────────┴─────┐
   ┌───────►│manage connection │
   │        │                  │
 ▲  ───────►│graphical display │
-|-         │                  │
/ \ ───────►│execute command   │
   │        │                  │
   └───────►│edit files        │
            └──────────────────┘

关键步骤

  • 向服务器请求并建立连接
  • 图形化展现远程服务器的文件系统给用户
  • 将用户的操作,如编辑文件,编译、调试、运行,执行指令等,翻译成对应的指令发给服务器,对服务器进行操作
  • 及时返回服务器的执行过程、结果,仍然是翻译成图形化界面,展现给用户
  • 断开与服务器的连接

剧情描述

1)根据用户输入的主机和密钥,远程连接服务器

2)初始化图形界面

2.1)初始化编辑器的图形界面,根据配置文件展示出相应窗口

2.2)读取服务器的目录,并在图形界面中进行展示

3)根据用户操作,与服务器进行交互

3.1)IF 用户编辑文件,先本地缓存更改,等保存 退出 或操作文件时再向服务器进行同步更改;或及时更新 服务器端文件并实时展示

3.2)Else IF 用户点击“调试”,在服务器端执行gdb命令,并与服务端gdb程序进行通信,实时展示调试过程

3.3)Else 用户点击“运行”,或执行“git”及其他shell命令,则同步在服务端执行对应命令

4)与服务器断开连接,并展示断连界面

剧情描述表

主题 操作 其他数据/对象 操作对象
1) 连接服务器 连接 ssh_config或用户输入 服务器22端口
2) 初始化图形界面 图形化
2.1) 初始化编辑器窗口 图形化展示 配置文件 显示器
2.2) 显示远程目录 读取并展示 远程目录 显示器
3) 根据用户操作与服务器交互 交互
3.1) 编辑文件 缓存变更,需要时同步 编辑位置,数据 服务器文件
3.2 调试程序 与远程gdb通信 调试文件与用户操作序列 服务器端gdb与文件
3.3 运行其他指令 远程运行指令 用户指令,或可翻译为指令的操作,及其操作数 服务器文件系统
4 断开连接 断开ssh连接

软件设计

  • 前端界面:使用VS Code的UI框架和工具,设计远程编辑器界面,包括连接信息输入、编辑器显示、调试功能等。
  • 连接管理:实现连接远程服务器或容器的功能,通过远程连接协议与远程环境建立通信,确保安全可靠的连接。
  • 文件同步:在远程编辑器界面和本地编辑器之间同步文件的修改,保持两者的一致性。
  • 调试支持:提供与远程环境进行调试的功能,例如设置断点、查看变量值等。
  • 用户交互:处理用户输入和操作,响应用户请求,并及时更新界面和执行相应的功能。

逆向工程

这里仅根据实际使用体验粗略推测其实现的功能:

初次使用VSCodeRemote时,会先在远程服务器或容器上安装一个特定的远程代理程序 vscode-server,这个应当是其真正实现通信、同步的主体,如果所有的文件同步与指令交互都通过ssh传递,似乎不太方便。ssh应当只是做为身份认证,建立连接用。

运行程序、增删文件、修改目录以及git提交等大多操作,都可以通过直接发送指令实现,只需要将指令执行后的结果及时与本地同步,比如通过命令新建了一个文件夹,图形界面要及时有所改变

运行交互程序,比如gdb时,可能需要代理程序与交互程序再进行通信,传递用户指令与给用户反馈结果