作业4:从需求分到软件设计
- 以VS Code Remote Development相关功能为例,选择一个用例进行需求分析和逆向工程,按课堂要求完成一篇博客文章。
- https://code.visualstudio.com/
- https://github.com/microsoft/vscode
Visual Studio Code Remote Development允许您使用容器、远程机器或Windows Subsystem for Linux(WSL)作为功能齐全的开发环境。你可以:
在您部署到的同一操作系统上进行开发,或使用更大或更专业的硬件。
分离您的开发环境,以避免影响您的本地机器配置。
让新贡献者轻松上手,让每个人都保持在一个一致的环境中。
使用本地操作系统上不可用的工具或运行时,或管理它们的多个版本。
使用适用于Linux的Windows子系统开发您的Linux部署应用程序。
从多个机器或位置访问现有的开发环境。
调试在其他地方运行的应用程序,例如客户站点或云端。
您的本地机器上不需要源代码即可获得这些好处。远程开发扩展包中的每个扩展都可以直接在容器、WSL或远程机器上运行命令和其他扩展,这样当您在本地运行时,一切都会感觉一样。
需求分析
1.功能需求
- 作为用户可以使用容器、远程机器、或WSL部署远程开发环境
- 作为用户可以在本地连接远程开发环境
- 作为用户可以从多个机器访问远程开发环境
- 作为用户可以在远程开发环境建立工作区
- 作为用户可以在查看、编辑、调试、运行远程开发环境上的代码
2.性能需求
- 实现可以像本地运行一样的低延迟
- 可以在多种网络环境下提供稳定连接
3.安全需求
- 用户身份验证和访问权限控制
- 网络连接的安全性
逆向工程
VS Code 使用 Electron 作为底层框架,并使用 TypeScript 进行开发。其中,插件可以访问 VS Code API 来扩展编辑器的功能。
从官网提供的架构图来看,remote devlopment 是 C/S架构,本地端的VS Code作为客户端,远程端作为VS Code服务器存在,包含代码,终端进程,调试器等等。
在客户端中,Remote Devlopment插件创建了终端窗口,通过SSH隧道将用户的操作请求发送到远程服务端上。
在服务端中,插件通过监听客户端请求的方式来对用户操作做出响应。
src/vs/platform/remoteTunnel
下主要包含了与隧道相关的功能实现,比如隧道的打开和关闭等
src/vs/platform/remote
中包含了与远程服务器通信的一些类,包括 RemoteAgentConnection
src/vs/workbench/contrib/remote
包下包含了关于remote devlepment相关的主要实现
src/vs/workbench/services/remote
包下包含 remoteAgentService.ts
提供远程代理服务等