软件构造--Lab3小结

软件构造–Lab3小结

就在昨天结束了“紧张刺激”的Lab3,这次实验给人的感觉和前两次的差别还是不小的。下面简要进行一下总结。

开始前已有部分

代码框架

代码框架部分看上去还是不错的,一些基础的类已经给出了具体实现,无需修改;还有一些类给出了fields、要实现的方法,给我们的实现以方向性;另外还有一些类一点内容都没有,但是这些大部分是通过继承实现的,也有些已经给出了相似的具体实现,也不至于从0开始实现,没有方向。
代码框架这部分本人还算是比较满意的。

实验指导

相比于代码框架,实验指导就不是那么令人满意了,还需要一定的改进,看上去应该是时间比较紧,自创的实验短时间能够到这样,也已经很好了。

首先是实验指导中的示例部分:
商业表决部分,示例给出的股权总和已经超过了100%了。
在这里插入图片描述

代表选举部分,示例的不合法票还是计入结果当中。(选出3个人的时候,投票人3的票是不合法票,A-E的支持票应该为1、1、4、2、2)

在这里插入图片描述

聚餐点菜部分,示例并不符合n≤k≤n+5≤m的要求,其中n为投票人数量,k为选出对象数量,m为候选人数量,n=4,k=4,m=6,这里m应该最小为9。尽管是示例,也应该符合指导中给出的抽象要求。

在这里插入图片描述
在这里插入图片描述

其次是指导的任务的安排顺序部分,当然也可能是老师的深刻用意本人并没有体会到。
任务5要求能够执行测试用例且通过,但是其中包含了statisitics和select方法需要用到任务8、任务9的strategy模式设计,按照顺序来说并没有实现,这部分的用例显然无法通过。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

匿名投票的Vote右子类型RealNameVote,任务10要求用Decorator模式设计,个人认为可以挪到任务3(Vote的部分)

在这里插入图片描述

最突兀的可能是基于语法的数据读入。这里是前面任务留下了VoteType一个构造方法没有实现,想要考察正则表达式的使用,但是放在倒数第3个任务感觉有些晚了,不妨移动到VoteType的任务部分,或者在它的任务紧接着的下面,都是不错的选择。

在这里插入图片描述

另外,指导部分对于实现有一定的限制,有些地方不能修改,从一定程度上限制了实现者的自由发挥。
但是指导也有值得称赞的地方,首先讲解真的是非常详细,包括抽象设计啊、抽象出来的要求啊、对比的方面,相比于前两个实验的指导那应该不是一个级别的吧,这个详细程度对于实现有很大帮助;

在这里插入图片描述
在这里插入图片描述

其次,fields和methods的清晰分类,统一查看,也是不错的设计。

在这里插入图片描述

另外,对于差异性的东西,也会在最后进行显示,并给予相应提示,这块还是比较细心的。

在这里插入图片描述

个人实现部分

Poll接口测试

接口测试这块,不只是我,我看其他的同学在这块一开始也是有些蒙圈的。除了result方法全是void,一个observer方法都没有,还是个接口,这该咋测试呢?悄悄地说一下,这里居然能看到测试new一个接口Poll的其他同学,到Lab3了,这就有点奇怪了哈。

回到正题,针对只有一个result能查看fields状态的方法,我设计就用result来看整个Poll活动是否正确(负负得正,但实际开发中肯定要看各个fields对应阶段是否是预期的)。

接口测试的话,之前Lab2有一个graph的接口测试,可以回顾一下Lab2这块的设计(本人实现的话没有参考Lab2这块)。

编码问题

编码问题是我这个实验头疼的一大部分,Lab2中用的英文,倒也没什么;但是Lab3这边用中文,一开始还是挺好的,但是到运行起来,编码问题就出现了,中文为乱码。

倘若我改编码吧,之前写过的部分(包括框架已有的spec部分)就全是乱码了,这就很难受了;如果不改吧,又是乱码,这怎么看。

最终决定使用全英文。

但是到任务12的时候,使用的是中文“”识别,一开始还没意识到这个也会引起乱码,调了老半天,最后才发现String被“”整成乱码了。

equals问题

这个问题主要出现在Election测试部分、PollTest测试部分。
匿名投票Vote是否相等,equals方法我使用的是IDEA自动生成的实现体。Vote由投票voteItem和时间date组成,对同一个人投票、投同样选项的票,容易被equals认为是相等的。那么有这样的voteItem的Vote,也容易会被认为是一样的。

为什么呢?连续new两个voteItem,计算机内部的时间差可能不足几毫秒,这样的差距,date认为他们是一个时间,因此在这种情况下,除了date以外的fields再相等的话,那就被认为是相同的也就不足为奇了。至于这个为什么没有出现在实名投票部分,那是因为实名那块有投票人的ID区别,倒不至于equals不考虑ID。这也就说明了,为什么是测试的时候是这样的表现了:

在这里插入图片描述

具体有这么几种方案:重写equals方法(个人尝试失败的,但是有其他同学是成功的)、给投票加上唯一的ID、生成的时候在构造函数内部让程序等待一秒(本人实现的)

小结

整体上来说,实验的设计还是不错的,想要考察的点还是比较全面,在最后还要求了个git分支的实现。但是可能缺乏时间细致优化,建议下一次可以早点开始,多个人实现一下,做相应的调整。另外,可以考虑考虑,没有框架,给定要求(需要考察的知识点那就给定实现方法,比如指定要用正则表达式实现),按照今年的情况来看,有一周的自由实现时间,没有框架实现的话时间上也不算大问题。

Lab3的结束,也为这一学年的奋斗画上了一个完美的句号。但是,征程远远没有结束,还需要我们继续向前。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海质粒ABCC9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值