一、理论学习
1、对慕课第3章的学习
单元测试是一种软件测试方法,通过这种测试方法测试各个单元的源代码单元或者多个模块的集合,使用程序来测试程序,来保证他们的可用性。随着软件的开发程度的增加,修复bug的成本会原来越高。在软件开发初期就进行单元测试,能有效减少软件开发的成本,以及减少在软件使用过程中的bug数量。是通过测试用例、期望结果、前缀值和后缀值来完成整个测试过程
单元测试一般分为黑盒测试方法和白盒测试方法。其中黑盒测试又叫功能测试,在完全不考虑程序内部逻辑结构和内部特性的情况下,通过输入输出值来检查程序的功能是否符合预期。而白盒测试又称结构测试,在允许利用程序内部的逻辑结构和相关信息的情况下,设计测试值,对程序所有逻辑路径进行测试。相比之下,白盒测试能大大提高代码覆盖率,能够在软件设计之初提高代码质量。
2、《构建之法》第三章的学习
结对编程是一种敏捷软件开发的方法,需要两个程序员在一个计算机上共同工作。通常是由一个人写代码,另一个人负责审查。并且两个程序员之间的角色可以互换。结对编程的过程也是相互督促的过程,在迫使程序员必须频繁的进行交流沟通后,能有效提升自己的技术能力。而在这之中代码规范以及代码复审扮演着重要的角色,其牵涉到程序设计、模块之间的关系、设计模式等方方面面。讲义中讲到优秀的程序员往往会为一个变量的命名思考好几天,这是一个十分有趣的且具有说明性的例子。
3、测试驱动开发
测试驱动开发TDD-Test Driven Development是敏捷开发中的一种实践开发模式,简单来说即:TDD是指在编写真正的功能实现代码之前先写测试代码,然后根据需要重构实现代码。测试驱动开发的基本过程如下:
二、实践学习
1、对生命游戏中game_map部分进行了单元测试
参照博客https://blog.csdn.net/mssora/article/details/53380276,对慕课中game_map代码进行了单元测试,单元测试的代码已上传代码仓库https://github.com/NemoNemo03/N-Stock/tree/master/LIFE_GAME,总共测试了了9个内容,均反馈成功,具体如下:
并且对测试代码进行了代码覆盖分析,其中对game_map的代码覆盖率为85%,具体如下:
2、对单词检索程序的改进
根据单元测试的学习内容,进行了黑盒测试(白盒测试代码比较复杂,未能完成),简单的输入了一些单词进行了检测,发现输出结果能满足要求,但是测试时间较长,主要的是因为语句结构不清晰,代码过于复杂,于是利用for循环重新编写了代码,新代码命名规范,结构也比较清晰,运行速度也有明显改善。具体代码如下:
1 import re 2 import profile 3 4 with open('document.txt', 'r') as f: 5 string = f.read() 6 str_list = string.lower() 7 words = str_list.split('.') 8 words_count = len(words) 9 10 11 with open('quety.txt', 'r') as f: 12 string = f.read() 13 str_query = string.lower() 14 word_query = re.split('[^a-zA-Z]+', str_query) 15 16 17 18 def words_xoy(words): 19 word_all_list = [] 20 for x in range(len(words)): 21 word_list = re.split('[^a-zA-Z]+', words[x]) 22 if '' in word_list: 23 word_list.remove('') 24 word_all_list.append(word_list) 25 return word_all_list 26 #print(words_xoy(words)) 27 28 29 def query(words,word_query): 30 word=word_query 31 for x in range(len(word)): 32 if word_query[x] in re.split('[^a-zA-Z]+', str_list): 33 word_all_list = words_xoy(words) 34 for i in range(len(word_all_list)): 35 for j in range(len(word_all_list[i])): 36 if word[x] == word_all_list[i][j]: 37 print(str(i+1)+'/'+str(j+1), end='\n') 38 else: 39 print('none',end=' ') 40 41 profile.run("query(words,word_query)")
其中,新旧代码的运行速度对比如下:
新代码 旧代码
三、学习记录
学习阶段 | 学习内容 | 学习收获 |
2019.3.2 14:00-17:00 | 软件工程 | 对单元测试的了解 |
2019.3.4 14:00-17:00 | 《构建之法》讲义 | 了解合作编程的具体过程 |
2019.3.5 14:00-17:00 | python基础学习 | 学习python的基本语法 |
2019.3.7 14:00-17:00 | python基础学习 | 学习python的基本语法 |
2019.3.8 08:00-2100 | 网上查资料,编程 | 熟悉python的程序编写过程 |
四、总结
随着对软件工程的深入学习,明白了软件开发的具体流程以及科学进行软件开发的重要性。特别是单元测试的应用,它能够帮助程序员们及时发现问题及时解决问题,在以后的软件开发过程中也要学会利用好单元测试。合作开发也是进行软件开发的有效方式,在合作开发的过程中要注意代码规范以及代码复审,良好的合作关系能大大提升编程质量和编程效率。在实践过程中对python语言不熟悉,编程效率很低,希望在以后的学习过程中能有所改善。