
1.什么是软件过程?它与软件工程方法学有何关系?软件工程方法学的三个要素是什么?现在广泛使用的是哪两种方法学?(10分)
参:
软件过程是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
软件过程是软件工程方法学的3个重要组成部分之一。软件工程方法学是通常把在软件生命周期全过程中使用的一整套技术的集合。软件工程方法学包括三个要素,这就是方法、工具和过程。其中,方法是完成软件开发的各项任务的技术方法,回答“如何做”的问题;工具是为方法的运用提供自动的或半自动的软件支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
三要素:方法、工具、过程。
传统方法学和面向对象方法学。
2.瀑布模型、快速原型模型、增量模型、螺旋模型和喷泉模型是5种典型的软件生命周期模型,请详述这5种模型各自的特点。(8分)
参:
瀑布模型:历史悠久、广为人知,它的优势在于它是规范的、文档驱动的方法;这种模型的问题是,最终交付的产品可能不是用户真正需要的。
快速原型模型:正是为了克服瀑布模型的缺点而提出来的。它通过快速构建起一个可运行的原型系统,让用户试用原型并收集用户反馈意见的办法,获取用户的真实需求。
增量模型:具有能在软件开发的早期阶段使投资获得明显回报和易于维护的优点,但是,要求软件具有开放结构是使用这种模型时固有的困难。
螺旋模型:风险驱动的螺旋模型适用于大规模的内部开发项目,但是,只有在开发人员具有风险分析和排除风险的经验及专门知识时,使用这种模型才会获得成功。
喷泉模型:当使用面向对象范型开发软件时,软件生命周期必须是循环的,也就是说,软件过程必须支持反馈和迭代。喷泉模型是一种典型的适合于面向对象范型的过程模型。
3.面向对象方法学的四个要点是什么?请对每个要点分别简述。(5分)
参:
四个要点:对象+类+继承+用消息通信
1)把对象(Object)作为融合了数据及在数据上的操作行为的统一的软件构件。面向对象程序是由对象组成的,程序中任何元素都是对象,复杂对象由比较简单的对象组合而成。
2)把所有对象都划分成类(Class)。每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。数据用于表示对象的静态属性,是对象的状态信息,而施加于数据之上的操作用于实现对象的动态行为。
3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承。
4)对象彼此之间仅能通过发送消息互相联系。对象与传统数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须向它发消息请求它执行它的某个操作以处理它的数据,而不能从外界直接对它的数据进行处理。
4.什么是软件危机?请列出来你所知道的软件危机的典型表现。(5分)
参:
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。
典型表现:
●对软件开发成本和进度的估计常常很不准确。
●用户对“已完成的”软件系统不满意的现象经常发生。
●软件产品的质量往往靠不住
●软件常常是不可维护的。
●软件通常没有适当的文档资料。
●软件成本在计算机系统总成本中所占的比例逐年上升。
●软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。
5.从下图可以看出,模块数目越多,每个模块的成本越低,因此在进行模块化设计时模块的数目越多越好。请问上述说法正确与否,并解释原因。(5分)
参:
不对。
接口成本增加。
6.请画出描述教师、学生和课程的实体-关系图。(10分)
注:教师的信息包括教工号、姓名、性别、职称等,学生的信息包括学号、姓名、性别、系、年级等,课程的信息包括课程号、课程名、学时等,学生进行课程的学习会得到对应的成绩。
7.下图为某软件的层次图,根据图中的信息,回答下列问题:(共10分)
1)该软件结构的深度和宽度分别是多少?
2)模块2的扇入为多少?模块2的扇出为多少?
3)模块9的控制域是什么?(请指出该控制域所包含模块的编号)
参:
1)深度5,宽度9
2)模块2的扇入为1,扇出为4
3)控制域为模块9,17,18,22
8.某高校内用固定电话拨打电话时有以下规则:①校内电话号码由4位数字组成,第1位数字不是0;②校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,如果是本市电话再接着拨8位电话号码(第1位不是0),如果是外地电话则先拨区码(3位数字),再拨当地电话号码(8位数字,第1位不是0)。
请用数据字典定义数据的方法定义上述的电话号码。(10分)
参:
电话号码=[校内电话|校外电话]
校内电话=非零数字+三位数字
非零数字=[1|2|3|4|5|6|7|8|9]
三位数字=3{数字}3
数字=[0|1|2|3|4|5|6|7|8|9]
校外电话=[本市电话|外地电话]
本市电话=数字零+非零数字+七位数字
外地电话=数字零+三位数字+非零数字+七位数字
数字零=0
七位数字=7{数字}7
9.下图为某工程完整的工程网络图,图中每个圆圈表示该工程中的一个事件,事件之间的箭头表示一个作业(虚线表示虚拟作业),箭头上方的数字表示对应作业持续的时间。
1) 计算每个事件的最早时刻和最迟时刻,分别填写在对应圆圈的右上角和右下角。(10分)
2) 计算每个作业的机动时间,分别填写在对应箭头下方的括弧中。(5分)
10.一个软件公司有许多员工,员工分为经理和开发人员。每个开发人员可参加多个开发项目,每个开发项目需要多个开发人员,每位经理可主持多个开发项目。
根据上述信息,建立该公司的对象模型。(10分)
参:
11.有人说开发软件就是编写程序,请问这种说法正确吗?为什么?试用所学的软件工程知识详细解释原因。(12分)
参:
软件开发是一个复杂的过程,按照软件工程的思想,需要经过多个步骤有秩序地进行。
分析-设计-编码-测试
问题定义-可行性研究-需求分析-概要设计-详细设计-编码和单元测试-综合测试-软件维护
1.瀑布模型、快速原型模型、增量模型、螺旋模型和喷泉模型是5种典型的软件生命周期模型,请简述这5种模型各自的特点。(5分)
参:
瀑布模型:历史悠久、广为人知,它的优势在于它是规范的、文档驱动的方法;这种模型的问题是,最终交付的产品可能不是用户真正需要的。
快速原型模型:正是为了克服瀑布模型的缺点而提出来的。它通过快速构建起一个可运行的原型系统,让用户试用原型并收集用户反馈意见的办法,获取用户的真实需求。
增量模型:具有能在软件开发的早期阶段使投资获得明显回报和易于维护的优点,但是,要求软件具有开放结构是使用这种模型时固有的困难。
螺旋模型:风险驱动的螺旋模型适用于大规模的内部开发项目,但是,只有在开发人员具有风险分析和排除风险的经验及专门知识时,使用这种模型才会获得成功。
喷泉模型:当使用面向对象范型开发软件时,软件生命周期必须是循环的,也就是说,软件过程必须支持反馈和迭代。喷泉模型是一种典型的适合于面向对象范型的过程模型。
2.面向对象方法学的四个要点是什么?请对每个要点分别简述。(5分)
参:
四个要点:对象+类+继承+用消息通信
1)把对象(Object)作为融合了数据及在数据上的操作行为的统一的软件构件。面向对象程序是由对象组成的,程序中任何元素都是对象,复杂对象由比较简单的对象组合而成。
2)把所有对象都划分成类(Class)。每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。数据用于表示对象的静态属性,是对象的状态信息,而施加于数据之上的操作用于实现对象的动态行为。
3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承。
4)对象彼此之间仅能通过发送消息互相联系。对象与传统数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须向它发消息请求它执行它的某个操作以处理它的数据,而不能从外界直接对它的数据进行处理。
3.办公室复印机的工作过程大致如下:未接到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现缺纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接受复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告等待维修人员来排除故障,故障排除后回到闲置状态。
请用状态转换图描绘复印机的行为。(5分)
参:
参:
1)深度5,宽度9
2)模块2的扇入为1,扇出为4
3)控制域为模块9,17,18,22
6.画出下列伪码程序的盒图。(6分)
START
IF p THEN
WHILE q DO
f
END DO
ELSE
BLOCK
g
n
END BLOCK
END IF
STOP
11.一位教师可讲授多门课程,一门课程只能由一位教师讲授;一个学生可学习多门课程,一门课程由多个学生来学习。教师的信息包括教工号、姓名、性别、职称等,学生的信息包括学号、姓名、性别、系、年级等,课程的信息包括课程号、课程名、学时等。
请分别使用实体关系图和类图描述上述信息。(5分)
12.学校要开发一套学生成绩管理系统。如果你是该项目的负责人,试用所学的软件工程知识回答你准备怎样展开具体的软件开发和维护工作?(8分)
参:
软件开发是一个复杂的过程,按照软件工程的思想,需要经过多个步骤有秩序地进行。
分析-设计-编码-测试
问题定义-可行性研究-需求分析-概要设计-详细设计-编码和单元测试-综合测试-软件维护
