1、Github地址

GitHub - HansBug/pair_program_word_chain


2、PSP表格(独立)

PSP2.1

Personal Software Process Stages

预估耗时(小时)

实际耗时(小时)

Planning

计划

1

0.5

· Estimate

· 估计这个任务需要多少时间

10

50

Development

开发

20

22.7

· Analysis

· 需求分析 (包括学习新技术)

6

5.43

· Design Spec

· 生成设计文档

0.5

2

· Design Review

· 设计复审 (和同事审核设计文档)

3

1

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

0.5

3

· Design

· 具体设计

0.5

4

· Coding

· 具体编码

10

13

· Code Review

· 代码复审

1

3

· Test

· 测试(自我测试,修改代码,提交修改)

1

3

Reporting

报告

3

2

· Test Report

· 测试报告

1

3

· Size Measurement

· 计算工作量

1

3

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

1

2

合计

38

82.3

3、结对编程的设计(独立)

基本设计过程

我们把代码分成3个部分:

  1. 核心接口
  2. 命令行程序
  3. GUI程序

core.dll中的接口

接口定义在文件core.h中,EXPORT关键字是我们自己定义的 DLL函数导出前缀。

EXPORT int TEST_LIB_PLUS(int a, int b);
EXPORT int gen_chain_word(char *words[], int len, char *result[], char head, char tail, bool enable_loop);
EXPORT int gen_chain_char(char *words[], int len, char *result[], char head, char tail, bool enable_loop);
EXPORT int TEST_LIB_PLUS(int a, int b);
EXPORT int gen_chain_word(char *words[], int len, char *result[], char head, char tail, bool enable_loop);
EXPORT int gen_chain_char(char *words[], int len, char *result[], char head, char tail, bool enable_loop);

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

上手就是埋头写代码,哪有时间来设计?

5、画出UML图(独立)

单词学习系统软件功能架构图_命令行

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

单词学习系统软件功能架构图_命令行_02

7、描述这些做法的优缺点, 说明你是如何把它们融入结对作业中的(独立)

这些做法非常棒!我们

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

下图就是计算模块的部分单元测试啦:

单词学习系统软件功能架构图_单词学习系统软件功能架构图_03

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

异常我们采用负数返回值表示,定义在 core.h 里面。

// This is all the possible return value for exported dll function
#define CORE_WORDS_HAS_CIRCLE        (-1)
#define CORE_WORDS_HAS_EMPTY         (-2)
#define CORE_WORDS_HAS_INVALID       (-3)
#define CORE_NO_WORD_CHAIN           (-4)  // no word chain
#define CORE_NO_MATCHED_WORD_CHAIN   (-10) // we found word chains, but they don't match start or end characters.
// This is all the possible return value for exported dll function
#define CORE_WORDS_HAS_CIRCLE        (-1)
#define CORE_WORDS_HAS_EMPTY         (-2)
#define CORE_WORDS_HAS_INVALID       (-3)
#define CORE_NO_WORD_CHAIN           (-4)  // no word chain
#define CORE_NO_MATCHED_WORD_CHAIN   (-10) // we found word chains, but they don't match start or end characters.

10、界面模块(如果没有实现GUI,则可以描述命令行模块)的详细设计过程

界面设计

画界面用的是 QT 自带的 QT Designer 设计工具。这个工具灰常好用,所见即所得,操作又略略繁琐,虽然耗费了我们大量的时间来熟悉这个鬼东西,但最终还是取得了不错的效果。

QT Designer 设计的界面是保存在一个名字为.ui文件中的,这个文件采用 xml 语言描述了界面设计。在编译QT App时,QT会自动将这个 .ui 文件转换成一个 .h 文件,我们可以直接在代码中使用这个文件,特别方便。

界面特色

我们的 GUI 是采用 QT 框架实现的,它具有以下特色:

  1. 界面美观、简洁大方、操作简单、功能完善
  2. 计算采用后台线程进行计算,较长时间运算不会卡 UI 线程

单词学习系统软件功能架构图_QT_04

11、界面模块(GUI或命令行模块)与计算模块的对接

界面模块与计算模块的对接最后进行的几个步骤,此时我们已经完成了核心模块的编写,因此,直接在代码中调用核心模块的头文件即可正常编写代码,再配合上cmake,就能自动进行动态链接。

所以,对接就这样完成啦。

12、描述结对的过程

我们同心协力,携手并进,有说有笑的完成了结对。

图片记录:

单词学习系统软件功能架构图_命令行_05