计算与软件工程 作业四

作业要求 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10534
课程目标 了解熟悉软件开发过程中的具体步骤,为以后的学习打下基础;
学习不同的测试方法,为以后写出更完美的代码做准备;
学会代码设计和规范。
实现目标的方面 用python写用类和函数来实现统计红楼梦主要人物统计,并将所写代码进行单元测试,回归测试,效能测试。
其他参考文献 https://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html
https://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html
https://blog.csdn.net/lbj1260200629/article/details/89600055
https://blog.csdn.net/huilan_same/article/details/52944782
https://www.cnblogs.com/MonC/articles/9744687.html
https://blog.csdn.net/LWT000aa/article/details/78735235
https://blog.csdn.net/weixin_43936464/article/details/84779924
作业正文 https://www.cnblogs.com/youmine/p/12635776.html
码云链接https://gitee.com/yang_li_na/masterwork

作业1

评论链接:
https://www.cnblogs.com/youmine/MyComments.html
璃茉浅忆
夏末花开
LL_L
今天你快乐吗
ctt
草莓葡萄
我吃柠檬。
ooger

作业2 结对编程

队友:
https://www.cnblogs.com/lmengmeng/p/12613590.html


红楼梦人物统计

# 红楼梦人物统计
import jieba
import csv
import pstats
import profile
class NameCount():
     def getNameTimesSort(self, name_list, txt_path):
         # 添加jieba分词
        mydict = ['琏二奶奶', '凤哥儿', '凤丫头', '宝姑娘', '颦儿', '二姑娘', '三姑娘', '四姑娘', '云妹妹', '蓉大奶奶']
        for item in mydict:
            jieba.add_word(item)
        #打开并读取txt文件
        txt = open('redstone.txt','r',encoding='utf-8').read()
         # 定义别名列表
        bieming = [["王熙凤", "凤丫头", '琏二奶奶', '凤姐', '凤哥儿', '凤辣子','熙凤'],["林妹妹", "黛玉", '林姑娘', '林黛玉'], ["宝钗", '宝姑娘', '宝丫头', '宝姐姐', '薛宝钗'],
                   ['探春', '三姑娘', '贾探春'], ['湘云', '云妹妹', '史湘云'],['迎春', '二姑娘', '贾迎春'],['元春', '大姑娘', '娘娘', '贵妃', '元妃', '贾元春'],
                   ['惜春', '四姑娘', '贾惜春'], ['妙玉'],['巧姐'], ['李纨', '大嫂子'], ['秦可卿', '可卿', '蓉大奶奶']]
        words = jieba.lcut(txt)
        counts = {}
        for word in words:
            if len(word) == 1:
                continue
            else:
                counts[word] = counts.get(word, 0) + 1
        # 计算出场次数(各个别名的合计次数)
        lst = list()
        for i in range(12):
            lt = 0
            for item in bieming[i]:
                lt += counts.get(item, 0)
            lst.append(lt)
        items = list()
        for i in range(12):
            items.append([name_list[i], lst[i]])
        items.sort(key=lambda x: x[1], reverse=True)
        f = open('红楼梦人物统计.csv', 'w', newline='', encoding='utf-8')
        csv_writer = csv.writer(f)
        csv_writer.writerow(['红楼梦人物统计'])
        csv_writer.writerow(["姓名", "出现次数"])
        for i in range(12):
            word, count = items[i]
            csv_writer.writerow([word, count])
            print("{0:<10}{1:>5}".format(word, count))
        f.close()      
        return items
if __name__ == '__main__':

    # 参与统计的人名列表,可修改成自己想要的列表
    name_list = ['熙凤', '黛玉', '宝钗', '探春', '湘云', '迎春', '元春', '惜春', '妙玉', '巧姐', '李纨', '可卿']
    # txt文件所在路径
    txt_path = 'redstone.txt'
    NameCount().getNameTimesSort(name_list,txt_path)

红楼梦

红楼梦单元测试

import unittest
from red2 import *
class MyTestCase(unittest.TestCase):
    def setUp(self):
        print("测试开始")
    def test_something(self):
        name_list = ['熙凤', '黛玉', '宝钗', '探春', '湘云', '迎春', '元春', '惜春', '妙玉', '巧姐', '李纨', '可卿']
        txt_path = 'redstone.txt'
        name_list_count = [1149, 953, 696, 448, 393, 146, 126, 105, 81, 40, 36, 14]
        items = list()
        for i in range(12):
            items.append([name_list[i], name_list_count[i]])
        self.assertEqual(items, NameCount().getNameTimesSort(name_list,txt_path))
    def tearDown(self):
        print("测试结束")
if __name__ == '__main__':
    unittest.main()

红楼梦单元测试

红楼梦回归测试

page.py块

#-*- coding:utf-8 -*-
from selenium import webdriver
import time

#打开浏览器
path = "C:\\Users\xxx\AppData\Local\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(executable_path=path)
#driver = webdriver.Chrome()

#最大化窗口
driver.maximize_window()
#打开百度
driver.get("http://www.baidu.com")
#休眠一秒
time.sleep(10)

#关闭浏览器
driver.close()

suit.py块

# -*- coding:utf-8 -*-
import unittest
from red2 import *
import page
import testcase
import HTMLTestRunner

class MyTestCase(unittest.TestCase):
    def setUp(self):
        print("测试开始")
    def test_something(self):
        name_list = ['熙凤', '黛玉', '宝钗', '探春', '湘云', '迎春', '元春', '惜春', '妙玉', '巧姐', '李纨', '可卿']
        txt_path = 'redstone.txt'
        name_list_count = [1149, 953, 696, 448, 393, 146, 126, 105, 81, 40, 36, 14]
        items = list()
        for i in range(12):
            items.append([name_list[i], name_list_count[i]])
        self.assertEqual(items, NameCount().getNameTimesSort(name_list,txt_path))
    def tearDown(self):
        print("测试结束")


if __name__ == '__main__':
    testunit = unittest.TestSuite()
    testunit.addTest(MyTestCase('test_something'))

    filename = 'resultest.html'
    fp = open(filename, 'wb')
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'红楼梦人物统计', description=u'用例执行')
    runner.run(testunit)
    fp.close()

红楼梦回归测试

红楼梦效能测试

import pstats
import profile
from red2 import*
if __name__ == '__main__':
    print("效能测试:")
    profile.run('NameCount()', 'result')
    # 直接把分析结果打印到控制台
    p = pstats.Stats('result')  # 创建Stats对象
    p.strip_dirs().sort_stats("call").print_stats()  # 按照调用的次数排序
    p.strip_dirs().sort_stats("cumulative").print_stats()  # 按执行时间次数排序

红楼梦效能测试
表格(csv)统计以及人物出场次数的图像
表格(csv)统计

水浒传人物统计和效能测试

# 水浒传人物统计
import jieba
import csv
import pstats
import profile
class NameCount():
     def getNameTimesSort(self, name_list, txt_path):
         # 添加jieba分词
        mydict = ['及时雨','黑旋风','行者','豹子头','花和尚','智多星','玉麒麟','小旋风','小李广','九纹龙','青面兽','母大虫','母夜叉','王教头','扈三娘','陆虞候']
        for item in mydict:
            jieba.add_word(item)
        #打开并读取txt文件
        txt = open('water.txt','r',encoding='utf-8').read()
         # 定义别名列表
        bieming = [['及时雨','宋江','呼保义','孝义黑三郎','宋公明','宋押司'],['黑旋风','李逵','铁牛'],['武松','武二郎','行者','武行者','武都头'],['豹子头','林冲','林教头'],
                   [ '鲁提辖' ,'鲁达','智深','花和尚','鲁智深'],['智多星','吴用','吴学究','吴加亮','赛诸葛','加亮先生'],['卢俊义','玉麒麟','卢员外'],[ '小旋风','柴进'],
                   ['花荣','小李广'],['九纹龙','史进'],['杨志','杨制使','杨提辖','青面兽'],['顾大嫂','母大虫'],['孙二娘','母夜叉'],['王进','王教头'],['扈三娘','一丈青'],['陆虞候','陆谦']]
        words = jieba.lcut(txt)
        counts = {}
        for word in words:
            if len(word) == 1:
                continue
            else:
                counts[word] = counts.get(word, 0) + 1
        # 计算出场次数(各个别名的合计次数)
        lst = list()
        for i in range(16):
            lt = 0
            for item in bieming[i]:
                lt += counts.get(item, 0)
            lst.append(lt)
        items = list()
        for i in range(16):
            items.append([name_list[i], lst[i]])
        items.sort(key=lambda x: x[1], reverse=True)
        f = open('水浒传人物统计.csv', 'w', newline='', encoding='utf-8')
        csv_writer = csv.writer(f)
        csv_writer.writerow(['水浒传人物统计'])
        csv_writer.writerow(["姓名", "出现次数"])
        for i in range(16):
            word, count = items[i]
            csv_writer.writerow([word, count])
            print("{0:<10}{1:>5}".format(word, count))
        f.close()      
        return items
if __name__ == '__main__':

    # 参与统计的人名列表,可修改成自己想要的列表
    name_list = ['宋江','李逵','武松','林冲','鲁智深','吴用','卢俊义','柴进','花荣','史进','杨志','顾大嫂','孙二娘','王进','扈三娘','陆谦']
    # txt文件所在路径
    txt_path = 'water.txt'
    NameCount().getNameTimesSort(name_list,txt_path)
    print("效能测试:")
    profile.run('NameCount()', 'result')
    # 直接把分析结果打印到控制台
    p = pstats.Stats('result')  # 创建Stats对象
    p.strip_dirs().sort_stats("call").print_stats()  # 按照调用的次数排序
    p.strip_dirs().sort_stats("cumulative").print_stats()  # 按执行时间次数排序

水浒传人物统计和效能测试

水浒传单元测试

import unittest
from water3 import *
class MyTestCase(unittest.TestCase):
    def setUp(self):
        print("测试开始")
    def test_something(self):
        name_list = ['宋江','李逵','武松','林冲','鲁智深','吴用','卢俊义','柴进','花荣','史进','杨志','顾大嫂','孙二娘','王进','扈三娘','陆谦']
        txt_path = 'water.txt'
        name_list_count = [2765, 1247, 1151, 759, 647, 639, 632, 328, 260, 242, 239, 105, 74, 68, 52, 47]
        items = list()
        for i in range(16):
            items.append([name_list[i], name_list_count[i]])
        self.assertEqual(items, NameCount().getNameTimesSort(name_list,txt_path))
    def tearDown(self):
        print("测试结束")
if __name__ == '__main__':
    unittest.main()

水浒传单元测试

水浒传回归测试

suit.py

# -*- coding:utf-8 -*-
import unittest
from water3 import *
import page
import testwater
import HTMLTestRunner

class MyTestCase(unittest.TestCase):
    def setUp(self):
        print("测试开始")
    def test_something(self):
        name_list = ['宋江','李逵','武松','林冲','鲁智深','吴用','卢俊义','柴进','花荣','史进','杨志','顾大嫂','孙二娘','王进','扈三娘','陆谦']
        txt_path = 'water.txt'
        name_list_count = [2765, 1247, 1151, 759, 647, 639, 632, 328, 260, 242, 239, 105, 74, 68, 52, 47]
        items = list()
        for i in range(16):
            items.append([name_list[i], name_list_count[i]])
        self.assertEqual(items, NameCount().getNameTimesSort(name_list,txt_path))
    def tearDown(self):
        print("测试结束")


if __name__ == '__main__':
    testunit = unittest.TestSuite()
    testunit.addTest(MyTestCase('test_something'))

    filename = 'resulwater.html'
    fp = open(filename, 'wb')
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'水浒传人物统计', description=u'用例执行')
    runner.run(testunit)
    fp.close()

水浒传回归测试

表格(csv)统计以及水浒传人物出场次数的图像

表格(csv)统计

PSP Personal Software Process Stages Time
Planning 计划
·Estimate ·估计这个任务需要多少时间 168h
Development 开发
·Analysis ·需求分析(包括学习新技术) 6h
·Design Spec ·生成设计文档 1h
·Design Review ·设计复审(和同学审核设计文档) 1h
·Design Standard ·代码规范(为目前的开发制定合适的规范) 0.5h
·Design ·具体设计 4h
·Coding ·具体编码 48h
·Code Review ·代码复审 24h
·Test ·测试(自我测试,修改代码,提交修改) 72h
Reporting 报告
·Test Reportt ·测试报告 1.5h
·Size Measurement ·计算工作量 0.5h
·Postmortem&Process Improvement Plan ·事后总结,并提出过程改进计划 0.5h
合计 189h

总结:本次作业中需要运用python软件来书写,统计人物时要用到jieba库,在回归测试中需要用到webdriver、selenium库、HTMLTestRunner(注意python2和python3之间的区别)。

posted @ 2020-04-05 08:18  易young  阅读(238)  评论(0编辑  收藏  举报