"哈工大2019软件构造期末考试题"
这是一份来自哈尔滨工业大学2019年春季学期的《软件构造》课程期末考试试题,主要考察学生对软件构造相关知识的理解和应用。试卷包含单选题,重点涉及软件生命周期的不同阶段、软件测试方法、对象的不可变性和可变性概念、抽象数据类型(ADT)的表示(Rep)、访问函数(Access Function, AF)以及rep不变性(Rep Invariance, RI)等核心概念。
1. 软件构造实体的分类:题目提到了构建时视图(build-time view)和瞬时视图(moment-view)。选项A中的Software Configuration Item (SCI)通常在构建过程中管理,而StackTrace则是在程序运行时出现错误时记录的信息,属于瞬时视图。选项B中,CodeSnapshot和TestCase是在测试过程中的概念,静态链接库(Static linking library)是构建过程中的一部分,而Memory Dump则是在运行时分析内存状态的产物。选项C,Static linking library和Memory Dump同样属于构建和运行时的区别。选项D,Abstract Syntax Tree (AST)是编译时产生的结构,而CodeChurn是追踪代码变更的指标,发生在开发过程中。根据这些描述,可以推断出可能的答案。
2. 不需运行代码的工具/命令:此题考察了软件开发中的一些工具。A选项的JUnit和EclEmma是单元测试工具,需要运行代码来测试。B选项中,Checkstyle是代码风格检查工具,git commit是版本控制操作,都不需要运行代码。C选项,Eclipse Memory Analyzer (MAT)和jmap用于分析内存,可能需要运行Java应用程序,但不是直接运行代码。D选项,SpotBugs和VisualVM都是代码分析工具,它们通常在程序运行时分析,但不需直接运行代码。根据题目要求,可能的答案是B或D。
3. 关于immutability和mutability:immutability是指对象创建后其状态不能改变,而mutability则是可以改变的。A选项,被static和final修饰的变量在Java中通常是不可变的,但日期类DatedepartTime可能有可变的方法,所以表述不严谨。B选项,State设计模式确实允许对象的状态转换,因此是可变的。C选项,Collections.unmodifiableList返回的列表是只读的,内容不能直接修改,是不可变的。D选项,迭代器本身是可以改变的,可以删除元素,所以这个表述是错误的。正确答案可能是C。
4. ADT的Rep、AF、RI:Rep是ADT的内部表示,AF定义了对外部的访问方式,RI是关于ADT不变性的规则。A选项,对于immutable类,其rep确实不能在创建后改变,这是正确的。B选项,Repexposure是指暴露了ADT的内部表示,对于所有ADT(包括mutable和immutable)都有意义,暴露rep可能会破坏对象的封装性。C和D选项涉及到ADT的可变性,对于mutable ADT,其rep可以改变,而对于iterator,虽然其自身可以改变,但它对ADT的rep的改变是有限制的,不能直接修改ADT的内容。因此,A选项是正确的。
这些题目涵盖了软件构造的多个方面,如软件工程过程、测试、对象的性质、抽象数据类型的设计原则等,这些都是软件构造课程的重要组成部分。通过这些题目,学生需要展示他们对理论知识的掌握以及将其应用于实际问题的能力。