ASE作业4 从需求分析到软件设计
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时,可能需要代理程序与交互程序再进行通信,传递用户指令与给用户反馈结果