这个作业属于哪个课程 | 计科1/2班 |
---|---|
这个作业要求在哪里 | 结对项目 |
这个作业的目标 | 与队友共同交流完成结对项目:四则运算生成器 |
团队成员
姓名 | 学号 | Github作业链接 |
---|---|---|
苏建澎 | 3121005007 | 苏建澎:GitHub作业链接 |
黎灿宇 | 3121004867 | 黎灿宇:GitHub作业链接 |
1.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 30 |
·Estimate | 估计这个任务需要多少时间 | 60 | 30 |
Development | 开发 | 700 | 1080 |
·Analysis | 需求分析(包括学习新技术) | 200 | 300 |
·Design Spec | 生成设计文档 | 60 | 70 |
·Design Review | 设计复审 | 60 | 100 |
·Coding Standard | 代码规范(为目前的开发制定合适的规范) | 40 | 30 |
·Design | 具体设计 | 120 | 100 |
·Coding | 具体编码 | 200 | 300 |
·Code Review | 代码复审 | 60 | 180 |
Test | 测试(自我测试,修改代码,提交修改) | 300 | 410 |
·Reporting | 报告 | 150 | 180 |
·Test Repor | 报告测试 | 30 | 30 |
·Size Measurement | 计算工作量 | 30 | 20 |
·Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 90 | 180 |
合计 | 1060 | 1520 |
2.设计要求文档
- 一:设计目的:设计一个四则运算程序,使得能生产1-10以内的加减乘除题目以及结果,并能进行结果判断。
- 二:设计要求:使得设计的题目不重复,并能生成任意量的题目,能进行异常检测。
- 三:算法设计:二叉树,判断树是否同构使得满足要求。能检测出用户操作异常,并将模块异常部分告知用户让其重新填写。
- 四:进行性能分析,并尝试提出更优新能方案。
- 五:环境配置:Python3.11/3.10
3.效能分析
耗时检测情况:
-函数generate_num生成10次题目所花的时间
函数generate_num生成10次题目所花的时间为0.0010001659393310547s
-整个程序的执行所花的时间为:
生成10道题目整个程序所花的时间为:0.0010001659393310547s
可以发现,生成10道题的整个过程里,generate_num函数所花的时间和整个程序所花的时间几乎相同,可以认为花费时间的算法部分只有generate_num函数
从数值上看,平均每道题生成的时间约为0.0001s。换而言之,生成一万道题目差不多花费1s就能完成,效率可以说是很高的
内存占用检测
由于generate_num函数和isOmorphic函数是在repeat()函数钟一齐被调用的,所以通过监测repeat函数的执行情况即可监测generate_num和isOmorphic这两个核心算法的情况:
由结果可知,生成1000个问题的过程中,generate_num占用了约0.7MiB的内存,isOmorphic占用了约0.1MiB的内存
即平均生成每道题generate_num函数占用的内存为0.0007MiB,isOmorphic占用了约0.0001MiB的内存,对于一个程序来说几乎可以忽略不计
内存泄漏检测
整个程序运行得内存泄漏情况如下:
从结果可知,该程序的内存泄漏情况是比较严重的,原因是程序执行过程钟占用的内存没有及时释放
总结
优点:整个程序在时间效率上是很高的,足以应对普通的商业需求。同时,程序在执行的过程中内存占用也几乎可以忽略不计,对运行的硬件的要求极低。
不足:本程序的内存泄漏情况严重,可以在释放内存的功能上做一些完善。
4.代码设计
- 整体代码设计思路流程图如下图所示:
以下是程序所定义的函数以及类 - 1)定义一个数字结构体生成随机产生的分数
class N_S: # 数字结构体
def __init__(self):
self.number_sign = 0 # 数的类型
self.numerator = 0 # 分子
self.denominator = 1 # 分母
def generate_number_sign(self): # 随机生成数的类型,类型值为1时分母默认为1
self.number_sign = random.randint(1, 2)
def generate_numerator(self, min, max): # 随机生成分子的大小
self.numerator = random.randint(min, max)
def generate_denominator(self, min, max): # 随机生成分母的大小
self.denominator = random.randint(min, max)
- 2)定义一个二叉树,并定义相关算法,进行中序遍历
class B_T: # 二叉树结构体,以及相关
def __init__(self, rootObj):
self.key = rootObj # 将运算符作为根节点
self.leftChild = None
self.rightChild = None
def insert_left(self, newRoot): # 插入左子树
if (self.leftChild == None):
self.leftChild = B_T(newRoot)
else:
t = B_T(newRoot)
t.leftChild = self.leftChild
self.leftChild = t
def insert_right(self, newRoot): # 插入右子树
if (self.rightChild == None):
self.rightChild = B_T(newRoot)
else:
t = B_T(newRoot)
t.rightChild = self.rightChild
self.rightChild = t
def get_leftChild(self): # 返回左孩子
return self.leftChild
def get_rightChild(self): # 返回右孩子
return self.rightChild
def set_root(self, Obj): # 修改当前结点的内容
self.key = Obj
def get_Root(self): # 返回当前结点的内容
return self.key
def inorder(self): # 中序遍历
if self.leftChild:
self.leftChild.inorder()
if self.key:
num.append(self.key)
if self.rightChild:
self.rightChild.inorder()
函数名 | 传递变量 | 返回值 | 函数功能 |
---|---|---|---|
isOmorphic | (t1, t2)传递两个树 | TRUE/FALSE | 判断树是否同构,防止出现重复的题目 |
generate_operator | NULL | '+' '-' '*' '/' | 随机生成运算符号‘+’,‘-’,‘*’,‘/’ |
num_size | NULL | 随机运算长度为1,2或3 | 随机生成题目长度 |
generate_num | (min, max)题目范围的上下限 | 返回一个树t | 随机生成题目 |
repeat | (n, min, max)n为生成题目的数量 | NULL | 多次生成不同的题目 |
str_num | t(树进行中序遍历的结果) | 字符串result1存储到txt文件,result2进行结果运算 | 将num列表转换为字符串,并方便后续运算 |
main | NULL | NULL | 主函数引导过程,输出结果 |
- 3)主要函数算法解析
- 3.1)isOmorphic(t1, t2):
算法设计过程:
函数isOmorphic接受两个参数t1和t2,分别表示两棵树的根节点。首先判断t1和t2是否都为None,如果是则返回True,表示两棵树都为空树,结构相同。如果t1和t2中有一个为空树而另一个不为空树,则返回False,表示两棵树结构不同。
接下来判断t1和t2的根节点的值是否相同,如果不同则返回False,表示两棵树结构不同。如果根节点的值相同,则分三种情况进行判断:
一、如果t1和t2的左子树都为空,则递归判断t1和t2的右子树是否同构。
二、如果t1和t2的左子树都不为空,且左子树的根节点的值相同,则递归判断t1和t2的左子树和右子树是否同构。
三、如果t1和t2的左子树不同时为空,且左子树的根节点的值不同,则递归判断t1的左子树和t2的右子树是否同构,以及t1的右子树和t2的左子树是否同构。
最终返回True或False,表示两棵树是否同构。
- 3.2) generate_num(min, max):
算法设计过程:
参数:生成题目的上max下min限
1. 首先调用 `num_size()` 函数生成题目长度 `size`。
2. 如果题目长度为2,随机生成一个运算符号 `operator`,并将其插入二叉树 `t` 的根节点。
3. 生成两个参与运算的数 `a` 和 `b`,并随机生成它们的类型(正数或分数)和大小(分子和分母)。
4. 将数 `a` 插入二叉树 `t` 的左子树,将数 `b` 插入右子树。
5. 如果题目长度为1或3,随机生成一个运算符号 `operator`,并将其插入二叉树 `t` 的根节点。
6. 如果题目长度为1,再随机生成一个运算符号 `operator`,并将其插入二叉树 `t` 的左子树。
7. 生成三个参与运算的数 `a`、`b` 和 `c`,并随机生成它们的类型和大小。
8. 将数 `c` 插入二叉树 `t` 的右子树。
9. 将数 `a` 插入二叉树 `t` 的左子树。
10. 将数 `b` 插入二叉树 `t` 的左子树的右子树。
11. 如果题目长度为3,再随机生成一个运算符号 `operator`,并将其插入二叉树 `t` 的右子树。
12. 将数 `b` 插入二叉树 `t` 的右子树的左子树。
13. 将数 `c` 插入二叉树 `t` 的右子树的右子树。
14. 返回生成的二叉树 `t`。
- 3.3)str_num(t):
参数:生成题目的树t的中序遍历结果
1. 定义一个空列表 `num`,用于存储生成的题目字符及计算数字。
2. 如果列表 `num` 的长度为5,即已经生成了3个数字和2个运算符,取出根节点在列表中的位置。
3. 如果第二个字符是乘除,第一个字符是加减,则在加减的部分加上括号。
4. 如果第一个字符和第三个字符不相同,则在第二个运算符的两侧加上括号。
5. 根据列表 `num` 的长度,生成题目的显示结果 `result1` 和电脑进行运算的结果 `result2`。
6. 将 `result1` 和 `result2` 作为元组返回。
- 3.4)repeat(n, min, max):
参数:生成题目的数量n,下限min,上限max
1. 定义一个循环,当 `n` 不等于0时,执行循环体。
2. 调用 `generate_num` 函数生成一个随机数 `t`,该随机数的范围在 `min` 和 `max` 之间。
3. 如果 `title` 列表的长度为0,说明是第一次生成题目,将 `t` 添加到 `title` 列表中,并将 `n` 减1。
4. 如果 `title` 列表的长度不为0,说明已经生成过题目,需要判断新生成的 `t` 是否与之前的题目重复。
5. 遍历 `title` 列表,对于每个已经生成的题目,调用 `isOmorphic` 函数判断新生成的 `t` 是否同构于该题目。
6. 如果新生成的 `t` 与某个已经生成的题目同构,则继续循环,生成新的随机数。
7. 如果新生成的 `t` 与所有已经生成的题目都不同构,则将 `t` 添加到 `title` 列表中,并将 `n` 减1。
8. 循环结束后,函数执行完毕。
- 3.5)main():
算法过程如下
1. 定义 `main` 函数,该函数是程序的主要逻辑。
2. 通过 `input` 函数获取用户输入的功能选项,如果输入不是1或2,则提示用户重新输入。
3. 如果用户选择生成题目,则删除之前已有的文件,避免出现文本重叠的情况。
4. 通过 `input` 函数获取用户输入的题目数量 `n`,数值下限 `min` 和数值上限 `max`。
5. 进行模块异常检验,如果输入不符合要求,则提示用户重新输入。
6. 打开 `Exercises.txt` 和 `Answers.txt` 文件,以追加模式写入题目和答案。
7. 调用 `repeat` 函数生成题目,并将题目和答案写入文件。
8. 遍历 `title` 列表,对于每个题目,将其转换为字符串形式,并将其写入 `Exercises.txt` 文件。
9. 将答案字符串转换为表达式,通过 `eval` 函数计算表达式的值,并将其写入 `Answers.txt` 文件。
10. 如果用户选择自动查答案,则删除之前已有的文件,避免出现文本重叠的情况。
11. 打开 `Exercises.txt` 和 `Answers.txt` 文件,以读取模式读取题目和答案。
12. 逐行读取题目和答案,对于每个题目,将其转换为表达式,并通过 `eval` 函数计算表达式的值。
13. 如果计算结果与答案的差小于 `LIMIT`,则将该题目的编号添加到 `Correct` 列表中,否则将其添加到 `Wrong` 列表中。
14. 将 `Correct` 和 `Wrong` 列表转换为字符串形式,并将其写入 `Grade.txt` 文件。
15. 程序执行完毕。
4.测试结果
- 1.上下限1-9,生成10道题目:
生成题目结果Exercises.txt:
1. 3/4 - 1/5
2. ( 7÷3 + 1 ) ÷ 3
3. 9/5 - ( 1÷2 * 1 )
4. 5/2 ÷ ( 9 - 1÷3 )
5. 1 * ( 4 + 2 )
6. 3 * ( 7 / 9 )
7. 7 * 2
8. 2 * ( 7÷3 / 1÷4 )
9. 4/5 ÷ 5 ÷ 5
10. ( 8 + 3 ) ÷ 5
题目对应结果Answer.txt:
1. 11/20
2. 10/9
3. 13/10
4. 15/52
5. 6
6. 7/3
7. 14
8. 56/3
9. 4/125
10. 11/5
输入结果:(第三题和第七题答案出错)
1. 11/20
2. 10/9
3. -13/10
4. 15/52
5. 6
6. 7/3
7. 10
8. 56/3
9. 4/125
10. 11/5
检查结果:Grade.txt内容:
Correct: 8(1,2,4,5,6,8,9,10)
Wrong: 2(3,7)
- 2.上下限1-9,生成100道题目:
生成题目结果Exercises.txt:
1. 3 - 9 - 9
2. ( 4÷9 + 2 ) ÷ 5
3. 6 ÷ ( 5÷9 - 4 )
4. 1 * 3/2
5. 8 - 1/2
6. 7 ÷ ( 3 + 3 )
7. 7 * ( 8 + 9 )
8. 6 + ( 7 / 1÷5 )
9. ( 4 + 7÷2 ) * 9
10. 2/5 - ( 2 + 5 )
11. 1 + 2
12. 4 - 1
13. 7/5 + ( 2 - 8÷3 )
14. 5/9 ÷ ( 5 + 1 )
15. 2 * 3/2 * 1
16. 2/7 * 1 * 1
17. 1 + 9
18. 4 * 4
19. 2/9 ÷ 4 ÷ 8
20. 8 - ( 8 + 7÷4 )
21. 1 * 5/7
22. ( 1÷7 - 2 ) ÷ 5/7
23. 3 ÷ 4
24. 1/9 * 1/2 * 1
25. 7/6 * ( 2÷3 / 7÷9 )
26. 6 ÷ ( 9 - 7÷4 )
27. 3/4 - 5
28. 3 ÷ ( 1 + 1÷2 )
29. 3 ÷ 9 ÷ 9
30. 5/3 - 9/4 - 7/6
31. 2 + ( 9÷8 / 5÷2 )
32. 1 ÷ 5 ÷ 4
33. ( 4 + 4÷7 ) ÷ 2
34. 2 - 7
35. 5/9 ÷ 1 ÷ 2/3
36. 7 - ( 1 + 4÷9 )
37. 2 ÷ 3
38. 9 + ( 5÷8 * 9÷7 )
39. 9 - 2
40. 4/9 + ( 5 / 6 )
41. 7/8 - 3 - 6
42. 8/3 - 7
43. 1/3 * 8
44. 5 * 8
45. 2/7 * 7
46. 6/5 ÷ 7/2
47. 7 + ( 2÷9 - 3÷2 )
48. 1 * 9/5
49. 1 * 9
50. 1/2 * ( 1÷5 + 7 )
51. 5/4 ÷ 1 ÷ 6
52. 2 ÷ ( 3÷4 * 4÷5 )
53. 3/4 * 8/5
54. 9/2 + ( 7 - 9 )
55. 2 + 7/6 + 4/3
56. 1/4 ÷ 9 ÷ 5
57. 2/7 + 3 + 2
58. 7/4 + 8/5
59. 4/3 - 2 - 6
60. 7 * 9
61. 3/8 ÷ 5/2
62. 9/5 ÷ 8
63. 8 - 8
64. 5 ÷ 7 ÷ 9
65. 3/2 - 8
66. 5/9 * 9
67. 2 ÷ ( 8 * 3 )
68. ( 8÷9 - 5 ) ÷ 5
69. 4 - 5 - 2
70. 3 - 6
71. 6 - 8
72. 9 ÷ 6 ÷ 7
73. 3 ÷ ( 5 * 9 )
74. 4 + 9
75. 8/9 + 5/7
76. 1 + 5
77. 8/3 + 4 + 1/5
78. 1 * ( 5÷4 + 3÷8 )
79. ( 6 - 2 ) * 5
80. 2/3 - ( 3 * 1 )
81. 5/9 ÷ ( 9÷2 * 6 )
82. 2/9 - 3
83. ( 3 - 5÷7 ) * 4
84. 4 + 3 + 3/5
85. 1 - 2
86. 2/5 * ( 2 / 1 )
87. 5 - ( 6÷7 / 3 )
88. ( 3÷8 - 6 ) * 2
89. 4/5 - ( 9÷5 / 3÷2 )
90. 5 - 7/9 - 8/3
91. 3/5 - 4
92. 1 + 2/3 + 1/5
93. 2/3 - 6
94. 7/8 * 8
95. 7/3 - ( 1÷3 + 1÷2 )
96. 1 ÷ 2/3
97. 9/4 * ( 6 - 5 )
98. 5 ÷ ( 1÷6 * 6 )
99. 1 * 3 * 9
100. 3/2 + 4
题目对应结果Answer.txt:
1. -15
2. 22/45
3. -54/31
4. 3/2
5. 15/2
6. 7/6
7. 119
8. 41
9. 135/2
10. -33/5
11. 3
12. 3
13. 11/15
14. 5/54
15. 3
16. 2/7
17. 10
18. 16
19. 1/144
20. -7/4
21. 5/7
22. -13/5
23. 3/4
24. 1/18
25. 1
26. 24/29
27. -17/4
28. 2
29. 1/27
30. -7/4
31. 49/20
32. 1/20
33. 16/7
34. -5
35. 5/6
36. 50/9
37. 2/3
38. 549/56
39. 7
40. 23/18
41. -65/8
42. -13/3
43. 8/3
44. 40
45. 2
46. 12/35
47. 103/18
48. 9/5
49. 9
50. 18/5
51. 5/24
52. 10/3
53. 6/5
54. 5/2
55. 9/2
56. 1/180
57. 37/7
58. 67/20
59. -20/3
60. 63
61. 3/20
62. 9/40
63. 0
64. 5/63
65. -13/2
66. 5
67. 1/12
68. -37/45
69. -3
70. -3
71. -2
72. 3/14
73. 1/15
74. 13
75. 101/63
76. 6
77. 103/15
78. 13/8
79. 20
80. -7/3
81. 5/243
82. -25/9
83. 64/7
84. 38/5
85. -1
86. 4/5
87. 33/7
88. -45/4
89. -2/5
90. 14/9
91. -17/5
92. 28/15
93. -16/3
94. 7
95. 3/2
96. 3/2
97. 9/4
98. 5
99. 27
100. 11/2
输入结果:(修改15、21题结果)
1. -15
2. 22/45
3. -54/31
4. 3/2
5. 15/2
6. 7/6
7. 119
8. 41
9. 135/2
10. -33/5
11. 3
12. 3
13. 11/15
14. 5/54
15. -3
16. 2/7
17. 10
18. 16
19. 1/144
20. -7/4
21. -5/7
22. -13/5
23. 3/4
24. 1/18
25. 1
26. 24/29
27. -17/4
28. 2
29. 1/27
30. -7/4
31. 49/20
32. 1/20
33. 16/7
34. -5
35. 5/6
36. 50/9
37. 2/3
38. 549/56
39. 7
40. 23/18
41. -65/8
42. -13/3
43. 8/3
44. 40
45. 2
46. 12/35
47. 103/18
48. 9/5
49. 9
50. 18/5
51. 5/24
52. 10/3
53. 6/5
54. 5/2
55. 9/2
56. 1/180
57. 37/7
58. 167/20
59. -20/3
60. 63
61. 3/20
62. 9/40
63. 0
64. 5/63
65. -13/2
66. 5
67. 1/12
68. -37/45
69. -3
70. -3
71. -2
72. 3/14
73. 1/15
74. 13
75. 101/63
76. 6
77. 103/15
78. 13/8
79. 20
80. -7/3
81. 5/243
82. -25/9
83. 64/7
84. 38/5
85. -1
86. 4/5
87. 33/7
88. -45/4
89. -2/5
90. 14/9
91. -17/5
92. 28/15
93. -16/3
94. 7
95. 3/2
96. 3/2
97. 9/4
98. 5
99. 27
100. 11/2
检查结果:Grade.txt内容:
Correct: 98(1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100)
Wrong: 2(15,21)
- 3.测试上限1-2,生成20道题目
生成题目结果Exercises.txt:
1. 1/2 - 2
2. 2 + ( 2 / 1 )
3. 2 * ( 1 + 1 )
4. 2 - 2
5. 2 - ( 2 / 1 )
6. 2 * 1 * 1/2
7. 1 - ( 1 + 1 )
8. ( 2 - 2 ) ÷ 1
9. 2 ÷ 1
10. 2 - 2 - 2
11. 2 + 2
12. 2 ÷ ( 2 + 1 )
13. 1 * ( 2 / 1 )
14. 1/2 - 1
15. 2 + ( 2 * 2 )
16. 2 * 1 * 1
17. 1 * 1
18. 2 ÷ ( 2 * 2 )
19. 2 * ( 1 - 2 )
20. 2 * ( 1 / 1÷2 )
题目对应结果Answer.txt:
1. -3/2
2. 4
3. 4
4. 0
5. 0
6. 1
7. -1
8. 0
9. 2
10. -2
11. 4
12. 2/3
13. 2
14. -1/2
15. 6
16. 2
17. 1
18. 1/2
19. -2
20. 4
输入结果:(9,15,20题修改)
1. -3/2
2. 4
3. 4
4. 0
5. 0
6. 1
7. -1
8. 0
9. 1
10. -2
11. 4
12. 2/3
13. 2
14. -1/2
15. 4
16. 2
17. 1
18. 1/2
19. -2
20. 0
检查结果:Grade.txt内容:
Correct: 17(1,2,3,4,5,6,7,8,10,11,12,13,14,16,17,18,19)
Wrong: 3(9,15,20)
- 受篇幅影响本文只显示出三次测试结果:我们发现测试结果均无误且程序性能良好,能正确生成题目以及结果,并对二次做题后的结果进行批改。因此程序无误。
5.模块异常分析
- 1)当出现非法访问操作时:
需要重新输入操作。 - 2)输入上下限错误时:
一、下限输入错误(超过10):
二、上限输入错误(超过10):
三、下限大于上限:
四、下限小于0:
当出现以上操作时会提示用户重新输入上下限。
6.Code Quality Analysis
根据分析结果可知,以上都是弱警告,对于程序的运行不会有影响,但是对于代码的可读性可能有一定困难,但由于笔者已经对关键部分的算法和变量进行了注释,因此影响不大。
7.需要优化的部分
-
1.当需要出现大量的数据时,例如生成100000000条题目,回产生程序无法正常运行,长期处于运作状态。
-
2.当运算长度为3且出现括号时,生成的题目/号无法正常显示,而直接显示为÷。对于做题人无影响,但会降低程序效率。
-
3.代码过长,部分代码出现冗余,造成可读性上的困难。
-
解决方案的提出:优化算法,减少所需的运行内存,避免出现题目量过大时出现死循环。对于出现÷的部分优化用replace进行替代。把冗余和相同的部分写为一个新的函数,提高代码的可读性。
8.附录
from fractions import Fraction
import os
import glob
import random
from fractions import Fraction
import time
from memory_profiler import profile
from pympler import muppy
from pympler import summary
import pstats
import cProfile
9.项目小结:
1.团队分工:
姓名 | 分工 |
---|---|
苏建澎 | 负责完成算法代码,博客园算法部分的编写,模块异常部分以及测设用例分析 |
黎灿宇 | 负责对程序进行性能分析,优化相关代码,设计程序界面,完成博客园性能分析以及优化部分 |
2.团队设计流程:
- 1)团队两人共同对于项目的要求进行解读,对相关算法进行寻找,并制定项目文档要求。
- 2)苏建澎完成相关项目的算法设计编写,使得程序能完成基本要求和模块异常处理,以及简易的用户交互界面。
- 3)一名成员对于已有的程序代码进行测试训练,对于相关的bug或者优化部分及时告知另一名设计人员进行修改完善。
- 4)黎灿宇对已有的算法进行性能分析,对性能分析结果进行整理,尝试优化代码。
- 5)二人测试极限数据,测试程序在极端情况的结果,及时发现程序的bug。
- 6)二人共同编写博客园博文。
3.项目团队经验:
- 1)首先团队两人能及时进行沟通,进度最好实时同步,防止一人修改了代码,另一人无法收到实时的结果,造成工作量无故增加。
- 2)测试代码需要认真细致,编程人员有时候无法及时的关注到作为用户的使用情况,此时需要另一名成员进行测试并及时反馈情况。
- 3)团队中一人进行前一步骤的时候,另外一人可以帮助该成员进行搜索,从不同角度尝试各团队成员提供更高效的算法和结果。
- 4)团队中的成员能及时采纳其他成员的正确建议,并实时沟通分析。
- 5)每一个成员都是项目中不可缺少的一环,都有需要自己主要承担的部分,碰到无法解决的问题时能及时告知其他成员寻求帮助。
- 6)每一个成员都从非自己主要负责的板块中进行学习,提高个人能力。
- 7)不摆烂,不躺平,分工明确,及时沟通才能完成一个团队项目。
4.团队成员的闪光点:
- 黎灿宇同学:对于不熟悉的算法能及时学习了解,对于项目中的发现的异常能及时告知另一名成员。不断汲取不同的知识要点,认真细致,从不同角度给另一名成员帮助,例如:测试代码的bug,极限数据,从不同角度给团队成员提供便利,给全部代码补充注释等。
- 苏建澎同学:编程水平熟练,对于需求分析准确,并能够将需求转变为模块化的函数。在工作上积极主动承担,对工作有详细的安排和时间规划,工作效率高,积极交流跟进进度以及代码问题,促进团队氛围融洽。善于学习新知识,例如:利用二叉树实现查重算法、使用markdown语言编写流程图等等。