• 系统分析与设计结对项目


    作业成果

    作业源码-java-gitee.

    作业要求

    老师源作业要求
    根据WordCount的需求描述,先编程实现,再编写单元测试,最后撰写博客。

    合作伙伴

        201631062120 201631062220
    

    编码过程

    PSP表格

    ||||||||||||||
    |:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
    |PSP2.1 |PSP阶段|预估耗时(分钟)|实际耗时(分钟)
    |· Planning | · 计划 | 60 | 50
    |· Estimate | · 估计这个任务需要多少时间 | 20 |20
    |· Development | · 开发 | 330 | 330
    |· Analysis| · 需求分析 (包括学习新技术) | 30 | 30
    |· Design Spec | · 生成设计文档 | 0 | 0
    |· Design Review | · 设计复审 (和同事审核设计文档) |20 |20
    |· Coding | · 代码规范 (为目前的开发制定合适的规范)| 0 | 0
    |· Code Review |· 具体设计 | 20 |20
    |· Test | · 具体编码 | 180| 100
    |· Reporting | · 代码复审 | 20 | 20
    |· Test Report | · 报告 |140|140
    |· Size Measurement | · 测试报告 |60 | 60
    |· Postmortem & Process | · 计算工作量 | 20| 20
    |· Improvement Plan | · 事后总结, 并提出过程改进计划 |60 | 60
    | | · 合计 | 520 | 540

    互审代码

    李欣 TO 王筱哲 :逻辑写的非常不错,唯一不足的是注释有点少,希望以后多写注释

    王筱哲 TO 李欣 :思路很清楚,感觉还不错

    基本功能基本一样,扩展功能主要是分成几个class,都有点困扰,代码不是那么清楚,都有所改动,最后基本一致

    UML类图

    属性方法

    文件对象

    public class Wc {
        public int chars;
        public int words;
        public int lines;
        public int codeLines;		//代码行数
        public int empLines;		//空行数
        public int comLines;        //注释行数
    
        public int getChars() {
            return chars;
        }
    
        public int getWords() {
            return words;
        }
    
        public int getLines() {
            return lines;
        }
    
        public int getCodeLines() {
            return codeLines;
        }
    
        public int getEmpLines() {
            return empLines;
        }
    
        public int getComLines() {
            return comLines;
        }
    }
    

    命令对象

        public static String inputFile;
        public static String outputFile;
        public static boolean needC;
        public static boolean needW;
        public static boolean needL;
        public static boolean needO;
        public static boolean needS;        //输入参数中是否有“-s”
        public static boolean needA;        //输入参数中是否有“-a”
        public static boolean needE;        //输入参数中是否有“-e”
    

    查找代码行、注释行、空行

        此处不同于最终项目,是最初时,对于注释行的检测的初试
    
        public static Count wc(String inputFile) throws IOException {
            boolean isNote = false;
            int notNote=0;
            String lineString = "";
            Count count=new Count(0,0,0,0,0,0);
            String txt = "";
            String[] buffer = null;
            String[] buffer2;
            File dir=new File(inputFile);
            BufferedReader bf = new BufferedReader(new FileReader(dir));
           while((txt=bf.readLine())!=null){
                buffer2=txt.split(",| |	|
    ");
                for(int i=0;i<buffer2.length;i++){
                    if(!buffer2[i].equals(""))
                        count.WordCount++;
                }
                count.LineCount++;
                count.CharCount+=txt.length();
            }
            while((lineString=bf.readLine())!=null){
    
                //遇到 , 空格 就结束赋值
                /*buffer=lineString.split(",| ");
                for(int i=0;i<buffer.length;i++){
                        if(!buffer[i].equals("")){
                            count.WordCount++;
                        }
                }*/
                lineString=lineString.trim();
                //空行,一个字符的也算空行
                if (lineString.matches("^[//s&&[^//n]]*$")||lineString.length()==1) {
                    count.EmptyCount++;
                }
                //注释/*的开始
                else if (lineString.startsWith("/*") && !lineString.endsWith("*/")||((lineString.startsWith("{/*")
                        ||lineString.startsWith("}/*"))&&!lineString.endsWith("*/"))){
                    count.NoteCount++;
                    isNote=true;
                }
                //没有遇到*/
                else if(isNote&&!lineString.endsWith("*/")&&!lineString.startsWith("*/")) {
                    notNote++;
                    count.NoteCount++;
                }
                //遇到*/
                else if (isNote == true && (lineString.endsWith("*/")||lineString.startsWith("*/"))) {
                    count.NoteCount++;
                    isNote=false;
                }
                //注释行
                else if (lineString.startsWith("//")|| lineString.startsWith("}//")||lineString.startsWith("{//")||
                        ((lineString.startsWith("{/*") ||lineString.startsWith("}/*")||lineString.startsWith("/*"))
                                && lineString.endsWith("*/"))) {
                    count.NoteCount++;
                }
                else{
                    count.CodeCount++;
                }
            }
            bf.close();
            count.NoteCount-=notNote;
            count.CodeCount+=notNote;
    
            return count;
        }
    

    测试

        命令
        wc.exe -l -c -w -a D:\Desktop\123.c"
        结果
        123.c, 字符数: 44
        123.c, 单词数: 30
        123.c, 行数: 7
        123.c, 代码行/空行/注释行: 2/4/1
    

    总结

        停用词表的检测存在些许问题,没有达到预期效果。因为时间有限,高级功能最终也没有真正实现。希望后续时间可以完成
        另外结对编程相比自己编程来说,可以更好的讨论和研究需求和具体实现,但是也存在双方意见不同、争执的时候。但总体来说,1+1>2,遇到问题时,有人可以商量,比一个人思索更有效些。
  • 相关阅读:
    AdminLTE组件之表格DataTable
    爬虫:通过滑动或者点触验证码的方法及实现(点触+滑动)
    爬虫:滑动验证解决方法及python实现
    django文件上传地址以及media的设置
    基于cropper和sweetalert的简单图片/头像裁剪上传
    学写网站(二)前端配置之glup
    轩辕剑陆和外传平台版设置功能
    植物大战僵尸
    仙剑类更新
    VSCode注册关联自定义类型文件
  • 原文地址:https://www.cnblogs.com/Myemperor/p/9799853.html
Copyright © 2020-2023  润新知