编程语言
首页 > 编程语言> > 地铁线路项目-结对编程

地铁线路项目-结对编程

作者:互联网

地铁线路项目-结对编程

2019.7.25
完成了模块开发;填写PSP实际完成时间;完成了模块设计;进行单元测试、黑盒测试。

PSP表记录:

PSP2.1 Personal Software Process Stages Time Real Time
Planning 计划 1h 1h
  · Estimate    · 估计这个任务需要多少时间 1h 1h
Development 开发 21h 20.5h
  · Analysis    · 需求分析 (包括学习新技术) 2h 1.5h
  · Design Spec   · 生成设计文档 2h 1h
  · Design Review    · 设计复审 (和同事审核设计文档) 1h 1.5h
  · Coding Standard   · 代码规范 (为目前的开发制定合适的规范) 2h -
  · Design    · 具体设计 2h 1.5h
  · Coding    · 具体编码 6h 8h
  · Code Review   · 代码复审 2h 1h
  · Test    · 测试(自我测试,修改代码,提交修改) 4h 6h
Reporting 报告 6h
  · Test Report   · 测试报告 2h -
  · Size Measurement   · 计算工作量 2h -
  · Postmortem & Process Improvement Plan   · 事后总结, 并提出过程改进计划 2h 1.5h
合计 28h

计算模块设计与实现过程

1.模块设计

     class Station {
        public:
            string StationName;//站点名称
            vector<string> BelongTo ;//地铁线的名称
            vector<int> IndexOfLine;//对应的地铁线上的站序号
            bool Visited;//是否已被访问
     };
地铁线路
    template<class T> class Line 
    {
    public:
        string LineName;
        vector<T> Stations;
    };
地铁线路图
    class Map {
        public:
            //所有的站点
            map<string, Station> Stations;
            //所有的地铁线
            map<string, Line<Station>> Lines;
    };
路径
    class Path{
        public:
            int Start;//线路段开始序号
            int End;//线路段结束序号
            int Next;//下一段序号
            Line<Station> PathLine;//当前地铁线
    };
(2)读入地图文件中的字符串数据,进行字符串分割并创建上面列出的一系列对象,作为后续线路查询和线路搜索任务的数据。

性能分析

暂时未做性能分析。

单元测试

单元测试的覆盖率无法看到,设计了9条单元测试用例,如下:
    //测试输入不存在的地图文件初始化地图
    TEST_METHOD(TestInvalidMapPath)
    {
        //
        Map map = Core::InitMap("");
        Assert::AreEqual((int)map.Lines.size(), 0);
    }
    //测试存在的地图文件初始化地图
    //要检测每一条线的每一个站点太费事了,先只统计数量
    TEST_METHOD(TestValidMpathPath)
    {
        Map map = Core::InitMap("subway.txt");
        Assert::AreEqual((int)map.Lines.size(), 6);
        Assert::AreEqual((int)map.Stations.size(), 140);
    }

    //测试存在的地铁线路
    TEST_METHOD(TestSearchExistLine)
    {
        Map map = Core::InitMap("subway.txt");
        string lineName = "1号线";
        string stations[23] = { "刘园","瑞景新苑","佳园里","本溪路","勤俭道","洪湖里","西站","西北角","西南角","二纬路","海光寺","鞍山道","营口道","小白楼","下瓦房","南楼","土城","陈塘庄","复兴门","华山里","财经大学","双林","李楼" };
        Line<Station> line = Core::SearchLine(lineName, map);
        Assert::AreEqual(lineName, line.LineName);
        Assert::AreEqual((int)line.Stations.size(), 23);
        for (int i = 0;i < 23;i++)
        {
            Assert::AreEqual(line.Stations[i].StationName, stations[i]);
        }
    }

    //测试不存在的地铁线路
    TEST_METHOD(TestSearchNotExistLine)
    {
        Map map = Core::InitMap("subway.txt");
        string lineName = "X号线";
        Line<Station> line = Core::SearchLine(lineName, map);
        Assert::AreNotEqual(line.LineName, lineName);
    }

    //搜索起点到终点线路,存在于一条线路上
    TEST_METHOD(TestSearchExistPathInSingleLine)
    {
        Map map = Core::InitMap("subway.txt");
        vector<vector<Path>> pathss = Core::SearchPaths("本溪路", "西站",map);
        string path[4] = { "本溪路","勤俭道","洪湖里","西站" };
        Assert::AreEqual((int)pathss.size(), 1);
        Assert::AreEqual((int)pathss[0].size(), 1);
        for (int i = 0;i < 4;i++)
        {
            Assert::AreEqual(pathss[0][0].PathLine.Stations[pathss[0][0].Start + i].StationName, path[i]);
        }

    }

    //搜索起点到终点线路,存在于多条线路上
    TEST_METHOD(TestSearchExistPathInMultiLines)
    {
        Map map = Core::InitMap("subway.txt");
        vector<vector<Path>> pathss = Core::SearchPaths("洪湖里", "复兴路", map);
        string path[2][2] = { { "洪湖里","西站" }, { "西站","复兴路" } };
        Assert::AreEqual((int)pathss.size(), 1);
        Assert::AreEqual((int)pathss[0].size(), 2);
        
        for (int i = 0;i < 2;i++)
        {
            for (int j = 0;j < 2;j++) {
                Assert::AreEqual(pathss[0][i].PathLine.Stations[pathss[0][i].Start + j].StationName, path[i][j]);
            }
            
        }
    }

    //搜索起点到终点线路,起点不存在
    TEST_METHOD(TestSearchNotExistStartStation)
    {
        Map map = Core::InitMap("subway.txt");
        vector<vector<Path>> pathss = Core::SearchPaths("世纪城", "西站", map);
        Assert::AreEqual((int)pathss.size(), 0);
    }

    //搜索起点到终点线路,终点不存在
    TEST_METHOD(TestSearchNotExistEndStation)
    {
        Map map = Core::InitMap("subway.txt");
        vector<vector<Path>> pathss = Core::SearchPaths("西站", "世纪城", map);
        Assert::AreEqual((int)pathss.size(), 0);
    }

    //搜索起点到终点线路,空地图
    TEST_METHOD(TestSearchEmptyMap)
    {
        string empty = "";
        
        Map map = Core::InitMap("");
        vector<vector<Path>> pathss = Core::SearchPaths("洪湖里", "西站", map);
        Assert::AreEqual((int)pathss.size(), 0);
    }

异常处理说明

测试用例

1.测试用例设计

黑盒测试用例的设计方法多种多样,本次项目主要采用了等价类划分法、边界值分析法、错误推测法等进行用例的设计。

2.测试用例

 依据上面的用例设计方法,设计了一些测试用例,下表中列举了部分用例:
序号 标题 前置条件 输入 操作步骤 预期结果
1 正确查询线路 1.能在当前测试系统上运行
2.查询的线路存在于地图文件中
subway.exe -a 1号线 -map subway.txt -o station.txt 1.输入命令
2.观察命令行输出及程序文件夹目录的station.txt文件
3.对比结果
1.程序没有出错
2.命令行没有错误提示信息
3.station.txt文件中正确按格式写入了1号线的所有站点,并且顺序正确(此处省略了所有站点信息)
2 查询线路错误,线路不存在 1.能在当前测试系统上运行
2.查询的线路不存在于地图文件中
subway.exe -a 20号线 -map subway.txt -o station.txt 1.输入命令
2.观察命令行输出及程序文件夹目录的station.txt文件
3.对比结果
1.程序没有出错
2.命令行提示"没有要查找的地铁线"
3.station.txt文件不存在或者数据为空
3 查询线路错误,缺少必要参数-o 1.能在当前测试系统上运行 subway.exe -a 1号线 -map subway.txt 1.输入命令
2.观察命令行输出及程序文件夹目录的station.txt文件
3.对比结果
1.程序没有出错
2.命令行提示"缺少必要的参数-o"
3.station.txt文件不存在或者数据为空
4 查询线路错误,缺少必要参数,地图文件路径 1.能在当前测试系统上运行 subway.exe -a 1号线 -map -o station.txt 1.输入命令
2.观察命令行输出及程序文件夹目录的station.txt文件
3.对比结果
1.程序没有出错
2.命令行提示"缺少地图文件路径"
3.station.txt文件不存在或者数据为空
5 查询线路错误,缺少必要参数,输出结果文件路径 1.能在当前测试系统上运行 subway.exe -a 1号线 -map subway.txt -o 1.输入命令
2.观察命令行输出
3.对比结果
1.程序没有出错
2.命令行提示"缺少输出结果文件路径"
6 正确搜索路径,单条地铁线 1.能在当前测试系统上运行 subway.exe -b 刘园 洪湖里 -map subway.txt -o routine.txt 1.输入命令
2.观察命令行输出
3.对比结果
1.程序没有出错
2.命令行无错误信息
3.routine.txt文件中正确按格式输出了1号线及从刘园到洪湖里的所有站点信息
7 正确搜索路径,两条地铁线 1.能在当前测试系统上运行 subway.exe -b 洪湖里 复兴路 -map subway.txt -o routine.txt 1.输入命令
2.观察命令行输出
3.对比结果
1.程序没有出错
2.命令行无错误信息
3.routine.txt文件中正确按格式输出了:1号线 洪湖里 西站 6号线 复兴路
8 正确搜索路径,没有可达的线路 1.能在当前测试系统上运行
2.地图文件中新增一条线路20号线,里面的线路与其他线路都没有换乘站,且该线路上有一个站为世纪城
subway.exe -b 洪湖里 世纪城 -map subway.txt -o routine.txt 1.输入命令
2.观察命令行输出
3.对比结果
1.程序没有出错
2.命令行"没有可达的线路"
3.routine.txt文件不存在或者为空
9 搜索路径出错,缺少必要参数-o 1.能在当前测试系统上运行 subway.exe -b 洪湖里 复兴路 -map subway.txt 1.输入命令
2.观察命令行输出
3.对比结果
1.程序没有出错
2.命令行提示"缺少必要的参数-o"
10 搜索路径出错,缺少必要参数,输出结果文件路径 1.能在当前测试系统上运行 subway.exe -b 洪湖里 复兴路 -map subway.txt 1.输入命令
2.观察命令行输出
3.对比结果
1.程序没有出错
2.命令行提示"缺少输出结果文件路径"
我没法百分之百确定我的程序肯定是正确的:
(1)通过程序的设计和代码走查,程序的逻辑上没有问题;
(2)单元测试部分尽可能覆盖了代码逻辑;
(3)功能测试是采用测试用例设计的方法,尽可能以最少的用例覆盖了更多的情况。

心得体会

通过个人项目和结对编程,我主要有如下的心得:
(1)以软件工程的思想能够开发出耦合度低,复用性强,质量有保证的程序;
(2)结对编程能够帮助组队人互相提高,并且保证产出代码和软件的质量;
(3)通过边做边学的方式能够更好的理解软件工程思想,对于以后进行相关教学工作提供了灵感;
(4)自己当年学习软件工程过程很痛苦,通过这次的学习,有了新的领悟。

标签:map,结对,Core,int,编程,线路,地铁,subway,txt
来源: https://www.cnblogs.com/harry240/p/11247460.html