简易地铁路线规划项目

作业描述

课程 https://edu.cnblogs.com/campus/gdgy/cse2021/homework/12288
作业要求 https://edu.cnblogs.com/campus/gdgy/cse2021/homework/12288
作业目标 设计并实现一个论文查重算法,学会使用PSP表格规划任务事件,学会测试代码,学会反思总结,基本掌握一个软件的开发流程

一、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 60
· Estimate · 估计这个任务需要多少时间 5 5
Development 开发 10 30
· Analysis · 需求分析 (包括学习新技术) 120 120
· Design Spec · 生成设计文档 20 30
· Design Review · 设计复审 10 10
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 5 10
· Design · 具体设计 20 60
· Coding · 具体编码 720 1580
· Code Review · 代码复审 30 60
· Test · 测试(自我测试,修改代码,提交修改) 30 30
Reporting 报告 60 120
· Test Repor · 测试报告 20 20
· Size Measurement · 计算工作量 5 5
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20 20
· 合计 1135 2160

二、配置环境

  • 使用工具:vscode
  • 代码运行环境:node.js(由于学习前端)

三、项目结构


主要执行文件为planning.js,接口函数文件为func.js,单元测试文件为argTest.jscontentTest.jsfinalRoutineTest.js,性能测试文件为programTest.js

四、地铁路线文件存储说明

地铁路线采取txt文件存储,一条路线独占一行,有利于js读入文件后通过换行符将文件内容划分为一个数组,数组里是一条条路线,单条路线开头为路线名,开头、站点与站点之间用-连接,若某站可以换乘,则在其后面添加@所换乘的线路,之所以不采用文字叙述可换乘是考虑到路线文件要简洁明了,地铁路线文件如下:

  • txt文件中路线不能独占一行是受记事本限制,上图中可以看到在vscode中每条路线都独占一行,因此不会出错

五、计算模块接口的设计与实现过程

  1. 接口有以下五个:
  • 把文件内容中的@替换为*可换乘:通过replace方法和正则表达式进行替换——handleText()
  • 查询路线——searchWay()
  • 对通过BFS算法得到的最短路径进行处理得到最终的利于查看的路径——finalRoutine()
  • Station类,保存一个站点的信息——站点名和所在路线名
  • Graph类,构造地铁路线无向图,包含广度优先搜索算法BFS(核心算法)
  1. 借助工具:
  • fs读取文件包
  1. 实现过程:
    依靠planning.js文件执行,在该文件中调用func.js中的接口
  • 需求1:从命令行中读取地铁文件名参数后通过handleText()接口函数得到所有路线(将@替换后的内容)
  • 需求2:从命令行中读取路线名后通过searchWay()接口函数得到所查询路线上的所有站点,并写入从命令行中读取的写入文件名中
  • 需求3:从命令行中读取起始终末站点后通过Station类以及Graph类构造地铁路线无向图

    最后通过finalRoutine()处理BFS得到的最短路径从而得到最终的路径
  1. 核心算法的实现与分析:
  • 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域
  • 实现原理:
  • 总的来说,BFS算法对出发结点的相邻结点开始探索,逐层探索,直至找到那条最短的路径
    核心算法代码:

六、性能改进

  1. 运行正常
  2. 由于node.js偏前端语言,无法采用VS 2017/JProfiler工具进行性能分析,故采用node.js自身的mocha框架 进行分析,有关mocha的安装与使用:https://blog.csdn.net/fenger_c/article/details/108107492
  • 测试原理:使用node.js中的assert模块,该模块是node.js的内置模块,主要用于断言。如果表达式不符合预期,就会抛出一个错误,mocha框架中包含该模块
    测试结果如下:

七、单元测试

测试需求1:

测试需求2:

测试需求3:

单元测试环节中测试了以下三个环节:

  • 读取命令行参数并进行异常情况处理
  • 读取文件并将内容中的换乘信息去除,只显示站点
  • 测对BFS算法得到的路径的处理
    第一个环节测试代码和结果:


    第二个环节测试代码和结果:



    第三个环节测试部分代码和结果:

八、异常处理说明

  • 输入参数个数不正确:
  • 输入参数格式不正确:文件后缀不能省略

九、总结

经过这次项目的实践,我更深入地了解了一个软件开发的基本流程,在此过程中也复习巩固了node.js前端知识和es6知识,并且将它用在了实践当中,也学习了BFS算法,希望做团队项目时在前端页面方面自己能竭尽自己所能,不拖团队后腿

posted @ 2021-10-11 21:41  melodyecho  阅读(117)  评论(0编辑  收藏  举报