软工实践第二次作业(结对第一次作业)

作业描述

作业描述 链接
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SoftwareEngineering1916W
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SoftwareEngineering1916W/homework/2642
结对学号 221600131、221600439
作业目标 了解NABCD模型,学习分析用户需求,利用相关软件设计原型
PDF PDF

结对过程

快速组好了队,之后就是进行需求分析。参考《构建之法》第八章第8.1节《软件需求》指出的步骤,我们分析如下:

  1. 需求捕捉:题目已经代我们完成了这个步骤。
  2. 分析和定义需求:这个是我们最核心的步骤,明确这个需求究竟是为了什么而出现的。

我们分析认为,我们的产品面向的人员是高校内相关领域的师生,根据需求得出的用户画像如下:

  1. 用户是高校从事科研的师生。
  2. 提出需求的用户关注计算机视觉, CVPR、ICCV、ECCV 等会议是该领域的顶会。

而目的则是为这些人提供论文检索与数据分析,方便他们查找到相关论文。我们整理需求得出以下核心需求:

  1. 用户需要快速下载/查询一系列论文。
  2. 用户需要各类关键词对比等数据分析。

我们参考知网等论文查询网站,写下了基本需求。但知网等作为通用型查询网站,需要满足所有人的需求,势必只能提取出公共部分。类似什么论文推荐都属于这一部分。但我们不同的是,我们的客户有指向性。我们需求的初期目标针对的是计算机视觉领域,这个领域和其他领域比有以下不同:

  1. 相当一部分论文在GitHub上开源了源码,供大家Clone。GitHub是一个程序员社交平台,可以看出一个项目的热度。
  2. 计算机视觉有一些公共数据集供大家benchmark,涉及某个子领域的论文一般都会写明自己benchmark的数据。

因此,我们找到了这个项目的需求和创新点,接下来的事情就是结队写需求+墨刀原型了。

NABCD模型

Needs

用户的原始需求

  • 用户可给定论文列表
    • 通过论文列表,爬取论文的题目、摘要、关键词、原文链接;
    • 可对论文列表进行增删改操作(今年、近两年、近三年);
  • 对爬取的信息进行结构化处理,分析top10个热门领域或热门研究方向;
    • 可对论文属性(oral、spotlight、poster)进行筛选及分析;
    • 形成如关键词图谱之类直观的查看方式;
  • 可进行论文检索,当用户输入论文编号、题目、关键词等基本信息,分析返回相关的paper、source code、homepage等信息;
  • 可对多年间、不同顶会的热词呈现热度走势对比(这里将范畴限定在计算机视觉的三大顶会CVPR、ICCV、ECCV内)。
  • 可进行数据统计,例如每个国家录用文章的分析、每个学校录用文章的分析、哪个学校哪方面的研究方向比较强等。

分析

《构建之法》第八章,8.1节《软件需求》指出,我们需要“对从各个方面获取的需求进行规整,定义需求的内涵”。我们认为,目前布置的这个需求,只是一个给高校内相关领域成员使用的论文检索与数据分析平台,一切都围绕着这个点进行设计与开发。因此,我们不应该做太多不相关需求。既要做加法,也要做减法。

为此,我们整理需求如下:

用户

系统支持多用户登录。

用户新增论文

  1. 用户给定列表。该列表可能是一组论文标题,也可能是会议名称。
    1. 当用户输入为一组论文标题时,先进行内部查询。如该论文未被入库,尝试从互联网查找到相应论文URL。
    2. 当用户输入为会议名称时,尝试抓取该会议所有论文标题,并从标题查找对应URL。
    3. 分析指定列表,列入论文爬取待处理队列。 用户可随时对待处理队列进行修改。
  2. 论文爬取:
    1. 从待处理队列中取出相应URL,获得论文的题目、摘要、关键词、原文链接、领域、研究方向、源码数据集等,对爬取的信息进行结构化处理,并存入公用论文库。
    2. 对公用论文库内的论文,定期更新其下载量及被引量(如果被爬取方可提供的话)。当其被其他论文引用时,一并收录引用其的论文。

用户个人页面

  1. 显示用户关注的领域、作者、机构的最新论文。
  2. 显示用户关注的论文的最新动向(如被引列表)。
  3. 为用户个性化推荐最新论文。这部份暂时预留,不做实现。

检索论文

  1. 用户可依据以下维度检索论文:论文编号、论文题目(模糊)、关键词(模糊)、发表时间(年份及月份区间)、属性(oral、spotlight、poster)、领域、作者、单位、研究方向、会议、对当前用户是否可见。
  2. 检索结果列表需满足:
    1. 检索摘要包括论文题目、属性、作者、单位、会议、下载量、被引量。
    2. 可按照指定列排序。
    3. 点击进入论文详细页面。
    4. 提供论文批量管理:
      1. 允许有删除权限的用户(如管理员)删除本篇论文。
      2. 允许当前用户标记本论文为当前用户永不可见。
      3. 允许当前用户设置是否关注本篇论文。
  3. 详细页面需满足:
    1. 点击“关键词”等可被数据分析的范围,进入数据分析页面。范围见数据分析一节。
    2. 显示论文题目、属性、作者、单位、会议、下载量、被引量、摘要、关键词、引用列表、被引列表、可能相关论文列表。
    3. 显示源码下载链接、作者个人主页(如果有的话)。
    4. 可直接下载论文,或跳转到论文所在杂志页面/会议页面,或跳转到索引页面。
    5. 提供论文管理功能,即:删除、是否可见、是否关注。

数据分析

数据分析指针对论文库整体的分析,“当前用户不可见”的选项对其无效。

总体监控
  1. 显示最近抓取的新论文列表。
  2. 显示最近关注最多的新论文列表,计算维度包括:
    1. 若该论文在GitHub上有提供源码,以GitHub Star和Issue的数量为其中之一计算维度
    2. Twitter等社交媒体的提及数量。
    3. 被引用次数。
关键词
列表
  1. 依据关键词,显示 Top 10 热门领域或热门研究方向。同时绘制关键词云图,以便直观显示出哪些关键词最引人注目。
  2. 显示以论文数量倒序排序的关键词排行。
  3. 展示多年间不同顶会的热词对比。(顶会:暂只考虑CVPR、ICCV、ECCV)
    1. 每个顶会各一个柱状图。柱状图取当年Top X关键词,每个关键词为一组,每组内含三个柱,分别代表这三年的该词论文数量。
详细
  1. 允许用户关注或取消关注。
  2. 显示热度趋势(按月?按年?待细化)。
  3. 显示该领域论文,可通过排序获得:
    1. 该领域最新论文
    2. 显示该领域指定时间(默认为1年内)被引最多论文。
    3. 该领域最近最热论文
  4. 显示折线图:该关键词每年的热度。
  5. 数据集对比。
数据集对比

每一个关键词对应的数据集均不同,可以针对每一个关键词设置不同的数据集,由爬虫对论文内提到的数据集进行分析,提取出该数据集的对比数据。 该页面需要:

  1. 准确率进展趋势。
  2. 领域排行榜。
国家

国家数据过于泛,对于单个领域的研究几乎是没什么作用的。因此国家数据应当依托于关键词,在关键词之上对不同国家进行对比。

列表
  1. 显示以论文数量倒序排序的国家排行。
  2. 展示TOP X国家的历年论文发表数量,以折线图显示。
  3. 展示不同国家论文发表比例,以饼图显示。
详细
  1. 显示以论文数量倒序排序的机构排行。
  2. 显示国家论文,可排序获得:
    1. 该国家在该领域的最新论文。
    2. 显示该国家指定时间(默认为1年内)被引最多论文。
  3. 显示折线图:该国家每年(月?)在该关键词发表论文的数量,即热度趋势。
机构

基本同国家。

Approachs

基于 Web 开发技术,前端采用 React + ant.design。后端使用 MySQL 数据库,并包括以下几个部分:

  1. 后端API:Java,配合Spring Boot + MyBatis。
  2. 搜索:ElasticSearch。
  3. 服务间通信:Kafka。
  4. 爬虫:从Kafka接收队列并爬取数据,爬取后存储入对象存储并将结构化数据入库。
  5. 论文存储:上云使用阿里云OSS,自建使用Minio(Amazon S3 API 兼容)。

    目前由于数据分析需求不复杂,暂不需要专用数据处理端并保存结果,直接由大后端统一处理即可。以上架构可方便地上云或自建。

Benefits

用户

  1. 贴近学术前沿,相对通用性查询网站来说会更贴合相关方向的课题组。
  2. 提供个性化论文推荐,可使用户快速获知所在领域最新动态。
  3. 可自动分析不同论文对相同公共数据集的准确性并排序,快速筛选效果最好的一系列论文。

开发机构

  1. 自主知识产权,避免受制于人。
    1. 对于开发机构自身,可通过自己定制化开发完成自己的特殊需求。
  2. 自动化爬取最新信息,避免手动下载与分享带来的繁琐。
  3. 锻炼相关课题组学生开发与工程水平。

Competitors

优势

优势和“B”似乎意义相近。

劣势

  1. 爬取速度。类似知网、万方等数据库均可接触到一手资源,本项目只能爬取二手资讯,时效性差。
  2. 数据量。需要相当长一段时间可能才能爬取数目足够的论文。考虑到即使机构订阅了相关数据库,对方也禁止使用爬虫下载,这违反了使用协议,且对方也有相关反制措施,必须控制爬虫速度。
  3. 稳定性。项目初期稳定性相对差。
  4. 搜索。自己做的搜索效果远比不上对方专业搜索,这需要之后进一步维护。

Delivery

对外开放部分只能开放索引查询及数据分析。考虑到,相当一部分论文不处于Public Domain,下载与存储部分涉嫌侵犯版权,且CDN流量相对贵,初期暂不允许校外机构下载论文。
我们不认为盲目面向非特定目标人群推广存在意义,推广应当“快、准、狠”。由于学术圈本身较小,我们认为,应当在初期交由学生及相关导师,请其使用。由导师以及学生私下交际圈口口相传并提出进一步改进需求,逐渐完善程序本身的同时根据用户使用情况来制定下一步推广策略。

协作工具

  1. 关于Markdown文档,我们采用 https://hackmd.io 进行协作。
  2. 关于原型开发工具,我们采用墨刀。

原型模型

《构建之法》第七章,7.2.7节《投资质量》指出,“在做快速原型的过程中,有些部分可以做得粗糙一点。”。我们认为,原型只是为了指出这个页面有哪些功能,并不是具体到去做某个页面设计。况且,我们的初步需求还是有相当大的被推翻的可能性。因此,我们做了以下较为粗糙的原型。

论文列表

待爬取队列

高级检索

基本参考知网设计。

检索结果

添加论文

论文详细页面

数据分析

总体监控

关键词

关键词详细信息

领域最新方法

国家分析

国家详细信息

论文推荐

结对照片

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
- Estimate 估计这个任务需要多少时间 30 10
Development 开发
- Analysis 需求分析 (包括学习新技术) 180(学习新技术被计入具体编码部分) 240
- Design Spec 生成设计文档 360 240
- Design Review 设计复审 240 120
- Coding Standard 代码规范 (为目前的开发制定合适的规范) 1
- Design 具体设计 1440
- Coding 具体编码 13440 项目未开始
- Code Review 代码复审 贯穿代码开发过程,不作为单独流程 0
- Test 测试(自我测试,修改代码,提交修改) 贯穿代码开发过程,不作为单独流程 0
Reporting 报告
- Test Report 测试报告 240 0
- Size Measurement 计算工作量 120
- Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 240
合计 16051

遇到的困难及解决方法

困难1

困难描述

需求设计后难以取舍。

解决尝试

讨论。

是否解决

已解决。

有何收获

需求设计不能一口吃成个大胖子,必须紧扣核心需求,围绕核心需求进行扩展。

困难2

困难描述

博客园的编辑器太难用。

解决尝试

使用Hackmd

是否解决

已解决。

猜你喜欢

转载自www.cnblogs.com/JaminWu/p/10493458.html