结对第二次作业

结对第二次作业


这个作业属于哪个课程 2021春软件工程实践 -W班 (福州大学)
这个作业要求在哪里 结对第二次作业——顶会热词统计的实现
结对学号 061800217、221801133
这个作业的目标 实现对已爬取的论文列表进行操作、分析已爬取到的论文信息,提取top10个热门领域或热门研究方向

目录:

  1. Github仓库地址

  2. PSP表格

  3. 云服务器访问链接

  4. 成品展示

  5. 结对讨论过程

    1. 刚开始拿到题目时,我们的讨论
    1. 遇到的问题及解决方案
    1. 为实现功能进行的资料查找
    1. 结对讨论截图
  1. 设计实现
    1. 实现过程
    1. 功能结构图
  1. 代码说明
    1. 关键代码及解释思路
  1. 结对感受及队友评价
    1. 结对开发项目的心路历程与收获
    1. 评价结对队友

一、 Github仓库地址

Github仓库地址
代码规范

二、 PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 10
Estimate 估计任务需要时间 20 10
Development 开发 3900 4792
Requirement analysis 需求分析 30 35
Team discussion 讨论 70 70
divide the work 分工 20 10
Database design 数据库设计 30 27
Design of implementation mode 实现方式设计 30 50
Design Spec 生成设计文档 30 60
Learning 为实现功能进行的学习 60 220
Design Review 设计复审 40 50
Coding 具体编码 3300 3560
Code Review 代码复审 100 180
Connection 连接 30 30
Code Review 部署 40 70
Testing 测试 120 430
Reporting 报告 180 215
Test Repor 测试报告 90 100
Person Repor 个人报告 30 50
Size Measurement 计算工作量 20 25
Postmortem & Prrocess Improvement Plan 事后总结&提出过程改进计划 40 40
合计 4100 5017
  • 最开始我们选择PHP语言,但是后面觉得想做前后端分离,于是前端选择了VUE框架,选择nodejs做后端,这导致学习时间大大增加,不过也因此更深入学习了新的技术。
  • 因为选择前后端分离的做法,因此数据传输是很重要的一栏。因为前端在测试数据传输的时候,试图在使用post的时候直接进入网站查看传输的数据,但是由于网站默认get方式传输,接受不到前端的数据,然后前端就卡在这里,导致测试时间大大地增加。
  • 在后端测试传输的数据时,发现使用数组传输json数组出现了问题,并且因为query的异步机制,导致数据库查找内容无法及时传输,因此对代码进行了修改,代码复审时间比预计的要长。

三、 云服务器访问链接

云服务器访问链接

可使用的用户名和密码
用户:lisi
密码:123456
服务器将会于4天后过期

代码规范

四、 成品展示

1、游客界面,有三大顶会和系统功能的介绍

2、登录界面

3、登录出现用户不存在,密码错误情况

4、注册界面

5、论文管理界面

6、论文界面分页,链接,删除

7、模糊查询,在搜索框输入想查询的词汇,将以名字和关键词为查询范围查询

6

8、论文分析界面,向用户展现用户论文列表的top10词云以及饼图

9、点击词云搜索该关键词的相关论文

10、为用户展现热词的走势图


五、 结对讨论过程

1、刚开始拿到题目时,我们的过程


先使用HTML+CSS+Jacascript实现静态页面,暂定选择PHP进行连接数据库和处理数据

2、遇到的问题及解决方案


问题:(前端来找后端)我用POST拿不到数据啊,咋办啊,我百度了好久,从post失败发展到尝试all了
解决过程:后端询问一下发现,前端尝试直接post数据,使用浏览器测试post,但是由于在浏览器输入地址,回车默认是以get方式提交,因此测试一直不成功。后面后端使用postman,选择post方式就可以看到传输的数据了。
解决方案:postman


问题:(前端又来找后端)是不是let和var定义的变量name里面存不了值,但是req.body可以正常取到传输过来的值耶。
解决过程:刚开始,后端以为是console.log()函数使用出了问题,或者是前端测试的时候 在接受到数据后因为某些操作更改了name里面的值。但后面看到完整代码,发现是前端在编写接受的数据时,后端传输的json数据中,数据名为“username”,但前端却尝试以req.body.name接收数据
解决方案:认真看后端编写的数据传输图


问题:使用qurey函数对数据库进行增删改查,无法将结果return
解决过程: 该函数是异步函数,会等待主函数执行完成后执行,因此使用return 无法返回结果,需要使用 promise或async/await函数才能输出结果。
解决方案:使用promise或async、await等待qurey函数执行完成。


问题:但是当在初始化论文分析页面的时候发现使用上述解决方案 ,无法return 结果,同时,用户进行多次查询,后端会报错。
解决过程:发现是(也有猜测)是,原本设计在每次进行增删改查的时候连接数据库开始查询,查询结束之后关闭连接。初始化论文分析页面需要进行多次查询(去不同的表当中查找东西),因此在可能数据因为连接关闭而无法传输,同时在开启一次数据库连接中只能进行一次查询。后面选用数据库连接池,可以同时进行多次连接,每次连接结合后使用release释放连接而不是结束连接.
解决方案:连接数据库的方式更改为使用连接池。

问题:在部署服务器的时候nginx打开后,在网站上一直显示出错
解决过程:其实一开始部署服务器是跟着阿里的文档、百度搜索出来的文档去部署,基本不太懂输入的内容是什么意思,突然发现nginx打开后,网页显示不了,就马上去百度,根据查找到的内容去更改配置、查看网络连接、杀死进程…… 后面问题还是没有解决,但是对刚刚做了什么更改比较了解了,就问了一下舍友,结果她一看就知道是什么问题,是因为我只是重新加载nginx,但并没有重启,所以更改的配置文件没有起作用,她指导我重启一下就打开网站了!
解决方案:一位超厉害的舍友


问题:前端后期东西越写越杂,在完工时突然搭好的页面乱码。
解决过程:百度,没有方案。回看代码,发现在定义vue的style时,删去scoped,导致该页面样式覆盖至全局。
解决方案:加上scoped,好好听老师讲课,不该删的不要碰。


问题:在论文分析板块,点击关键词搜索相关论文,但由于表格在事件前已经渲染好,无法将数据添加至表格中。
解决过程:单独编写表格,与点击事件,排除后端未拿到数据及数据解析错误的原因。只能将原因归结于界面结构复杂,mounted事件过杂。
解决方案:将搜索的关键词通过url传送,再用created拿到关键词,get传送给后端,获取数据。因为界面结构简单,加载运行很快。


3、为实现功能进行的资料查找


Express
Nodejs
Query函数
mysql连接池
Vue
Element-ui
vue+nodejs部署
nodejs环境部署

4、结对讨论截图

---

1、qq讨论

2、共同编写博客内容

3、线下讨论

六、 设计实现

1、实现过程


1、实现方法选择

前端选择使用 VUE框架搭建静态页面,插入ElementUI制作图标,后端选择nodeJS,使用express 应用开发框架,数据库选择 mysql数据库。

2、功能讨论

模糊查询功能:后端分析用户输入语句,依次查询(模糊搜索截图)

数据分析功能:后端读取数据库中的keyword内容并且存入Map数组,记录keyword出现次数、来源会议和年份,存入新表,在每次加载页面的时候返回。

分页功能:前端传入 page和pageSize,后端将其与数据库查询结果必将,返回结果行数小于pageSize的内容。

3、数据传输方式

2、功能结构图


七、 代码说明

1、关键代码及解释思路


  1. promise类的使用

为实现模糊搜索,后端接收到用户的input后,以空格分割搜索数据,然后进行多次查询,使用promise.then等待数据搜索完成后再使用request传输数据。

  1. 初始化论文列表并实现分页显示

为实现分页,前端传来page和pageSize说明页数和将要展示的行数。在sql语句中使用‘limit‘’返回内容。

  1. 使用get方法传入用户输入内容,删除论文时论文id。

  1. 使用post方法传输大量数据,例如,在用户登录时,查询并返回用户论文列表。

  1. 使用post方法传输私密信息,例如,在登录界面传输用户登录信息

  1. 使用express框架
    使用express路由请求、接受信息。使用app.listen()快捷方法监听接口。

7、使用线程池,设计线程池最大连接数为500,在分析关键词的时候可以快速将关键词数据写入数据库

前端
1、路由器部署路径

2、echarts和element-ui的全局部署

3、通过URL在两个页面传递参数

4、前端与后端之间通过使用axios进行数据传递

5、使用element-ui的抽屉型表格,同时使用scope插槽获得点击的当前表单行数,实现链接跳转,删除功能。

八、 结对感受及队友评价

1、结对开发项目的心路历程与收获


珏:从一开始不知道从哪下手到现在完成结对作业,这个过程很漫长。一是时间上因为延迟提交,所以觉得时间很长,同时在这个作业中经历了团队github实战,与之相比显得更漫长。二是我们两位同学技术有限,一开始的时候并没有很确定怎么去写,后面选择的vue和nodejs并不是特别擅长,而且没有部署服务器的经验,所以我们先是学习了一段时间,然后一边学习一写,才慢慢理清思路要怎么实现,这个过程也感觉很漫长。结对的最大好处是两个人会互相鼓励,一起编程的时候也感觉更“热闹”。

思雨:开发过程其实很累,因为都是使用新技术,花了一半时间用在学习上,一半时间在开发项目上。整个过程最难在于前后端连接和部署,前后端完全分离的模式给我们带来很大的麻烦,但是也因为前后端分离,所以开发可以并行。同时也明白写代码没有什么捷径可以走,前端控件大量使用element-ui,但是它的控件本事较难修改,也会有很多不兼容的问题,带来的便利和玛麻烦是对等的。语言有1它的好处,自然也有它的限制,这其中需要我去深入学习。

1、评价结对队友


思雨=》珏:这次没有帮上忙,项目最难的部署和复杂的后端都由队友包办了,有点羞愧。同样是学习新的语言,队友表现的比较踏实认真,吸收极快,我因为学习慢,有些慌张,希望能向对方学习。总之,彼此都辛苦了。

珏=》思雨:刚开始完全不知道要怎么开始写,只能从会的html、css开始,是思雨提出来使用vue框架和nodejs做后端!她在学校vue方面很快,也能及时指出我在数据传输反面的问题,并且经常讨论数据库的设计。为了完成作业两个人都熬了好多个夜,但同时都学习了新的内容,并运用上了新学习的知识。

posted @ 2021-03-31 22:32  刘睿珏  阅读(128)  评论(9编辑  收藏  举报