软工实践寒假作业(2/2)

这是这个作业的基本信息
这个作业属于哪个课程 2021春软件工程实践S班
这个作业要求在哪里 软工实践寒假作业(2/2)
这个作业的目标 学习更多技能、提高自身水平,为下学期的软工实践,为今后的学习和工作做好准备
其他参考文献 ...

PART1:阅读《构建之法》并提问

Q1

 典型的软件团队里除了能写代码、测试代码和画图做设计的成员,还有一类角色,不做上面这些事情也很重要,我们叫他们项目经理——PM。
PM的M就是Manager,但是P有这几种:Product Manager、Project Manager、Program Manager,在不同的行业和公司,他们的作用各不相同。《构建之法》第9章 项目经理

  •  在很久之前第一次得知项目经理这个存在的时候,我就有一个疑问:“项目经理,是不是可以划水啊?”当然之后我很快就知道项目经理也是很忙的,要和客户交流沟通,要协调团队关系,要跟进项目进度,要带领团队进步。划水的疑问解决了,另一个疑问又来了:项目经理这个职位对编程能力的要求高吗?
  •  在邹欣老师的《构建之法》中提到,PM负责做开发和测试之外的所有事情,如果这么看,软件开发和测试都有人做了,PM要做的也似乎与编程没有什么关系,那对PM编程能力的要求是不是并不高?在《构建之法》中有这么一段:

 其次,PM的产品是规格说明书(Spec),PM要凭自己的能力,把用户的需求展现成其他成员能够理解和执行的语言,从而赢得同伴的信任和尊敬。如果PM同时又是其他人的老板,则不必写太好的Spec,用命令即可说服别人。再次,PM不一定是很好的行政经理(管人的),硬把管理不同专业人员的任务加到PM头上,反而会坏事。《构建之法》第9章 项目经理

  •  在这一段里面有提到PM要凭自己的能力赢得同伴的信任和尊敬,这里的能力除了指PM谈客户、选项目、定方向、带团队的能力之外,是否还有PM自身的编程能力,如果PM的编程能力弱,怎么知道项目功能能不能实现呢?
  •  还有就是这一段关于舵手和小船的故事:

 如果这个舵手也开始划船,后果会怎么样?可能小船的速率会快一些,但是小船的方向、稳定性会出问题。船是划快了一些,但是划桨的众多队友不能协调一致,船也不稳,而且最后到了一个计划外的地方,你愿意么?《构建之法》第9章 项目经理

  •  我明白这段是说团队应该各司其职,PM不要介入开发和测试中,但是这样的话对PM的编程能力的要求又是多少呢?或者说PM要能理解多少代码呢?

Q2

 王屋村的居民大志要把一堆砖头从村头搬到村尾。他来到顶球酒吧前,看到前面三三两两地蹲着一些人,有些人面前放着一块包装箱纸板,上面写着“Java,五毛一行”;“网页前端,不酷不要钱”;“专做PS,擅长人体”;“通吃SQL、NOSQL”,等等。《构建之法》第5章 团队和流程

  •  刚开始看到这一段,我想的是这些人各有所长,为什么不能组成团队呢?然后我看到书里已经给出了解释:

 1.团队有一致的集体目标,团队要一起完成这目标。一个团队的成员不一定要同时工作,例如接力赛跑。王屋村搬砖的“非团队”成员则不然,每个人想搬多少就搬多少,不想干了就结算工钱走人。
 2.团队成员有各自的分工,互相依赖合作,共同完成任务。王屋村搬砖的“非团队”成员则是各自行动,独立把任务完成,有人不辞而别,对其他的搬砖人无实质影响。《构建之法》第5章 团队和流程

  •  为什么不能组成团队的疑问得到解答了,我的理解是王屋村的搬砖人只是零散的个体,没有团聚在一起的动力。假使突然来了一个人,他对这些搬砖人说,我们组个团,赚更多,且假使这些搬砖人心动了,他们成为了一个团队,应该怎么选择一个合适的团队模式呢?《构建之法》中的团队模式各不相同,对于如何选择我也是一头雾水。

PART2:WordCount编程

Github项目地址

Github项目点我前往

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
Estimate 估计这个任务需要多少时间 2.5day 3day
Development 开发
Analysis 需求分析 (包括学习新技术) 30 50
Design Spec 生成设计文档 20 15
Design Review 设计复审 10 10
Coding Standard 代码规范 (为目前的开发制定合适的规范) 15 12
Design 具体设计 30 30
Coding 具体编码 240 360
Code Review 代码复审 90 60
Test 测试(自我测试,修改代码,提交修改) 60 60
Reporting 报告
Test Repor 测试报告 60 60
Size Measurement 计算工作量 20 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20 30
合计 595 707

解题思路描述

  • 看到作业要求的时候确实是很头大的,密密麻麻一长条,尤其是没有接触过的git和github,我感觉很晕。对此,我选择的完成作业的方法是先写代码!写了再说,至于提交什么的,等我写完代码再说吧!于是我开始写代码了。

  • 我主要是从需求出发,基本需求就几个:一,统计字符数;二,统计单词数;三,统计行数;四,统计词频。在这几个需求里,我把一和三结合到一起,并编写了函数charAndEntercount(用enter绝不是忘记行数的英文line了,嗯)。因为换行符就是'\n',所以我选择在计算字符的时候同时对行数进行计数,但是显然有个问题,就是空白行,应该怎么排除呢,我的方法是设立一个变量isnewEnter,这个变量在遇到换行符后会置1,表示进入了下一行,而只有在遇到非空白字符时,这个变量才会置0,同时行数会+1。

  • 解决好了需求一和三,我又把目光转到需求二和四,这两个需求的共同点是都涉及到对单词有效性的判断,在作业要求中有提到对单词有效性的要求,1.至少四个字符;2.前四个字符必须为英文字符。我的想法是用getline函数依次取出文件里的每一行,再把该行字符逐个取出,一般来说遇到空格符就判定结束上一个单词的录入,但是我觉得这样的话会白干活,比如我遇到123hbg,显然这个并不是有效单词,从第一位数字开始它就是无效的,这也就是说这个单词是没必要记录的,于是我设置了一个变量isefct,用于判断单词是否有效,它的用法我会贴在设计与实现过程里。而词频统计和排序这部分,我想到了C#里学到的索引器,但是我不太想自己写一个,所以搜寻过后,我决定词频统计用map,而排序则用vector的sort。

代码规范制定链接

代码规范制定点我前往

设计与实现过程

类WordCount

class WordCount
{
    private:
        int w_char;    //characters' count
        int w_word;    //words' count
        int w_line;    //enter count
        map<string,int> wordmap;
		
    public:
        WordCount(){
            w_char=0;
            w_word=0;
            w_line=0;
        }
		
        //function
        void charAndEntercount(string pathstr);    //count characters
        void wCount(string pathstr);		   //count words and enter						
        void writeTxt(string outstr);
};

变量isnewEnter

if(temp=='\n')
{
    isnewEnter=1;
}
else
{
    if((temp=='\f'||temp=='\r'||temp=='\t'||temp=='\v'||temp=='\b'||temp==' ')&&isnewEnter==1);
    else
    {
        ec+=isnewEnter;
        isnewEnter=0;
    }
}

变量isefct

if(isefct)
{
    if( isdigit(ch)!=0 && wordlength<4 )		
    {
        isefct=false; 	//if digit show in the first 4 char,the word is not effective
	wordlength=0;
	word="";
    }
    else
    {
	word+=tolower(ch);
	wordlength++;
    }
}

词频统计

//if the word is effective,store it into wdmap
if( isefct && wordlength>=4 ) 
{
    wcot++;
						
    map<string,int>::iterator iter=(*wdmap).find(word);
 
    if( iter!=(*wdmap).end())
    {
        (*wdmap)[word]++;
        wcot--;
    }
    else
    {
        (*wdmap).insert(pair<string, int>(word, 1));
    }
}

测试

test1test2
test3test4
test5test6
test7test8
test9test10

心路历程与收获

心路历程其实在解题思路描述中有提到一些,就是刚开始看到一大串作业要求头有点大,但是当确定好先打代码的方向后,一点点琢磨作业需求的过程中,既有被error折磨的痛苦,也有编译通过的快乐。但是快乐归快乐我又一次感受到自己知识量的不足。
  收获就是不懂的不会的一定要动手去找,天上不会掉馅饼,脑子里也不会自己涨知识,认识源于实践,不动手是会一无所获的。
  以及PSP表格我估不准....因为我是边想边写的,这样不好,如果设计好整个流程,思路清晰,结果会更好。下次一定。

posted @ 2021-03-05 21:11  MEating  阅读(146)  评论(10编辑  收藏  举报