第三周作业完成情况

一、理论学习

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语言不熟悉,编程效率很低,希望在以后的学习过程中能有所改善。

猜你喜欢

转载自www.cnblogs.com/lxh0303/p/12444753.html