项目 内容
班级:北航2020春软件工程 博客园班级博客
作业:明确和撰写软件的功能规格说明书 功能规格说明书

当前版本:v1.0

修订历史:

版本号 修订时间 修订说明
v1.0 2020/04/03 将产品的基础功能明确并给出定义,在Alpha版本阶段使用。

计划任务:在v2.0版本中增加产品的特色功能和杀手功能,在Beta版本阶段使用。

1. 引言

1.1 项目简介

  • 项目名称:Visual Lab Online
  • 一句话描述:面向学生的开箱即用的云编程环境
  • 项目面向用户:
    • 学习编程/信息学竞赛的初学者
    • 不需要复杂IDE功能、希望简洁高效地集中精力编写代码的程序员
    • 对云端编程有需求的普通大陆学生
  • 项目开发者:北京航空航天大学软件工程课程 “拒绝VisualStudio” 小组

1.2 预期的读者和阅读建议

  • 软件开发团队:根据功能规格说明书进行设计和具体编码以实现本文所述的功能
  • 软件用户:介绍了软件的主要功能,便于用户了解以发挥软件的最大潜力

1.3 概念说明

概念 说明
云编程环境 指支持用户在浏览器网页中进行编程、运行等操作的软件系统,其存储和算力由云端服务器而非本地计算机提供。
Notebook 指一个包含用户编写的代码文件的存储环境,同时包含支持编译、运行、调试、控制台操作的计算环境。是面向用户的项目单位,不同Notebook之间代码不互通。
Kernel 是Notebook中的概念,指支持编译、运行、调试、控制台操作的计算环境,具有语言特异性,如有C Kernel、C++ Kernel、Python3 Kernel等。
编辑器 指基于Monaco Editor开发的具有文本编辑、代码着色、代码模版与语言支持等功能的代码编辑器,是面向用户的最主要窗格。
Notebook管理面板 指一个包含文件管理、文件上传与下载、Notebook导入与导出等功能的窗格,用于管理Notebook的存储环境,位于用户界面左侧。
Kernel操作面板 指一个包含编译结果返回、运行输出返回、可操作Kernel的控制台等功能的窗格,用于对Notebook的计算环境即Kernel进行交互操作,位于用户界面底部。

2. 典型用户和典型场景

刚刚接触编程的学生

名字 小蔡
用户身份 刚上大一,开始学“高级语言程序设计”的学生
用户情况 高中没有学过计算机相关知识,对于复杂的计算机概念难以理解。
使用Code::Blocks等软件经常出现问题,浪费不少时间在“为什么不能运行”“为什么不能调试”上。
用户动机 能找一个软件简单地支持自己学习C语言,并把主要精力花在代码本身而不是配置IDE和环境上。
用户痛点1 现有的IDE功能复杂,要么自己用不上,要么找不到该点什么,要么用不顺手。
用户痛点2 使用IDE需要配置环境、工程(项目)等,一不小心配错了跑不起来只能重建工程试试,浪费不少时间。
典型场景1 在练习平台上做作业,打开Visual Lab Online,点击几个按钮,半分钟之内就可以开写,不需要复杂配置,也不需要理解环境。
写代码时的提示得心应手,不会像高级IDE的提示一样,初学者根本看不懂。
典型场景2 要学习这门课,但听说老师建议使用Visual Studio。自己是苹果电脑,不想装个Windows虚拟机,打开Visual Lab Online就可以编程了。
用户比例 50%

希望有一个轻量编程环境的非计算机专业学生

名字 小刘
用户身份 非计算机专业学生
用户情况 在专业学习过程中有时候会编程,但不总是编程。有时候只需要跑跑单文件的Python和C程序,不想在自己电脑上装两个大体量的专业IDE,就是想临时改一下、跑一下代码。
用户动机 想花尽可能低的(时间和精力)成本轻量地编辑、运行代码。
比起自己的专业工作,不让编程的过程喧宾夺主。
用户痛点1 就临时改一下、跑几次代码,不希望还得装个Visual Studio和PyCharm。
不装IDE也不行,因为不熟悉编译、运行的命令行操作等。
用户痛点2 希望一个简单的编程环境解决所有问题,降低学习成本。不想了解什么是编译什么是运行等计算机知识,唯一要求是跑出结果。
典型场景 老师给了一份代码/团队项目需要完成一个功能、在百度上搜到一段CSDN代码,希望针对自己的输入跑一下看看、调调参数。
打开Visual Lab Online创建一个Notebook,选择对应的Kernel就可以跑了,节省时间,也不需要额外装软件。
用户比例 25%

对云端多设备编程有一定需求的用户

名字 小强
用户身份 iPad党,经常带着iPad而不是笔记本去上课/开会/去图书馆学习
用户情况 一般不背着笔记本,只有一个随身的iPad Pro做做笔记,但有时候希望在iPad上能继续自己在电脑上的工作。
用户动机 希望在平板电脑上编程。虽然不是大部分时间都用平板电脑写,但是希望将不带电脑的时间利用起来。电脑和平板上的修改应当自动同步。
用户痛点1 习惯用iPad上课记笔记,想开小差写写编程作业,还偏得又带着笔记本又带着iPad。
用户痛点2 需要紧急修改代码,但是手头没有开发机,只有平板电脑或者轻薄上网本,希望能在非开发机的设备上修改代码。
典型场景1 在课堂上一边用iPad做笔记一边赶编程作业的ddl。
典型场景2 从公司回到家,靠在沙发上,把iPad和键盘夹架在腿上,悠闲地躺着996,顺便写累了还能摸个鱼看看爱奇艺。
用户比例 25%

3. 用户界面原型设计

3.1 主页

上图为软件的主页(入口)。用户在未登录时访问主页,会提示请登录/注册。在登录后,主页由My Notebooks、Account、Preferences等卡片组成:

  • My Notebooks:面向用户的主要页面,负责展示用户创建的/拥有的所有Notebooks,按语言(Kernel)分类呈现。页面中有搜索框,便与快速查找Notebook。用户可以点击已有的Notebook继续编辑,也可以新创建Notebook:

    • 创建空白Notebook。用户点击“New”进入简单的Notebook创建向导,选择Kernel语言和版本之后进入空白的Notebook。此时文件系统中没有文件,用户需要手动创建。
    • 导入Notebook。用户可以点击“Import...”进入Notebook导入向导,选择Kernel后从本地上传zip、网盘等渠道导入代码文件生成Notebook。
  • Account:用户账户管理页面,功能有查看空间配额与剩余容量、订阅收费的会员服务、管理订阅等。
  • Preferences:用户全局偏好设置。每个Notebook的偏好设置继承自全局偏好设置,包括默认网盘路径、默认Kernel、编辑器定制设置等。
  • Support:用户帮助文档。

用户点击已有的Notebook或创建新Notebook后,进入编程环境对Notebook的代码进行编辑和运行。

3.2 编程环境

总览

上图为Visual Lab Online编程环境的总览图。用户界面布局与Visual Studio Code十分相近,主要分为以下部分:

  • 编辑器。Visual Lab Online的编辑器基于Visual Studio Code的Monaco编辑器开发。编辑器的功能为编辑与显示代码,还包括代码高亮、函数签名和变量类型提示、快速代码跳转、代码重构等提示和操作。
  • 标签页与常用工具栏。标签页管理器可以像浏览器一样管理各个打开的文件标签页。常用的构建并运行、构建并调试等工具按钮位于常用工具栏中,便与点击使用。
  • Notebook管理面板。Notebook管理面板位于界面左侧,包含文件管理、构建设置、文件上传下载、Notebook导入导出、Notebook设置和用户偏好设置等功能。
  • Kernel操作面板。Kernel操作面板位于界面底部,包含显示构建输出、显示运行输出并接受标准输入、远程Kernel控制台和调试控制台。
  • 菜单栏和状态栏。菜单栏位于界面顶部,状态栏位于界面最底部,分别负责提供完整操作和功能菜单、显示当前Notebook、Kernel与编辑器状态。

Notebook管理面板

用户可以点击最左侧的六个图标来展开相应的管理面板。一次只能有一个在前景活动的面板,默认打开的是文件管理面板。活动的面板图标以强调色显示。

文件管理器 构建设置 上传与导入
以树状结构查看、管理文件和文件系统,支持移动文件、重命名、文件夹展开与折叠等操作。 以勾选形式设置参与构建的源代码(Python除外)。选中的文件参与构建,未选中的不参与。 弹出对话框的按钮,进一步引导用户上传文件、从网盘下载或GitHub克隆到当前Notebook。
下载与导出 偏好设置 Notebook设置
弹出对话框的按钮,进一步引导用户下载文件到本地、将当前Notebook存储到网盘或推送到GitHub。 用户偏好设置。用户可以在该面板定制编辑器的外观、使用习惯和快捷键等,默认继承自用户全局偏好。 Notebook设置。用户可以更改Notebook的Kernel、设置自动保存与同步的方式、共享Notebook等。

Kernel操作面板

用户可以点击四个标签来展开相应的面板。一次只能有一个在前景活动的面板,默认打开的是文件管理面板。活动的面板图标以强调色显示。

标签分别有“构建输出”、“运行输出”、“Kernel控制台”、“调试控制台”等。

“构建输出”显示代码构建(C/C++编译等)时的错误信息,便于用户修改错误。

“运行输出”为一个标准输入输出交互平台,将程序的标准输出显示,将用户输入重定向至标准输入。

“Kernel控制台”为本Notebook内的远程Kernel的bash终端。

“调试控制台”能支持用户添加监视变量、显示监视变量等调试操作。

菜单

菜单栏位于用户界面的顶端,包含“文件”“编辑”“代码操作”“运行”等菜单。其中“编辑”给出了常用的编辑操作,包括插入多光标等特色功能。“代码操作”给出了代码折叠、代码跳转、重构变量和函数、插入模版和自定义模版等特色功能,能较大地提升编程效率。

4. 主流的用户-软件交互步骤

  1. 用户用浏览器打开产品主页,注册账户,登录账户,自动导航至主页的“My Notebooks”界面。
  2. 用户查找其拥有的Notebook,点击继续编辑;或点击“New”按钮进入新建Notebook向导,开始编辑。编辑中可能用到的编辑功能,可以通过菜单栏-编辑、菜单栏-代码操作或在编辑器中使用鼠标右键或快捷键调用。
  3. (可选)用户可以在Notebook管理面板-Notebook设置中设置自动同步的网盘或GitHub项目。
  4. 用户在“文件”菜单中新建文件,在编辑器中编辑文件,在Notebook管理面板-文件管理器中管理文件,在Notebook管理面板-构建设置中勾选参与构建的代码文件(C/C++)。
  5. 用户点击标签和常用工具栏右侧的“运行”按钮或“调试”按钮,开始构建并运行或构建并调试。构建时自动展开构建输出,显示编译过程的输出。运行时自动展开运行输出,提供标准输入输出接口。调试时自动展开调试控制台,用户添加断点、添加监视项等。
  6. (可选)用户使用Kernel控制台完成更高级的操作,如新建文件、编写脚本、安装Python库等。

5. 系统功能描述及验收验证标准

页面/模块/面板 操作/功能 验收标准
主页 未登录状态下访问 1. 状态显示未登录,展示登录/注册入口
2. 能引导用户进行登录/注册,之后重新导航到主页
主页 登录状态下访问 1. 能展示My Notebooks页面,页面中能按Kernel分类展示用户已有的Notebooks;查找框能通过Notebook名称的子串搜索到Notebook
2. 点击能展示Account页面,页面中能显示当前订阅方案(Free/Premium)
3. 点击能展示Preferences页面,页面中能显示绑定的网盘和GitHub账户设置、编辑器偏好设置等,且能被每个Notebook继承
4. 点击能展示Support页面,显示一些帮助文档
编程环境-编辑器 代码显示 1. 能显示所有支持语言的代码高亮,不同的代码成分能以不同格式显示
2. 能显示行号、修改行、断点行等标记,能自动折行,能显示minimap和滚动条
3. 能根据用户偏好设置显示编辑器的定制外观
4. 能显示代码块折叠/展开的按钮,点击可以折叠/展开代码块
编程环境-编辑器 代码编辑 1. 支持简单的编辑操作和快捷键操作(拷贝、剪切、粘贴、复制等)
2. 支持按行的编辑操作(拷贝行、剪切行、粘贴行、复制行、移动行等)
3. 支持多光标(多光标的添加、多光标模式的取消、多光标移动、多光标编辑等)
4. 支持单文件的查找和替换、全Notebook的查找和替换,查找模式支持正则表达式、区分大小写等选项
5. 支持上述操作的快捷键
编程环境-编辑器 代码操作 1. 支持代码的折叠与展开,支持三种操作逻辑(折叠/展开光标所在的代码块、递归折叠/展开光标所在的代码块、折叠/展开当前文件的全部代码块)
2. 在光标位于一个变量/函数的实现/引用处时,支持跳转到其声明/定义位置
3. 在光标位于一个变量/函数的声明/定义处时,支持列出到其实现/引用位置

4. 支持重命名选中的标识符,并列出待替换的字段位置供用户审查
5. 支持在当前位置插入默认和自定义的Live Templates,并使光标进入Templates模式,按Tab键能够在可操作处(如for循环的变量名、终止条件处)切换,按Esc退出
6. 支持用户自定义Live Templates,并能够正确插入。关闭Notebook重新打开后,自定义Templates不应丢失
Notebook管理面板 面板显示 1. 能够根据左侧6个工具按钮展示对应的面板,再次点击按钮收起面板
2. 面板能够通过光标调整水平大小
Notebook管理面板 文件管理器 1. 能够正确显示文件树,并每隔一定时间刷新文件树显示
2. 能添加文件和文件夹,并支持拖拽更改文件/文件夹位置,且同步到云端
3. 能够通过点击打开文件到编辑器中
4. 能够及时显示通过上传和导入功能添加的文件/文件夹
Notebook管理面板 构建设置 1. 对于需要构建设置的语言的Notebook,能够列出全部源代码(如.c, .h, .cpp)文件的勾选框,并默认全部勾选
2. 用户能够通过点击修改勾选状态
3. 勾选状态能够反映在远程Kernel构建命令中
Notebook管理面板 上传/下载、导入/导出 1. 能够通过点击“上传文件”按钮弹出文件选择浏览器,并将文件上传添加到当前Notebook中
2. 能够通过点击“下载文件”按钮弹出带勾选框的文件树,并将勾选的文件打包通过浏览器下载
3. 能够通过按钮导入/导出Notebook到网盘/GitHub,内容包括当前Notebook的文件系统和Visual Lab Online的Notebook设置文件
4. 文件的上传和导入应及时显示在文件管理器中
Notebook管理面板 偏好设置和Notebook设置 1. 能够使用户自定义编辑器外观、快捷键等偏好设置,并及时体现在编辑器中
2. 在Notebook设置中,能重新选择Kernel,且及时反映到构建命令中
3. 能更改从用户全局Preferences继承的自动同步链接,能生成并显示Notebook共享链接
4. 关闭Notebook重新打开后,上述设置不应丢失
Kernel操作面板 面板显示 1. 能够根据顶端4个标签按钮展示对应的面板,再次点击按钮收起面板
2. 面板能够通过光标调整垂直大小
Kernel操作面板 构建、运行信息的显示与交互 1. 能实时显示构建和运行的输出
2. 在运行输出中能用户输入内容并发送给远程Kernel中正在运行的命令行程序
3. 当内容行数过多后,能显示滚动条
4. 每次构建/运行时对应的窗格能够自动清屏
Kernel操作面板 Kernel控制台和调试控制台 1. 能显示一个bash,文件系统与当前Notebook的文件系统相同
2. 支持tmux、vim等bash程序
3. 在调试控制台中能添加、修改、删除监视变量,调试时能显示其值
4. 在调试控制台中能执行单步、跳过、继续等调试操作
标签页与常用工具栏 标签页管理 1. 能显示打开的代码编辑器,能提供点击或快捷键切换标签页
2. 点击关闭按钮或右键关闭能关闭标签页,并保证修改被保存
3. 能够通过按住拖拽更改标签页的排序
标签页与常用工具栏 常用工具 1. 能显示构建并运行、构建并调试、分栏、比较等常用工具按钮
2. 按下按钮能执行对应操作
菜单栏 菜单 1. 能显示菜单中的选项和对应的快捷键(如果存在)
2. 操作应与按钮、管理面板等其他操作入口触发的操作完全相同
状态栏 显示状态 能显示当前Notebook、当前Kernel、当前光标位置、当前语言等信息

6. 产品可能的副作用

  • 不排除服务器遭到攻击或出现意外,导致云端文件发生丢失等意外改变
  • 不排除对接的存储系统(云盘和GitHub等)出现意外,或其提供的接口出现故障,导致文件未及时同步到存储系统中
  • 不排除由于Kernel的环境与生产环境不完全相同(如编译器、操作系统、版本差异等),导致用户代码在Visual Lab Online中的运行效果与其他期望的运行环境中不完全相同

【BUAA软工】Visual Lab Online——功能规格说明书的更多相关文章

  1. 软工实践——团队作业需求规格说明书——原型UI设计

    登录界面 还包含忘记密码和注册的功能 注册界面 注册成功后会有弹窗提示,且一个手机号只能注册一次. 忘记密码界面 通过手机收到的验证码更改密码. 项目界面 登陆之后的页面就是这个项目界面.在拥有的界面 ...

  2. [BUAA软工]第一次结对作业

    [BUAA软工]结对作业 本次作业所属课程: 2019BUAA软件工程 本次作业要求: 结对项目 我在本课程的目标: 熟悉结对合作,为团队合作打下基础 本次作业的帮助:理解一个c++ 项目的开发历程 ...

  3. [BUAA软工]第1次阅读

    [BUAA软工]第1次阅读 本次作业所属课程: 2019BUAA软件工程 本次作业要求: 第1次个人作业 我在本课程的目标 熟悉和实践软件工程流程,适应团队开发 本次作业的帮助 帮助理解<构建之 ...

  4. [BUAA软工]第二次博客作业---结对编程

    [BUAA软工]结对作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 2019年软件工程基础-结对项目作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能 ...

  5. [BUAA软工]第一次博客作业---阅读《构建之法》

    [BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...

  6. [BUAA软工]第零次博客作业---问题回答

    [BUAA软工]第0次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第0次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...

  7. [BUAA软工]第0次个人作业

    [BUAA软工]第0次个人作业 本次作业所属课程 : 2019BUAA软件工程 本次作业要求: 第0次个人作业 我在本课程的目标: 熟悉软件工程流程,规范开发习惯 本次作业的帮助: 熟悉课程流程 Pa ...

  8. 【BUAA软工】Beta阶段事后分析

    设想与目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题 总体解决的问题:新手编程者配置编程环境难.本地编写的代码跨设备同步难.本地ide安装使用过程 ...

  9. [BUAA软工]Alpha阶段事后分析

    设想和目标 虽然我们是从零开始的一个自定义项目,但语音Coding助手从一开始的设计与目标就很明确:加入语音接口使其能在shell端实现命令语音实现以及编辑运行脚本,设计前端编辑器并将后端shell与 ...

随机推荐

  1. python基础之流程控制(1)

    一.分支结构:if 判断 1.什么要有if 判断语句? 让计算机可以像人一样根据条件进行判断,并根据判断结果执行相应的流程. 2.基本结构 单分支结构 # 单分支 if 条件1: 代码1 代码2 代码 ...

  2. 前端 | vxe-table 翻页保留复选框状态

    0 前言 在前端开发过程中时常会遇到表格相关的显示与处理.组件库通常都会提供表格组件,对于展示.简单操作这些常用功能通常也够用:但如果需要更多的定制或进行比较复杂的操作,组件库自带的组件可能会捉襟见肘 ...

  3. Spring Boot 轻量替代框架 Solon 1.3.18 发布

    Solon 是一个微型的Java开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC.REST ...

  4. Apache Hudi:CDC的黄金搭档

    1. 介绍 Apache Hudi是一个开源的数据湖框架,旨在简化增量数据处理和数据管道开发.借助Hudi可以在Amazon S3.Aliyun OSS数据湖中进行记录级别管理插入/更新/删除.AWS ...

  5. Istio 网络弹性 实践 之 故障注入 和 调用重试

    网络弹性介绍 网络弹性也称为运维弹性,是指网络在遇到灾难事件时快速恢复和继续运行的能力.灾难事件的范畴很广泛,比如长时间停电.网络设备故障.恶意入侵等. 重试(attempts) Istio 重试机制 ...

  6. Dynamics CRM安装教程五:ADFS安装配置

    ADFS即联合身份认证是一种更加安全的身份验证方式下面开始进行ADFS打开服务器管理器,到添加角色和功能向导下一步到下面界面勾选Active Directory 联合身份认证服务,下一步 默认,下一步 ...

  7. 那些你可能不知道的 ZooKeeper 知识

    本文作者:HelloGitHub-老荀 Hi,这里是 HelloGitHub 推出的 HelloZooKeeper 系列,免费开源.有趣.入门级的 ZooKeeper 教程,面向有编程基础的新手. 项 ...

  8. 个人阅读作业#2——软工模式&CI/CD

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 从实践中学习软件工程相关知识(结构化分析和设计方法.敏捷开发方法.软 ...

  9. Python多环境管理——pyenv

    1 背景&概述 因某些需求,需要安装TensorFlow,很自然地在终端敲下了以下命令: pip install tensorflow 然后... 好家伙??? 居然没有?? 因为是Pytho ...

  10. 交换机之间的通信 VLAN和trunk

    只有 PC0和PC2可通信,PC1和PC3可通信 将PC0和PC2加入同一个VLAN 将PC1和PC3加入同一个VLAN 将左边的交换机的Fa0/3口开启trunk模式即可(如下图)