コンピューティングとソフトウェアエンジニアリングワーク4
運用要件 | https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10534 |
---|---|
コースの目的 | シンプルなソフトウェア機能の開発を完了し、簡単なコードは、新しい機能を開発するために一緒にペアプログラミング、パートナーやチームメイトを学ぶコードユニットテスト、コード分析の利用となり、審査されます |
自己目標を達成するために、 | メインパートナーとチームメイトの完全なプログラム開発、コードレビュー、コードはコード高価な利用を変更するのは簡単です |
リファレンス | https://blog.csdn.net/weixin_44396540/article/details/88085543 https://blog.csdn.net/lbj1260200629/article/details/89600055https://jingyan.baidu.com/article/4f34706e11e052e387b56dd2.html ます。https: //jingyan.baidu.com/album/f96699bbeeda8d894e3c1b8d.html?picindex=4 https://www.cnblogs.com/lsdb/p/9201029.html https://www.cnblogs.com/xinz/archive/2011/ 11月20日/ 2255971.html https://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html |
ジョブのテキスト | https://www.cnblogs.com/yangqiuyan/ |
前のクラス読んだ段階:
3組のプログラミング(ペアプログラミング)と2つの共講義
https://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html
:ペアプログラミングフォーム
ペア・プログラミング・モードでは、プログラマの肩のペアを並んで、開発作業にも同様に、補完。二つのプログラマは、コンピュータの前に並んで座っていた表示面と、協力するマウスで同じキーボードを使用します。彼らは一緒にユニットテスト、文書を書くために、一緒にテストを統合して、一緒にコーディング、書き込みテストケースと一緒に設計し、分析します。
ペアプログラミングの利点:(高い入力-出力比を得るためにプログラミングペア)
(1)開発のレベルでは、ペアプログラミングは、より良好な設計品質とコード品質を提供することができ、それらは問題を解決する強力な能力を持って働きます。
もっと自信を持って、開発者自身、ペアワークに(2)、高品質の出力は、より高い満足感につながることができます。
(3)心理的には、同じことを行うには、あなたとあなたのチームメイトの周りの他の人がいるとき、あなたは見捨て当惑、あまりにもばかに当惑しました。
エンタープライズ管理レベルで(4)、一対の人の移動を処理するより良いことができ、互いに転送経験から学ぶ、より効果的に通信することができます。人の知識は他の人に共有されているため。
レビュー段階:
審査の開発が含まれます:デザインレビュー、コードレビュー、テスト計画の見直し、文書のレビューを。
レビュー | 問題 |
---|---|
新たな問題を確認 | 。レビュー結果を減らす;. Bを人間のレビュー手続の深い理解の欠如は、定期的に見直し、持続することはできません;. Cは、要件を理解していないと鉛のデザインは、包括的かつ効果的な見直しを達成することはできません。 |
欠点のチームレビュー | レビューを満たすとき、A。何をしますか?チームは毎日会うことができません。誰もが参加できる時間を見つけるために、それは容易ではない。関与B多くの人々は、理解の程度の差で、スピードと効果が効果的にバランスすることはできません確認 - それはあまりにもすぐに理解していないし、無駄に遅すぎます。多くの人々の時間と、cは顔の問題を抱えている、原因人員の数が多いために、正確に、コストのすべての設計やコード;. Dの詳細なレビューはありません。 |
2は、異なる段階で一緒に働いている:
1。バド(フォーミング)
2。実行中の相(ストーミング)
3。仕様相(Norming)
。4。作成段階(パフォーマンス)
5。崩壊期(変形)
宿題の段階:
仕事ジョブ:(ピアレビュー)
1. https://www.cnblogs.com/lazycat777/p/12483269.html
スタイルコード:コードが後退固定フォーマットに従わない、括弧内の位置は、スタイルと機能仕様のコード名に沿って、同じに追加されませんそこ総額解像度。しかし、ではないだけでなく、コメントを追加し、コードの再利用のための非常に良いことはできません。
コードデザイン:関数式をクリア、完全に定義されました。ヘッダーファイルは、完全ではなく、主な機能、低い利用率で再定義されるすべてのアレイ入力ニーズの機能をテストします。サブアレイのアレイの最大出力、および通常の習慣で開始および終了位置は同じではありません。主に代わり、0から1をカウントしました。
2. https://www.cnblogs.com/parida/p/12469460.html
コーディングスタイル:コードは、設計コードのデザインフォーマットに厳密に従って書かれたインデント、書き込み厳格な括弧があります。名前のクラスや関数についても合理的になります例合理的な要件に合わせて与えてもよいです。注釈もなく、何の暗示参照を与えないが、読書やコードの再利用を助長されていません。
コードデザイン:機能コードのループは、明示的にクリアな思考を与えることができますが、最大表示にサブアレイと場所の開始と終了を達成しませんでした。そして、ユニットテストコードに、コードの利用を知らないではありません。
3. https://www.cnblogs.com/hxf98/p/12483784.html
スタイルコード:コードが後退固定フォーマットに従わない、括弧内の位置は、スタイルと機能仕様のコード名に沿って、同じに追加されませんそこ総額解像度。より良い読みプログラムが容易、コメントを追加できます。
コードデザイン:関数式をクリア、完全に定義されました。しかし、主な機能、低い利用率を再定義するために、各入力配列ニーズの機能をテストします。サブアレイ出力のアレイは、開始位置と終了位置で必要最大サブアレイなくなります。
4. https://www.cnblogs.com/zxy123456/p/12449427.html
コーディングスタイル:コードは、設計コードのデザインフォーマットに厳密に従って書かれたインデント、書き込み厳格な括弧があります。名前のクラスや関数についても合理的になります例合理的な要件に合わせて与えてもよいです。人間とコンピュータの相互作用も非常に友好的であるが、機能または暗示参照の各カテゴリに与えられない良いコメントはありませんでした、コードの再利用や読書を助長されていません。
コードデザイン:関数式をクリア、完全に定義され、明確なブロック、それぞれが良好な特性とコードの配列、高い整合性と完成度の性能を発揮することができます。テストコードも非常に完了すると、あなたは明らかに、コードの実行率を見ることができます。
5. https://www.cnblogs.com/yuhanzhou/p/12361161.html
コーディングスタイル:コードは、設計コードのデザインフォーマットに厳密に従って書かれたインデント、書き込み厳格な括弧があります。名前のクラスや関数についても合理的になります例合理的な要件に合わせて与えてもよいです。人間とコンピュータの相互作用も非常に友好的であり、非常に複雑な機能を実現することができます。多くのコメントが、より多くの出力漢字によるはありませんが、それはよく、コードの読み取りにより助長機能コードプロンプトの情報を提供する、という点では理解されています。
コードデザイン:非常に包括的な、しかし世代マルチチャンネルのトピックを達成することができませんでしたし、全体的なマークは、統計精度を与えられました。また、簡単に繰り返される場合は、単一のサイクル中に、たくさんのことをコーディングの観点から理解しますが、コードの繰り返し率の多くが高いために、それぞれの文のコード効率を向上させ、書き換え分岐声明を考慮することができます。
6. https://www.cnblogs.com/hyjlove/p/12367291.html
コーディングスタイル:各ウェルのコードセクションのショットコードのプログラミングの要件に従うことが、背中に囲まれたコードでは凍結していません仕様は、マイナーな不便を引き起こすために、コードを読んで。コードのコメント、小さな、しかし、多くの注意書きがありますが、コードの再利用にはほとんど影響している間。
コードの設計:プログラムは非常に完全を特徴とし(オペレータへの参加方法多くの決定的に)難易度の異なる選択を満たしていますが、一回のマルチチャンネルのタイトルを与えることができないと正答率を与える統一。そして、人間とコンピュータの相互作用の面でうまくやって、場所に注意書きは、複数選択を与えることができます。
7. https://www.cnblogs.com/wanghuiru/p/12460279.html
コーディングスタイル:コードは、設計コードのデザインフォーマットに厳密に従って書かれたインデント、書き込み厳格な括弧があります。名前のクラスや関数についても合理的になります例合理的な要件に合わせて与えてもよいです。人間とコンピュータの相互作用も非常に友好的であり、非常に複雑な機能を実現することができます。多くのコメントが、より多くの出力漢字によるはありませんが、それはよく、コードの読み取りにより助長機能コードプロンプトの情報を提供する、という点では理解されています。
コードの設計:全体的な整合性のコードは高いです、あなたは基本的に学習生徒の要件を満たすことができます。しかし、コード内の多くの繰り返しの継代、コードが繰り返される多くは適宜簡略化と考えることができます。テストコードの実装の別の部分には、また利用コードを参照してください。通常の状況下では70〜90パーセントのコード効率、井戸元の関数を実行することができ、さらにコードを変更することが可能で、低すぎません。
8. https://www.cnblogs.com/shixiaomao12138/p/12404101.html
コーディングスタイル:コードは、設計コードのデザインフォーマットに厳密に従って書かれたインデント、書き込み厳格な括弧があります。名前のクラスや関数についても合理的になります例合理的な要件に合わせて与えてもよいです。しかし、あまりにも多くのノートが、より多くの漢字の出力するので、そのコードの機能を理解するという点でも、コードの読み取りにより助長、迅速な情報を提供します。
コードデザイン:グレード選択を達成していないが、コードは、比較的簡単ですが、演算対象の善悪側面の判断の4つの規則はそれに満ちています。しかし、我々は一回100個の質問をして、全体的な精度を決定することはできません。レイアウトは完璧ではないので論外による出力の選択ラインに表示されます。
全体の要約:
1.コードスタイル:実際には、この点では、ほとんどの人が厳しい括弧ラップや他の操作を追跡するためのプログラミング経験の良いプログラミングのスキルを持っていますが、注釈大半ではまだ非常によく与えることはできません。実際には、コメントが必要な関数やクラスの後にコメントを追加し、明確な導入する必要があり、彼らは簡単に、将来のコードの再利用、簡単な読み書きするだけでなく、彼らの検査を容易にするために、他のプログラマから学ぶことができます。好ましくは、全体の機能のためのコードで書かれたコードの性質の全体正面。
2.コード設計:コード設計の基本は、基本的な機能を実行することができ、多くの場合、それも考慮に合理的なマンマシン対話型インタフェースを取ることができます。しかし、多くの場合、彼らはあまりにも、各書き込みコードは、前のコードと同様の機能を有効に利用することができませんでした以前に設計する必要がバックで関数を実装し、することがあり、重複したコードを懸念されていません。コードのデザインは、実際にはより多くの私たちが利用コードを改善するためによくやった方法のです。何の終始はありませんが、私は書かれているが、また、要件は、単にコードと再利用を書き換えるに準じて行うことができます。
二つの操作:ペアプログラミング
具体的な要件は
1.シンプルかつ完全なソフトウェアツール(漢字テキストファイル統計プログラム)を達成:小説「紅楼夢」の要件のために、さまざまな文字を分析することができます発生し、これらの統計を書くことができ、各章状回、それぞれの回数に来ますcsvファイル形式に変換。
2.ユニットテスト、回帰試験、性能試験、上記のプログラムを達成する過程で関連ツールの使用。
パーソナルソフトウェアプロセス(PSP)を練習し、徐々にソフトウェアエンジニアリングの各部分で過ごした自分の時間を記録します。
ソースコード管理システムの使用(GitHubの、Gitee、Coding.net、等);
3.上記ソフトウェアプログラム、各種章図形の発生新規「水滸伝」分析のための新しいテキストを形成するために、コードを検査します。
4.新しいブログを記録するために、プログラミング、上述したアプリケーション開発のペアは、特に、種々の形態によってプログラムされたペアを表示する必要があり、「赤の夢」や「水滸伝」の文字を取得するための手順は、さまざまな章と文字の存在の合計数を表示されますオカレンスの総数は、棒グラフ、円グラフ、表およびその他の形態により示しています。
実験結果
紅楼夢
直感的なチャート:
CSV出力:
テスト:
無法者
CSV出力:
テスト:
PSPテーブル:
PSP | パーソナルソフトウェアプロセス段階 | 推定時間がかかります | 実際の時間がかかります |
---|---|---|---|
プランニング | 計画 | 一日 | 一日 |
推計 | このタスクが必要とどのくらいの時間を見積もります | 一週間 | 二週間 |
開発 | 開発 | 一週間 | 一週間以上 |
分析 | (新しい技術を学ぶ含む)ニーズ分析 | 二日 | 3日間の |
標準コーディング | コードの仕様 | 1時間 | 1時間 |
設計 | 具体的な設計 | 2日 | 2日 |
コーディング | 具体的なコーディング | 3日間の | 5日 |
コードレビュー | コードレビュー | 2時間 | 3時間 |
テスト | テスト | 1時間 | 2時間 |
報告 | レポート | 1時間 | 2時間 |
サイズ測定 | コンピューティングワークロード | 1時間 | 1時間 |
死後&プロセス改善計画 | 事后总结,并提出过程改进计划 | 1小时 | 1小时 |
合计 | --- | 两周 | 两周 |
实验总结:
此次作业第一次采用结对编程方法进行代码设计,通过两人连麦沟通共同完成此次作业。由于第一次使用该方式,比较新颖同时也比较具有挑战性。另外此次作业并没有按照我们以往的学习语言进行编写。刚开始虽然也尝试了几种学习过的语言,但是结果都没有达到预计的效果。最后还是决定参考网上的一种新的语言Python进行代码编写。在安装过程中其实我们都遇到比较多的问题。考虑到各个版本问题,最终我们选择的是3.8版本,但其实光下载该软件无法实现题目要求,还必须新找到库并进行画图代码书写,才可以达到画图目的。Python语言的书写规则也与平时我们学过的语言相差较大,故此次作业还是借助了很多网络信息的。
本次作业中主要进行Python软件的学习与应用,在结对编程的条件下进行代码开发,极大程度地结合了两个人的思想理解,在问题解决上速度效率较高,但在实现初期学习时工作分配不均,不易提高效率。
本次实验通过测试两个经典文本中的人物出现频率进行人物分析等操作,在一开始想用C++或Java语言进行开发,但随着进一步深入发现,C++只适合英文输入下的文本分析,中文的效率较低,不易表达。参考网络中代码,其实可以很快发现Python语言更加适合本次实验要求,故我们最终选择用Python语言完成本次实验。更加清晰地可以统计出人物出场次数,同时通过测试也可以分析代码测试的速率。
遇到困难:安装python和之前的软件安装不大相同,主要是后台控制,随着实验需要其实还需要进一步安装其他库来实现需要。在编写测试文件时,由于任务出场顺序读入顺序问题,出现过多次不匹配情况,最终在网上找到了类似错误的解决方案。
还需解决的问题:本次我们并没有研究出分章节讨论任务出场频率的分析,如果要细分,其实要人工操作,并没有想到好的解决方案。最后的测试也较为单一,没办法对方面分析代码。
代码托管
此次托管只需将新文件直接提交到个人仓库中。
码云链接:https://gitee.com/yang_qiu_yan/ruangong
附录代码
红楼梦图标分析:
import jieba
from collections import Counter
import matplotlib.pyplot as plt
import numpy as np
class HlmNameCount():
# 此函数用于绘制条形图
def showNameBar(self,name_list_sort,name_list_count):
# x代表条形数量
x = np.arange(len(name_list_sort))
# 处理中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
# 绘制条形图,bars相当于句柄
bars = plt.bar(x,name_list_count)
# 给各条形打上标签
plt.xticks(x,name_list_sort)
# 显示各条形具体数量
i = 0
for bar in bars:
plt.text((bar.get_x() + bar.get_width() / 2), bar.get_height(), '%d' % name_list_count[i], ha='center', va='bottom')
i += 1
# 显示图形
plt.show()
# 此函数用于绘制饼状图
def showNamePie(self, name_list_sort, name_list_fracs):
# 处理中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
# 绘制饼状图
plt.pie(name_list_fracs, labels=name_list_sort, autopct='%1.2f%%', shadow=True)
# 显示图形
plt.show()
def getNameTimesSort(self,name_list,txt_path):
# 将所有人名临时添加到jieba所用字典,以使jieba能识别所有人名
for k in name_list:
jieba.add_word(k)
# 打开并读取txt文件
file_obj = open(txt_path, 'rb').read()
# jieba分词
jieba_cut = jieba.cut(file_obj)
# Counter重新组装以方便读取
book_counter = Counter(jieba_cut)
# 人名列表,因为要处理凤姐所以不直接用name_list
name_dict ={}
# 人名出现的总次数,用于后边计算百分比
name_total_count = 0
for k in name_list:
if k == '熙凤':
# 将熙凤出现的次数合并到凤姐
name_dict['凤姐'] += book_counter[k]
else:
name_dict[k] = book_counter[k]
name_total_count += book_counter[k]
# Counter重新组装以使用most_common排序
name_counter = Counter(name_dict)
# 按出现次数排序后的人名列表
name_list_sort = []
# 按出现次数排序后的人名百分比列表
name_list_fracs = []
# 按出现次数排序后的人名次数列表
name_list_count = []
for k,v in name_counter.most_common():
name_list_sort.append(k)
name_list_fracs.append(round(v/name_total_count,2)*100)
name_list_count.append(v)
print(k+':'+str(v))
# 绘制条形图
self.showNameBar(name_list_sort, name_list_count)
# 绘制饼状图
self.showNamePie(name_list_sort,name_list_fracs)
if __name__ == '__main__':
# 参与统计的人名列表,可修改成自己想要的列表
name_list = ['宝玉', '黛玉', '宝钗', '元春', '探春', '湘云', '妙玉', '迎春', '惜春', '凤姐', '熙凤', '巧姐', '李纨', '可卿', '贾母', '贾珍', '贾蓉', '贾赦', '贾政', '王夫人', '贾琏', '薛蟠', '香菱', '宝琴', '袭人', '晴雯', '平儿', '紫鹃', '莺儿']
# 红楼梦txt文件所在路径,修改成自己文件所在路径
txt_path = 'D:\hlm.txt'
hnc = HlmNameCount()
hnc.getNameTimesSort(name_list,txt_path)
红楼梦效率分析及csv文件输出:
# 红楼梦
import jieba
import csv
class NameCount():
def getNameTimesSort(self, name_list, txt_path):
# 添加jieba分词
mydict = ['琏二奶奶', '凤哥儿', '凤丫头', '宝姑娘', '颦儿', '二姑娘', '三姑娘', '四姑娘', '云妹妹', '蓉大奶奶']
for item in mydict:
jieba.add_word(item)
#打开并读取txt文件
txt = open(txt_path, "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 = 'D:\hlm.txt'
NameCount().getNameTimesSort(name_list,txt_path)
import pstats
import profile
if __name__ == '__main__':
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 hlmcsv import*
class MyTestCase(unittest.TestCase):
def setUp(self):
pass
def test_something(self):
name_list = ['熙凤', '黛玉', '宝钗', '探春', '湘云', '迎春', '元春', '惜春', '妙玉', '巧姐', '李纨', '可卿']
txt_path = 'D:\hlm.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):
pass
if __name__ == '__main__':
unittest.main()
水浒传csv文件输出及效能测试
#水浒传
import jieba
import csv
import pstats
import profile
class NameCount():
def getNameTimesSort(self, name_list, txt_path):
mydict = ['及时雨','黑旋风', '行者','豹子头','花和尚', '智多星', '玉麒麟', '神行太保', '小李广','九纹龙','青面兽', '高太尉','鼓上蚤']
for item in mydict:
jieba.add_word(item)
txt = open(txt_path, "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(13):
lt = 0
for item in bieming[i]:
lt += counts.get(item, 0)
lst.append(lt)
items = list()
for i in range(13):
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(13):
word, count = items[i]
print("{0:<10}{1:>5}".format(word, count))
csv_writer.writerow([word, count])
f.close()
return items
if __name__ == '__main__':
# 参与统计的人名列表,可修改成自己想要的列表
name_list = ['宋江', '鲁智深', '花荣', '武松', '吴用', '高俅', '史进', '卢俊义', '李逵', '林冲', '杨志','戴宗','时迁']
# 水浒传txt文件所在路径
txt_path = 'D:\shz.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 shzcsv import*
class MyTestCase(unittest.TestCase):
def test_something(self):
name_list = ['宋江','鲁智深 ', '花荣', '武松', '吴用','高俅','史进 ', '卢俊义','李逵', '林冲', '杨志', '戴宗','时迁']
txt_path = 'D:\shz.txt'
name_list_count = [2765, 1247, 1151, 759, 647, 639, 632, 343, 282, 242, 239, 216,183]
items = list()
for i in range(13):
items.append([name_list[i], name_list_count[i]])
self.assertEqual(items, NameCount().getNameTimesSort(name_list, txt_path))
if __name__ == '__main__':
unittest.main()