应该使用什么标准来判断和比较Java应用程序?
我必须为学生提供Java编程挑战赛,我们必须提出一些技术标准来判断他们的Java应用程序。
根据代码和文档,比较和判断应用程序的最佳方法是什么?
编辑以提供有关挑战的更多详细信息:
学生应该基于JavaME为我们的一种设备(多功能打印机)开发自己选择的应用程序。该应用程序将在设备上运行,并应使用我们的SDK / J提供的功能,并由市场和支持部门(我的部门)进行判断。他们将使用模拟器进行第一步,如果他们有资格参加决赛,他们将获得真正的设备。
解决方案
回答
如果挑战有目标,例如编写某种游戏程序,那么很明显,第一个标准应该是所审查程序达到目标的程度。第二个标准(一定是针对学生项目的)应该是代码的可读性和结构。是否有任何复制/粘贴的证据?那为什么那部分没有变成函数/子程序/过程呢?
额外的信用积分用于使用特别新颖的方法的代码(但是,如果它们不是显而易见的,则必须充分记录下来,以使作者的同行得以维护!),以提高效率或者功能。
回答
我们可以从许多不同方面对它们进行判断,我特别希望寻找:
在需要的地方使用方法
学生不应具有复制和粘贴功能;他们应该知道何时创建方法,包括什么内容。
数据结构的使用
我见过人们使用数组来存储应该是成员变量的内容。例如,
foo[0] = 'icewolf'; foo[1] = '119'
其中,icewolf是用户名,而119是声誉得分。学生应改用
String username; int reputation;
或者类似的东西。
接口,抽象类,具体类
学生应该了解何时使用哪个。如果这是一个Web应用程序,并且他们发现自己在每个类中都实现了与doGet相同的doPost方法,则他们可能应该创建一个超类,其中doPost在默认情况下仅调用doGet。
代码的可读性
劝阻学生不要编写代码来解释每一个琐碎的陈述。鼓励学生记录非平凡的陈述。
我会特别注意它们的设计和完成。我个人会给一种具有更简洁,易于理解的设计的应用程序提供更多的要点,而不是那些功能齐全但到处都是的应用程序。
回答
很多这取决于他们正在研究什么以及我们期望他们提供什么。
如果他们正在学习成为程序员,我会让他们提出一套要求和一份设计文档,其中要解决满足这些要求的所选方式。还使它们使用代码提供一组测试。
在那之后,
- 功能是否满足要求?
- 它是否设计合理(面向对象)?
- 算法选择正确吗?
- 他们执行得好吗?
- 变量/方法/类的命名是否正确完成?
- 测试覆盖率好吗?
- 它是否正确使用了Java的功能? (泛型,依此类推)
- 该代码是否注释正确(不明显且不具描述性)?
- 它通过测试套件了吗?
- 代码可读吗?
- 它可以维护吗?
- 它解决了一个相关的问题吗?
- 应用程序有趣吗?
混合搭配以符合喜好
回答
我认为答案取决于Java编程挑战是什么。
如果所有项目都试图解决类似的问题,我们是否可以自动化测试,并根据性能进行某种比较?
如果项目必须符合API,那么无论谁获胜最多,都可以对每个项目进行一些自动化测试。
如果这是一个开放式挑战,那么我们应该可以选择最酷的一个。将所有项目放到网站上,看看哪个获得了最大的成功……。听起来有点像一个怪胎,没有0898数字。
我想这是一个公平但耗时的测试,我们可以坐下来并对项目进行代码审查。
无论是公开挑战还是封闭挑战,我们都可以针对代码库运行某些工具来衡量代码质量。例如JDepends,Clover(单元测试覆盖率)等,但是这些都是很主观的。
回答
我们可以使用诸如CheckStyle,PMD或者FindBugs之类的棉绒检查器。创建一个我们认为他们的代码应该匹配的配置文件,并查看我们收到了多少次违规。
我认为,正如许多其他海报所暗示的那样,任何客观措施也必须与一些主观措施相结合。