考研软件工程复试笔试面试详细问答
- 格式:doc
- 大小:39.50 KB
- 文档页数:9
一、你对MVC的理解,MVC有什么优缺点?结合Struts,说明在一个Web应用如何去使用?答:MVC设计模式(应用观察者模式的框架模式)M: Model(Business process layer),模型,操作数据的业务处理层,并独立于表现层(Independent of presentation)。
V: View(Presentation layer),视图,通过客户端数据类型显示数据,并回显模型层的执行结果。
C: Controller(Control layer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图MVC框架的一种实现模型模型二(Servlet-centric):JSP+Servlet+JavaBean,以控制为核心,JSP只负责显示和收集数据,Sevlet,连接视图和模型,将视图层数据,发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种MVC的实现模式。
StrutsMVC框架(Web application frameworks)Struts是使用MVC的实现模式二来实现的,也就是以控制器为核心。
Struts提供了一些组件使用MVC开发应用程序:Model:Struts没有提供model类。
这个商业逻辑必须由Web应用程序的开发者以JavaBean 或EJB的形式提供View:Struts提供了action form创建form bean, 用于在controller和view间传输数据。
此外,Struts提供了自定义JSP标签库,辅助开发者用JSP创建交互式的以表单为基础的应用程序,应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于JSP中。
Controller:Struts提供了一个核心的控制器ActionServlet,通过这个核心的控制器来调用其他用户注册了的自定义的控制器Action,自定义Action需要符合Struts的自定义Action规范,还需要在struts-config.xml的特定配置文件中进行配置,接收JSP输入字段形成Action form,然后调用一个Action控制器。
2022年软件工程师面试问题及答案一、基础知识1.1 编程语言问题:请简述 Java 和 Python 的区别。
答案:Java 是一种面向对象的语言,编译后运行在虚拟机上,性能相对较高,适用于大型企业级应用。
Python 是一种解释型语言,语法简洁明了,开发效率高,适用于快速原型开发和数据分析等场景。
问题:请解释一下什么是面向对象编程?答案:面向对象编程是一种编程范式,它将现实世界中的事物抽象为对象,每个对象具有属性和方法。
面向对象编程的主要特点包括封装、继承和多态。
1.2 数据结构与算法问题:请简述冒泡排序和快速排序的原理。
答案:冒泡排序是通过多次比较和交换相邻元素的位置,将最大的元素逐渐移动到数组的末尾。
快速排序是采用分治法的一个典例,通过选取一个基准元素,将数组分为两部分,分别对这两部分递归地进行快速排序。
问题:请实现一个反转链表的函数。
答案:class ListNode:def __init__(self, value=0, next=None):self.value = valueself.next = nextdef reverse_linked_list(head):prev = Nonecurrent = headwhile current:next_node = current.nextcurrent.next = prevprev = currentcurrent = next_nodereturn prev二、框架与技术2.1 Spring Boot问题:请解释一下 Spring Boot 的自动配置原理。
答案:Spring Boot 通过 `spring.factories` 文件中定义的默认配置信息和用户自定义的配置信息进行自动配置。
它会根据项目所依赖的库和配置信息,自动配置 Spring 容器中的相关组件。
问题:请简述 Spring Boot 中事务管理的原理。
答案:Spring Boot 中的事务管理主要通过代理方式实现。
软件工程师面试题及答案在当今科技飞速发展的时代,软件工程师成为了备受追捧的职业之一。
而在求职过程中,面试是至关重要的环节。
以下为您呈现一些常见的软件工程师面试题及答案,希望能对您有所帮助。
一、技术类问题1、请简要介绍一下面向对象编程(OOP)的三大特性,以及它们在实际开发中的应用。
答案:面向对象编程的三大特性是封装、继承和多态。
封装是将数据和操作数据的方法封装在一个类中,以实现数据的隐藏和保护,提高代码的安全性和可维护性。
例如,将一个人的个人信息和相关操作封装在一个“Person”类中。
继承允许创建一个新类,从现有类继承属性和方法,实现代码的复用和扩展。
比如,从“Employee”类继承创建“Manager”类。
多态使得同一个方法在不同的对象中有不同的实现方式,增强了程序的灵活性。
比如,在一个图形绘制程序中,不同的图形类(如圆形、方形)都实现了“draw”方法,但具体的绘制方式不同。
2、谈谈你对数据库索引的理解,以及在什么情况下应该使用索引,什么情况下不应该使用?答案:数据库索引是一种用于提高数据检索速度的数据结构。
它类似于书籍的目录,通过索引可以快速定位到所需的数据。
在经常用于查询、连接和排序的列上应该使用索引,比如主键、外键、经常用于搜索的字段等。
然而,在数据量小的表、频繁更新的列、数据分布不均匀的列上不应该使用索引,因为创建和维护索引会带来额外的开销,可能会降低数据插入、更新和删除的性能。
3、解释一下什么是线程安全,以及如何实现线程安全?答案:线程安全是指多个线程同时访问和操作同一共享资源时,程序的执行结果是正确的,不会出现数据不一致或其他异常情况。
实现线程安全的方法有多种,比如使用同步关键字(如 synchronized )来锁定关键代码段,确保同一时刻只有一个线程能够访问共享资源;使用线程安全的集合类(如 ConcurrentHashMap )替代非线程安全的集合类;避免共享可变状态,尽量使用不可变对象等。
1.什么是软件工程?目前有哪几种主要的软件工程方法?概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术、和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
但软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自己的定义.主要有传统方法也称为经典软件工程方法或生命周期方法或结构化范型和面向对象方法.2、流程图与数据流图有什么主要区别?(1)数据流图(date flow diagram , DFD),是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是从数据的角度来描述一个系统的;而流程图则是从对数据加工的角度来描述系统的;(2)数据流图中的箭头是数据流,而流程图中的箭头则是控制流,它表达的是程序执行的次序;(3)数据流图适合于宏观地分析一个组织业务概况,而程序流程图只适合于描述系统中某个加工的执行细节。
(4)数据流程图应该重点描述了数据加工的过程,主要是模块内部,数据流图则是描述模块之间的关系。
3.软件需求分析的任务是什么?有哪些主要步骤?需求分析的基本任务是深入描述软件的功能和性能、确定软件设计的约束和软件同其它系统元素的接口细节、定义软件的其它有效性需求,总之,需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么” 的问题.主要步骤:1.问题识别(1) 功能需求:明确所开发的软件必须具备什么样的功能.(2)性能需求:明确待开发的软件的技术性能指标。
(3) 环境需求:明确软件运行时所需要的软、硬件的要求。
(4) 用户界面需求:明确人机交互方式、输入输出数据格式.2. 分析与综合,导出软件的逻辑模型分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划分成各个子功能。
软件工程师面试问题一、基本面试问题:1. 简单介绍一下你自己。
2. 你对软件工程师这个职位有什么理解?你觉得自己适合这个职位吗?3. 能否谈谈你对软件开发生命周期的了解?4. 你在过去的项目中遇到的最大的挑战是什么?你是如何处理的?5. 你如何处理项目延期或失败的情况?6. 在你的上一份工作中,你是如何与团队合作的?有遇到过与团队成员发生冲突的情况吗?你是如何处理的?7. 你有使用过哪些软件开发工具和技术?8. 能否谈谈你对代码质量的看法以及如何保证代码的质量?9. 你有使用过哪些软件开发模型?你认为哪个模型是最适合软件开发的?10. 你有没有参与到开源项目或者个人的项目中?能谈谈你的经验吗?11. 能否谈谈你对团队沟通和合作的看法?12. 你在哪些方面希望继续学习和提升自己?13. 你最擅长的编程语言是什么?为什么选择这个编程语言?14. 你对数据结构和算法有什么了解?能举例说明在实际项目中的应用吗?15. 你是否持续关注行业的发展和新技术的变化?二、技术面试问题:1. 什么是面向对象编程(OOP)?能否举例说明面向对象编程和面向过程编程的区别?2. 什么是设计模式?能否谈谈你熟悉的设计模式以及它们的应用场景?3. 什么是数据库索引?为什么要使用索引?你是如何优化数据库查询性能的?4. 你在开发过程中如何保证代码的可维护性和可扩展性?5. 什么是HTTP协议?它的工作原理是什么?6. 你对前端开发有了解吗?能谈谈前端开发中常用的技术和工具吗?7. 你对云计算和大数据有了解吗?能谈谈它们对软件开发的影响吗?8. 你有使用过自动化测试工具吗?能谈谈你使用的自动化测试工具以及它们的优缺点?9. 什么是敏捷开发?你认为敏捷开发在软件开发过程中的哪些方面有帮助?10. 你有使用过版本控制工具吗?如果是,请介绍一下你使用的版本控制工具,比如Git。
11. 你在开发过程中遇到过性能问题吗?你是如何进行性能优化的?12. 什么是多线程和并发?你是如何处理多线程编程中的安全问题的?13. 你有使用过数据库管理工具吗?如果是,请介绍一下你使用的数据库管理工具,比如MySQL。
1.什么是软件工程?目前有哪几种重要旳软件工程措施?概括地说,软件工程是指引计算机软件开发和维护旳一门工程学科.采用工程旳概念、原理、技术、和措施来开发与维护软件,把通过时间考验而证明对旳旳管理技术和目前可以得到旳最佳旳技术措施结合起来,以经济地开发出高质量旳软件并有效地维护它,这就是软件工程。
但软件工程始终以来都缺少一种统一旳定义,诸多学者、组织机构都分别给出了自己旳定义。
重要有老式措施也称为典型软件工程措施或生命周期措施或构造化范型和面向对象措施。
2、流程图与数据流图有什么重要区别?(1)数据流图(date flow diagram , DFD),是SA措施中用于表达系统逻辑模型旳一种工具,它以图形旳方式描绘数据在系统中流动和解决旳过程,由于它只反映系统必须完毕旳逻辑功能,因此它是一种功能模型,是从数据旳角度来描述一种系统旳;而流程图则是从对数据加工旳角度来描述系统旳;(2)数据流图中旳箭头是数据流,而流程图中旳箭头则是控制流,它体现旳是程序执行旳顺序;(3)数据流图适合于宏观地分析一种组织业务概况,而程序流程图只适合于描述系统中某个加工旳执行细节。
(4)数据流程图应当重点描述了数据加工旳过程,重要是模块内部,数据流图则是描述模块之间旳关系。
3.软件需求分析旳任务是什么?有哪些重要环节?需求分析旳基本任务是进一步描述软件旳功能和性能、拟定软件设计旳约束和软件同其他系统元素旳接口细节、定义软件旳其他有效性需求,总之,需求分析旳任务就是借助于目前系统旳逻辑模型导出目旳系统旳逻辑模型,解决目旳系统旳“做什么” 旳问题。
重要环节:1.问题辨认(1) 功能需求:明确所开发旳软件必须具有什么样旳功能。
(2) 性能需求:明确待开发旳软件旳技术性能指标。
(3) 环境需求:明确软件运营时所需要旳软、硬件旳规定。
(4) 顾客界面需求:明确人机交互方式、输入输出数据格式。
2. 分析与综合,导出软件旳逻辑模型分析人员对获取旳需求,进行一致性旳分析检查,在分析、综合中逐渐细化软件功能,划提成各个子功能。
软件工程实践复试问题汇总本文档将会汇总软件工程实践复试中可能会涉及到的问题。
以下是一些常见的问题及其答案,供您参考:1. 软件工程实践的定义是什么?软件工程实践是指在软件开发过程中使用一系列科学化、规范化的方法、技术和工具,以提高软件开发效率和质量,满足用户需求的过程。
它包括软件的规划、设计、开发、测试、部署和维护等方面的活动。
2. 在软件工程实践中,常用的开发方法有哪些?常见的软件开发方法包括瀑布模型、敏捷开发、迭代开发、融合开发等。
每种开发方法有其特点和适用场景,根据项目需求选择合适的开发方法可以提高开发效率和质量。
3. 软件需求分析的目的是什么?软件需求分析是指对用户需求进行调研、分析和整理,明确软件系统应具备的功能和性能要求。
它的目的是确保软件开发团队和用户对软件功能的理解一致,为后续的开发工作提供参考。
4. 软件测试的重要性是什么?软件测试是确保软件质量的关键环节。
通过设计和执行各种测试用例,可以发现和修复软件中的错误和缺陷,提高软件的可靠性和稳定性。
同时,软件测试还可以验证软件是否满足用户需求,保证软件交付的质量。
5. 软件配置管理的作用是什么?软件配置管理是指对软件中各种组成部分进行有效管理,包括版本控制、变更管理、发布管理等。
它的作用是确保软件的稳定性和可追溯性,对软件的变更进行有效控制,减少风险和不一致性。
6. 在软件开发项目中,如何确保项目的进度和质量?为确保项目的进度和质量,可以采取以下措施:- 制定详细的项目计划,明确工作任务和里程碑;- 分配合适的团队成员,保证资源的合理利用;- 建立有效的沟通和协作机制,及时解决问题;- 定期进行项目评估和风险管理,及时调整项目方向和资源分配。
文档到此结束。
以上是一些常见的问题及其简要回答,希望对您有所帮助。
如有更多问题,请随时提问。
软件工程专业面试题引言:在软件工程领域,面试是一个常见的环节,能够帮助雇主了解面试者的技能、知识和适应能力。
本文将介绍一些常见的软件工程专业面试题,帮助读者准备面试并展现自己的实力。
1. 项目经验与技术能力在面试中,常常会被问及关于项目经验和技术能力的问题。
以下是一些常见的问题及参考回答:1.1 请介绍你参与的一个软件项目,以及你在其中承担的角色。
回答:在项目A中,我扮演了项目经理的角色。
该项目是一个电子商务平台,我负责项目的规划、资源分配与项目进度控制等工作。
1.2 请说明你在项目开发中使用的主要技术。
回答:在项目开发中,我主要使用了Java编程语言、Spring框架和MySQL数据库等技术。
1.3 请分享你在项目开发中遇到的挑战及应对方法。
回答:在项目中,我们遇到了性能瓶颈的问题。
我采取了数据库优化和代码重构等措施,成功地提升了系统的性能。
2. 算法和数据结构算法和数据结构是软件工程中的重要基础知识。
以下是一些相关问题及参考回答:2.1 请简述二叉树的定义和特性。
回答:二叉树是一种树状结构,其中每个节点最多有两个子节点。
它的特性包括:每个节点最多有两个子节点;左子树上的节点值都小于它们的父节点值;右子树上的节点值都大于它们的父节点值。
2.2 请说明时间复杂度和空间复杂度的概念。
回答:时间复杂度是描述算法执行时间与问题规模之间的关系;空间复杂度是描述算法在运行过程中所需的内存空间与问题规模之间的关系。
2.3 请介绍你熟悉的排序算法,并比较它们的优缺点。
回答:我熟悉冒泡排序、选择排序和快速排序等算法。
冒泡排序简单但效率较低,选择排序效率较高但不稳定,快速排序时间复杂度较低但对初始序列敏感。
3. 编程能力和代码质量编程能力和代码质量是软件工程面试的重要指标。
以下是一些相关问题及参考回答:3.1 请写出一个简单的Java程序,实现两个整数相加的功能。
回答:示例代码如下:```javapublic class AddTwoNumbers {public static void main(String[] args) {int num1 = 5;int num2 = 10;int sum = num1 + num2;System.out.println("The sum is: " + sum);}}```3.2 请谈谈你对代码可读性和可维护性的理解。
软件工程师常见面试题在当今竞争激烈的就业市场中,软件工程师的岗位备受青睐。
而面试则是通往这一岗位的关键环节,面试官通常会通过一系列问题来评估候选人的技术能力、解决问题的能力、团队协作能力以及沟通能力等。
以下是一些常见的软件工程师面试题:一、技术基础类1、谈谈你对面向对象编程(OOP)的理解,以及其三大特性(封装、继承、多态)在实际开发中的应用。
面向对象编程是一种编程范式,它将数据和操作数据的方法封装在一起,形成对象。
封装可以隐藏对象的内部实现细节,只暴露必要的接口,提高了代码的安全性和可维护性。
继承允许子类继承父类的属性和方法,实现代码的复用和扩展。
多态则使得同一个方法在不同的对象上有不同的实现方式,增强了程序的灵活性和可扩展性。
比如,在一个图形绘制的程序中,可以定义一个父类“Shape”,然后派生出子类“Circle”、“Rectangle”等,通过多态,可以用统一的接口来绘制不同的图形。
2、解释一下什么是数据库索引,以及它的作用和可能带来的弊端。
数据库索引是一种数据库结构,用于加快数据的查询和检索速度。
它就像一本书的目录,通过索引可以快速定位到所需的数据,而不必全表扫描。
索引的作用显著,能够大大提高查询效率,特别是在处理大型数据表时。
然而,索引也并非完美无缺。
创建和维护索引需要消耗系统资源,过多的索引会增加数据插入、更新和删除的开销。
此外,对于很少用于查询或者数据量较小的表,创建索引可能得不偿失。
3、请简述一下常见的排序算法(如冒泡排序、快速排序、归并排序等)的时间复杂度和空间复杂度,并比较它们的优缺点。
冒泡排序的时间复杂度为 O(n²),空间复杂度为 O(1)。
它的优点是实现简单,易于理解,缺点是效率较低。
快速排序的平均时间复杂度为 O(nlogn),最坏情况为 O(n²),空间复杂度为 O(logn)到 O(n)。
它在大多数情况下效率很高,但在最坏情况下性能不佳。
归并排序的时间复杂度为 O(nlogn),空间复杂度为 O(n)。
软件工程导论复试题目
1.请简述软件工程的定义以及软件开发生命周期的五个阶段。
2.请分析并说明软件需求分析的重要性及常见的需求分析方法与技巧。
3.请分析并说明软件设计的重要性及常见的软件设计模式。
4.请讲解程序测试的基本原则以及测试的类型和方法。
5.请解释软件项目管理的概念和重要性,简述项目管理中常用的工具
和技术。
6.请展示一款软件产品的开发过程,并分析其中遇到的主要问题和解
决方案。
7.请阐述软件维护的重要性和种类,并提出有效的维护策略和方法。
8.请讨论软件开发过程中的风险管理,包括风险识别、评估和控制策略。
9.请介绍软件质量保证的概念和方法,并提出构建高质量软件的有效
措施。
10.请对自己的软件工程知识和能力进行综合评估,并阐明未来自我
学习的规划和目标。
1.什么是软件工程?目前有哪几种主要的软件工程方法?概括地说,软件工程是指导计算机软件开发和维护的一门工程学科.采用工程的概念、原理、技术、和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
但软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自己的定义。
主要有传统方法也称为经典软件工程方法或生命周期方法或结构化范型和面向对象方法。
2、流程图与数据流图有什么主要区别?(1)数据流图(date flow diagram , DFD),是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是从数据的角度来描述一个系统的;而流程图则是从对数据加工的角度来描述系统的;(2)数据流图中的箭头是数据流,而流程图中的箭头则是控制流,它表达的是程序执行的次序;(3)数据流图适合于宏观地分析一个组织业务概况,而程序流程图只适合于描述系统中某个加工的执行细节。
(4)数据流程图应该重点描述了数据加工的过程,主要是模块内部,数据流图则是描述模块之间的关系。
3.软件需求分析的任务是什么?有哪些主要步骤?需求分析的基本任务是深入描述软件的功能和性能、确定软件设计的约束和软件同其它系统元素的接口细节、定义软件的其它有效性需求,总之,需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么” 的问题。
主要步骤:1.问题识别(1) 功能需求:明确所开发的软件必须具备什么样的功能。
(2) 性能需求:明确待开发的软件的技术性能指标。
(3) 环境需求:明确软件运行时所需要的软、硬件的要求。
(4) 用户界面需求:明确人机交互方式、输入输出数据格式。
2. 分析与综合,导出软件的逻辑模型分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划分成各个子功能。
用图文结合的形式,建立起新系统的逻辑模型。
3. 编写文档(1) 编写“需求规格说明书”,把双方共同的理解与分析结果用规范的方式描述出来,作为今后各项工作的基础。
(2) 编写初步用户使用手册,着重反映被开发软件的用户功能界面和用户使用的具体要求,用户手册能强制分析人员从用户使用的观点考虑软件。
(3) 编写确认测试计划,作为今后确认和验收的依据。
(4) 修改完善软件开发计划。
在需求分析阶段对待开发的系统有了更进一步的了解,所以能更准确地估计开发成本、进度及资源要求,因此对原计划要进行适当修正。
4.简述结构化分析、设计的要点:结构化分析方法适合于数据处理类型软件的需求分析。
其要点是"自顶向下" 地开发系统,由整体到各组成部分,由表及里,由抽象到具体,逐步求精.(1)模块化(2)由顶向下,逐步求精.(3)上层模块分解为下层模块,有三种不同的结构形式,即顺序结构,选择结构和循环结构.5.数据字典包含哪些主要内容?数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分.据字典内容包括:数据库中所有模式对象的信息,如表、视图、簇、及索引等。
分配多少空间,当前使用了多少空间等。
列的缺省值。
约束信息的完整性。
用户的名字。
用户及角色被授予的权限。
用户访问或使用的审计信息。
其它产生的数据库信息。
6.软件测试的目标是什么,有哪几种主要有测试方法?软件测试的目标:(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。
软件测试的方法有动态测试、静态测试和正确性证明3种。
7.白盒测试主要有哪些覆盖?语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖8、选择一种程序设计语言的主要有哪些依据?为了使程序容易测试和维护以减少生命周期的总成本,选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的语言应该有良好的独立编译机制。
上述这些要求是选择语言的理想标准,但是在实际选用语言时不能仅仅考虑理论上的标准,还必须同时考虑实用方面的各种限制。
(1)系统用户的要求(2)可以使用的编译程序(3)可以得到的软件工具(4)系统规模(5)程序员的知识(6)软件可移植性要求(7)软件的应用领域9.软件的维护的目标是什么,有哪几种维护类型?纠正在使用过程中暴露出来的错误而进行的改进性维护,适应外部环境的变化而进行的适应性维护,改进原有的软件而进行的完善性维护,以及改进将来的可维护性和可靠性而进行的预防性维护。
软件维护的分类:软件维护主要划分为纠错性维护、适应性维护和完善性维护。
(1)纠错性维护。
由于前期的测试不可能揭露软件系统中所有潜在的错误,用户在使用软件时仍将会遇到错误,诊断和改正这些错误的过程称为纠错性维护。
(2)适应性维护。
由于新的硬件设备不断推出,操作系统和编译系统也不断地升级,为了使软件能适应新的环境而引起的程序修改和扩充活动称为适应性维护。
(3)完善性维护。
在软件的正常使用过程中,用户还会不断地提出新的需求。
为了满足用户新的需求而增加软件功能的活动称为完善性维护。
10.简述提高软件质量的主要措施。
复审:是在软件生命周期每个阶段结束之前,都采用一定的标准对该段产生的软件配置成分进行严格的正式或非正式的检测。
复查:是检查已有的材料,以断定在软件生命周期某个阶段的工作是否能够开始或继续。
管理复审:是向开发组织或使用部门的管理人员提供有关项目的总体状况、成本和进度等方面的情况,以便他们从管理角度对开发工作进行审查。
测试:包括测试计划、测试过程和测试结果3个阶段。
11.面向对象如何实现模块独立性,其偶合和内聚的含义是什么?因为对象是由数据及可以对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作。
因此,对象内部各种元素彼此结合得很紧密。
内聚性相当强,由于完成对象所需要的元素(数据和方法)基本上都被封装在对象内部,它与外界的联系自然就比较少。
因此,对象之间的耦合通常比较松。
总之,面向对象使用对象、类、继承和消息的方法,既使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信来实现模块的独立性。
12.面向对象和面向过程软件工程有哪些区别?(1)面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
(2)面向过程是把一件事一项工程分解成为一个个小的功能,用一个个函数来实现.面向对象是把事情看成是一个个小的对象组成的,或者说一个个小部分组成的,这些对象之间的相互关系,构成了整个项目. 在面向对象的思想中,万物皆对象。
而"类",就是对象的抽象或者说是概括。
13.简述对象、类、消息、方法的基本概念。
(1)对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
(2)类是具有相同或相似性质的对象的抽象。
对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
(3)对象之间进行通信的结构叫做消息。
在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。
发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。
一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。
(4)类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。
14.简述面向对象分析设计的三个模型。
答:三个模型:对象模型、动态模型、功能模型(1)对象模型描述系统的静态结构,包括类和对象,它们的属性和操作,以及它们之间的关系。
构造对象模型的目的在于找出与应用程序密切相关的概念。
对象模型用包含对象及对象的关系图表示。
(2)动态模型着重于系统的控制逻辑,考察在任何时候对象及其关系的改变,描述这些涉及时序和改变的状态。
动态模型包括状态图和事件跟踪图。
状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为。
事件跟踪图则侧重于说明系统执行过程中的一个特点“场景”,也叫做脚本(scenarios),是完成系统某个功能的一个事件序列。
脚本通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件。
(3)功能模型着重于系统内部数据的传送和处理。
功能模型表明,通过计算,从输出数据能得到什么样的输出数据,但不考虑参加计算的数据按什么时序执行。
功能模型由多个数据流图组成,它们指明从外部输出,通过操作和内部存储,直到外部输出的整个数据流情况。
功能模型还包括了对象模型内部数据间的限制。
功能模型中的数据流图往往形成一个层次结构,一个数据流图的过程可以由下一层的数据流图作进一步的说明。
1.什么是软件工程?目前有哪几种主要的软件工程方法?概括地说,软件工程是指导计算机软件开发和维护的一门工程学科.采用工程的概念、原理、技术、和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
但软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自己的定义。
主要有传统方法也称为经典软件工程方法或生命周期方法或结构化范型和面向对象方法。
2、流程图与数据流图有什么主要区别?(1)数据流图(date flow diagram , DFD),是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是从数据的角度来描述一个系统的;而流程图则是从对数据加工的角度来描述系统的;(2)数据流图中的箭头是数据流,而流程图中的箭头则是控制流,它表达的是程序执行的次序;(3)数据流图适合于宏观地分析一个组织业务概况,而程序流程图只适合于描述系统中某个加工的执行细节。
(4)数据流程图应该重点描述了数据加工的过程,主要是模块内部,数据流图则是描述模块之间的关系。