zoukankan      html  css  js  c++  java
  • 第三次作业

    作业链接https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/2879

    Git 仓库地址https://github.com/Eleanoren/WordCount

     

    Part 0. 分配工作

    这次作业我是和我室友组的队,我们先商量了一下如何分配工作。无奈我们两个都缺乏项目经验,也是在标准的制定上争论了很久。最后商议的结果是代码一起写,她负责实现统计文件的字符数和有效行数以及搭建项目的大体框架,,我实现统计文件中单词总数,并按字典序排序输出到文件的功能。代码写好后,由我负责测试,她负责复审。

    Part 1. PSP表格

    PSP2.1

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    Planning

    计划

       

    · Estimate

    · 估计这个任务需要多少时间

     350  580

    Development

    开发

       

    · Analysis

    · 需求分析 (包括学习新技术)

     10  40 

    · Design Spec

    · 生成设计文档

     5  15 

    · Design Review

    · 设计复审 (和同事审核设计文档)

     5  10

    · Coding Standard

    · 代码规范 (为目前的开发制定合适的规范)

     20  15

    · Design

    · 具体设计

     15  20 

    · Coding

    · 具体编码

     300  440

    · Code Review

    · 代码复审

     20  10

    · Test

    · 测试(自我测试,修改代码,提交修改)

     30  40

    Reporting

    报告

       

    · Test Report

    · 测试报告

     20  30

    · Size Measurement

    · 计算工作量

     10  5

    · Postmortem & Process Improvement Plan

    · 事后总结, 并提出过程改进计划

     20  20
     

    合计

     350  580

    Part 2. 规范编码格式

    由于代码是一起合作写出来的,所以要制定一个标准提高代码的可读性和可移植性,于是,我们达成了一下几点共识:

    • 给函数写注释
    • 变量名要统一,且用英文
    • 将需要实现的功能封装,具体的功能写成函数

    Part 3. 设计程序

    我做的部分是统计文件中单词总数,并按字典序排序输出到文件,大致的思路是将文章内容用 ReadToEnd() 转成一个字符串,将单词一个一个分割进 list ,统计完单词出现频率后再用字典序排序输出。

                
    public
    void putword(string path)//统计单词出现频率 { List<string> List = new List<string>(); StreamReader sr = new StreamReader(path, Encoding.Default); string txt = sr.ReadToEnd(); txt = txt.ToLower(); string[] Array = txt.Split(new char[] { ' ', ' ', ' ' }); for (int i = 0; i < Array.Length; i++) { if (Array[i].Length < 4) continue; else { if (Array[i][0] >= 0 && Array[i][0] <= 9) continue; else List.Add(Array[i]); } } Dictionary<string, int> dic = new Dictionary<string, int>(); foreach (var p in List)//统计list中相同元素出现的次数并排序 { if (dic.ContainsKey(p)) dic[p] += 1; else dic.Add(p, 1); } Console.WriteLine("单词总数:{0}", List.Count); for (int count = 0; count < 10; count++) { var element = dic.ElementAt(count); var Key = element.Key; var Value = element.Value; Console.WriteLine("< {0} > : {1}", Key, dic[Key]); } using (StreamWriter file = new StreamWriter("myfile.txt")) for (int count = 0; count < 10; count++) { var element = dic.ElementAt(count); var Key = element.Key; var Value = element.Value; file.WriteLine("< {0} > : {1}", Key, dic[Key]); } sr.Close(); }

    我们用了莎翁的十四行诗做测试,看起来是对的

    将出现频率最高的十个单词写入 myfile.txt 中

     

    Part 4. 测试程序

     

    三个测试貌似都过了

    做断点测试

    Part 5. 小结

    这次作业其实完成的并不顺利,因为和小伙伴难免有意见不一致的时候,这个时候进度就会停滞不前。也从侧面印证了一开始的沟通是多么重要。结对编程也是一个查漏补缺的过程,我也从中学到了很多,从一无所知到从项目中不断学习新知识,也学会了与队友沟通。同时,一个人看问题也往往比较片面,从而忽视了很多问题,这个时候结对编程的好处就展现出来了,可能我没想到的点,队友想到了,看问题能更加全面,而往往自己没看出来的错误,队友能发现,真正有了 1+1>2 的体验。

  • 相关阅读:
    揭开Future的神秘面纱——任务取消
    阻塞队列和生产者-消费者模式
    ExecutorService——<T> Future<T> submit(Callable<T> task)
    ExecutorService接口概要
    Executor简介
    使用显式的Lock对象取代synchronized关键字进行同步
    SingleThreadExecutor(单线程执行器)
    后台线程(daemon)
    加入一个线程
    计算机网络的一些英文缩写词
  • 原文地址:https://www.cnblogs.com/Sabrian-Liu/p/10660208.html
Copyright © 2011-2022 走看看