软件工程结对项目总结

项目内容
课程软件工程(罗杰)
作业要求结对编程作业
本次作业要完成的目标熟悉结对编程,以结对编程的形式完成题目

1.项目地址

GitHub地址

2.开发前PSP表

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

3.接口设计

information hiding

  • In computer science, information hiding is the principle of segregation of the design decisions in a computer program that are most likely to change, thus protecting other parts of the program from extensive modification if the design decision is changed. The protection involves providing a stable interface which protects the remainder of the program from the implementation (the details that are most likely to change).
    -wiki

这里讲述了设置接口的重要意义就是保护程序在其他地方被修改的时候被连带着修改。

Interface Design

  • User interface design requires a good understanding of user needs.
    -wiki

参照作业要求,接口如下定义

static int gen_chain_word(char* words[], int len, char* result[], char head, char tail, bool enable_loop);

static int gen_chain_char(char* words[], int len, char* result[], char head, char tail, bool enable_loop);

在阅读资料的过程中也知道了好的接口需要满足很多原则:单一职责原则、里氏替换原则等,本次作业有明确的接口要求,这方面无需过多考虑。

Loose Coupling

松散耦合,松耦合让模块之间的依赖更小,独立性更高,这样即使需要修改不受影响,而且功能相同模块还能替换使用。

4.计算模块接口的设计与实现过程

本次项目中计算模块用了面向对象类的方式进行封装。计算模块涉及到两个类,结点类Node和计算和接口在Core类中。通过Core的接口,传入接口规定的各类参数,构造单词相应结点对象,将结点对象存起来,对其进行拓补排序和动态规划计算。下面是几个函数的关系。

1346248-20190314212807402-337335065.jpg

算法的关键在于怎么采用怎样的数据结构来存储数据。本次项目我们用了26个vector来存储构造的结点对象,每个vector中的结点对象都是相同字母开头的,并分别用一个二维数组和一位数组来存储结点间的边关系和相应字母开头的结点的入度。根据拓补排序再对26个vector进行排序,并用排好的序列进行动态规划求出最长链。对于有-r的情况,我们决定用枚举的方式强行找出,但是还没来得及实现。

独到之处就在于用的数据结构不同,这种存储方法可以节省内存,不用为每个结点建一个相连的结点vector,并且使用二维数组表示两类结点的边关系更能容易判断出有没有环。

5.UML图

1346248-20190314223915774-958951708.png

6.计算模块接口部分的性能改进

之前用的是每个结点有一个vector来存储与其相连的结点的形式来实现接口,这样拓补排序的实现会相对较慢,采用上面第4点的结构进行接口实现的优化之后,性能得到了改进,下面是改进之后的效能分析图:

1346248-20190314212833422-523182042.png
1346248-20190314212839792-541169515.png

7.Design by Contract, Code Contract的优缺点和对作业的结合

这两个Contract就是一系列的约定,类似之前OO课一直强调的前置条件,后置条件等,如果能做到的话各模块之间的功能将非常清晰且任务明确。缺点是有些功能并不容易区分开,而且会在在各个方法中增加复杂度。

在结对作业中,由于有规定的接口所以一定程度上遵循了约定,但是并未一直严格执行。

8.计算模块部分单元测试展示

计算模块的单元测试覆盖率达到了93%,如下图所示:
1346248-20190314212906693-1738618260.png

单元测试测试了正常情况(前两个)和异常情况(后一个)。第一个测试的是get_chain_word的情况,第二个测试的是get_chain_char的情况,异常情况测试了不存在-r参数时输入有环的异常情况。如下
1346248-20190314212927876-1175195066.png
1346248-20190314213013448-542041843.png

9.计算模块部分异常处理说明

  • 没有-r参数时有环的异常情况;设计目标是发现输入中没有-r参数进行“输入文件中存在环”的提示并退出程序。

  • 对于输入文件不存在的异常情况;设计目标是给出提示“Error opening file",并结束程序。
    1346248-20190314224252551-887878850.png
  • 对于输入中诸如同时出现-w -c的异常情况,设计目标是给出提示“para error",并结束程序。
    1346248-20190314224318427-710106415.png

10.命令行模块设计

我们只实现了命令行模块。

本次项目专门设计了一个Input类来实现命令行输入地处理,其中类中的属性有is_w、is_c、is_r、filePath等,都是私有属性,必须通过相应的成员函数访问。主要用类中的spilt方法来分割各个参数。
1346248-20190314224043598-462978126.png
spilt方法根据传入的命令行参数,辨识出具体是那个参数,并且出现一次后进行标记,相同参数再出现则报错,-w -c亦是如此。提取出相应参数后给相应属性赋值。

11.命令行模块与计算模块的对接

我们将计算模块暴露出来两个接口,命令行在处理完并构造出单词表之后可以使用这两个接口和计算模块进行连接。

static int gen_chain_word(char* words[], int len, char* result[], char head, char tail, bool enable_loop);  // 计算最多单词数量
static int gen_chain_char(char* words[], int len, char* result[], char head, char tail, bool enable_loop);  // 计算最多字母数量

12.结对过程

驾驶员和领航员,一个在写代码,一个在旁边看,一段时间后换人。
1346248-20190314224148081-325973005.jpg

13.说明结对的优缺点,并举队友和自身优缺点

  • 优点:代码一直复审,有两个人思考,能及时发现问题,互相有交流,能够学到新思路。有旁人监督也会更加专心。

  • 缺点:正如我上一篇博客所担心,两个人水平都不高的情况下效率十分低下,两个人思路都陷入僵局的时候不但进度推进慢,而且还有些尴尬。

成员优点缺点
张峻槐(我)1.细节考虑更多 2.积极交流 3.擅长找到问题对复杂点的问题不知从何着手
曾林思(队友)1.解题思路清晰 2.执行力强 3.改进算法,完成核心工作不够细心

14.实际花费时间PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2010
-Estimate-估计这个任务需要多少时间2010
Development开发18902430
-Analysis-需求分析(包括学习新技术)240360
-Design Spec-生成设计文档3060
-Design Review-设计复审(和同事审核设计文档)3010
-Coding Standard-代码规范(为目前的开发制定合适的规范)3020
-Design-具体设计300480
-Coding-具体编码600900
-Code Review-代码复审360240
-Test-测试(自我测试,修改代码,提交修改)300360
Reporting报告100130
-Test Report-测试报告6060
-Size Measurement-计算工作量1010
-Postmortem & Process Improvement Plan事后总结,并提出过程改进计划3060
合计20102570

转载于:https://www.cnblogs.com/buaa-zjh/p/10530304.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值