应该使用什么标准来判断和比较Java应用程序?

时间:2020-03-05 18:59:20  来源:igfitidea点击:

我必须为学生提供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之类的棉绒检查器。创建一个我们认为他们的代码应该匹配的配置文件,并查看我们收到了多少次违规。

我认为,正如许多其他海报所暗示的那样,任何客观措施也必须与一些主观措施相结合。