zoukankan      html  css  js  c++  java
  • 第二次结对编程总结

    编程作业要求:要求

    github地址:github

    2. PSP表格(单位:h)

    Planning Estimate 0.1
    Development Analysis 0.5
    Design Spec 0.5
    Design Review 0.1
    Coding Standard 0.1
    Design 1
    Coding 12
    Code Review 2
    Test 5
    Report Test Report 1
    Size Measurement 0.1
    Postmortem 0.5
    Process Improvement Plan 0.1

    3. [接口]

    一开始的需求只是对于不同参数做不同处理和仅有的参数组合,所以我们采用的方式是对于每一种参数写一个函数。后来需求变更为参数组合,有必选和可选参数,就更改了接口设计。为实现Information Hiding,采用成员私有并用公有方法访问的方式。为实现Loose Coupling,将不同参数以独立函数实现并用bool量控制可选参数,防止需要在不同功能中多次实现可选功能。接口设计为用-d -s处理出待处理字符串,对-c -f -p -q单独实现四个函数,接受相同的输入(待处理字符串),得到相同的输出(频率表),之后根据-n对统一的输出进行处理。

    4. [类]

    两个类,一个argparse类用于分析命令行以后打包每个参数及其值。另一个Freq类用于记录字母频率和稳定排序。算法中最关键的部分应该是PhraseCount中匹配每个单词的部分。由于正则库函数实现太慢,所以自己实现了特殊化的正则匹配,为了把逻辑写对画出状态机。

    5. UML

    6. 我们采用的结对过程为为一人主要负责程序编码,另一人主要负责代码复审和单元测试编写,以pair programming的形式。至于优缺点,我觉得我对C++的库和新特性比较熟悉,对bug的处理比较熟悉,对性能分析工具比较熟悉。缺点是编码速度不够快。对于parterner,我觉得优点在于能很敏锐的发现我编程中的隐藏bug,编码能力挺强,擅长编写单元测试,对新工具的学习和熟悉能力很强,很有耐心也挺可爱的。缺点是写C++的时候容易写成python的语法<_<?

    7. 我们的guideline是画出函数的功能模块图,画出输入输出的流程图。我们要求在代码规范方面遵守Information Hiding,Loose Coupling的要求。

    7. 我们采取的分析工具是VS Performance Inspector. 对热点函数进行优化。比如发现库函数isalpha和isalnum的鲁棒性很差(会接受乱码字符即非ascii字符的输入而造成崩溃),性能也不够,就自己内联实现了一个。发现正则库查找速度太慢,就自己写了一个专门的函数进行匹配。但是有些库函数的性能还是挺高的,比如boost::algorithm::join, 我们用这个将vector中的string联成一个phrase。还对一些数据结构进行了优化减小复杂度,比如采用基于桶的数据结构进行查找和统计操作。事实上这个结果还可以继续优化,比如m_search实际就是一个状态机,我们还可以对统计调用频率,根据huffman树对分支进行优化。

    8. 我们采取的单元测试编写工具是VS自带的单元测试。然后对于每个push的版本作一次回归测试。我们可能没有做到单元测试代码覆盖率100%,但是和助教给的示例程序的输出可以对任何参数保持输出一致。

    9. 我们最后的性能是对于105M的文件,在没有-v选项时PhraseCount的时间为5s左右(包括1.5s文件读入时间),有-v选项时时间为9s。对pride-and-prejudice.txt没-v大概0.00091s,有-v0.11s左右。

  • 相关阅读:
    hh
    SDUT 3923 打字
    最短路
    阶乘后面0的个数(51Nod 1003)
    大数加法
    Biorhythms(中国剩余定理)
    usaco-5.1-theme-passed
    usaco-5.1-starry-passed
    usaco-5.1-fc-passed
    usaco-4.4-frameup-passed
  • 原文地址:https://www.cnblogs.com/xyyimian/p/9900117.html
Copyright © 2011-2022 走看看