此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2446
四则运算代码链接:https://git.coding.net/doubanjiang73/two.git
在软件工程中拥有许多的原则例如可行性分析、需求分析、概念设计、用户测试等。在本学期的学习过程中,我对于各种软件工程原则在尝试中有过成功也有过失败,具体分析如下。
成功:
在制定代码规范和效能分析时都成功了,在进行结对编程的时候,由于两个人遵守制订的代码规范增加了代码的可读性。效能分析也十分重要,这个过程可以检查代码的运行速度。
失败:
我在用户需求分析的过程中经历过失败。在进行四则运算的代码编写时,就出现了对于用户需求不理解的情况,将随机生成题目理解为手动添加题目导致无法完成用户需求。在与同学探讨后发现理解错误后重新进行编程。调用Python random包 1 import random 来生成随机数,进行题目生成。如果当初对用户需求进行仔细研究就不会导致因需求分析错误而产生时间上的浪费,在未来的要做到先理解用户需求再进行实际的操作。
我在四则运算的单元测试中也经历了失败的尝试,以下是我关于不带括号的四则运算题目生成的代码:
import random ops = ['+','-','*','/'] com = input('>') #用户输入 cot = 0 #答对的题 x = 0while x < 20 : s1 = random.randint(1,10) s2 = random.randint(1,10) s3 = random.randint(1,10) s4 = random.randint(1,10) op1 = random.choice(ops) #随机运算符 op2 = random.choice(ops) op3 = random.choice(ops) while op1 == op2 == op3: op1 = random.choice(ops) #随机运算符 op2 = random.choice(ops) op3 = random.choice(ops) eq = (str(s1)+op1+str(s2)+op2+str(s3)+op3+str(s4)) res = eval(eq) if len(str(res) ) > 5: continue x += 1 print(eq) in_res =eval( input('?')) if in_res == res: print('算对啦,你真是个天才!') cot += 1 else: print('再想想吧,答案似乎是%s喔!'%res) print('你一共答对%s道题,共20道题'%cot)
但当进行单元测试的时候发现,单元测试是指对程序中的函数模块并非是运行整个程序查看是否能运行成功。由于代码不存在函数模块所以无法进行单元测试,于是对代码进行了重新的调整,如下所示。
import random ops = ['+','-','*','/'] com = input('>') #用户输入 cot = 0 #答对的题 x = 0while x < 20 : s1 = random.randint(1,10) s2 = random.randint(1,10) s3 = random.randint(1,10) s4 = random.randint(1,10) op1 = random.choice(ops) #随机运算符 op2 = random.choice(ops) op3 = random.choice(ops) while op1 == op2 == op3: op1 = random.choice(ops) #随机运算符 op2 = random.choice(ops) op3 = random.choice(ops) eq = (str(s1)+op1+str(s2)+op2+str(s3)+op3+str(s4)) res = eval(eq) if len(str(res) ) > 5: continue x += 1 print(eq) in_res =eval( input('?')) if in_res == res: print('算对啦,你真是个天才!') cot += 1 else: print('再想想吧,答案似乎是%s喔!'%res) print('你一共答对%s道题,共20道题'%cot)
如果当初在编写代码时编写成函数模块,在进行单元测试时则不需要重新编写,可以使函数进行重用。在未来,我将要代码编写成一个个的函数模块这样也有利于对代码进行检查。