考研软件工程复试笔试面试详细问答
- 格式:docx
- 大小:27.35 KB
- 文档页数:15
一、判断题1、软件危机是指软件开发和维护过程中存在的周期长、成本高、质量低等问题()。
2、软件危机是指计算机硬件发展的太快,软件开发跟不上硬件的更新()3、软件工程是指以质量为核心,为经济的开发满足客户需求的软件而研究、建立和应用的系统化的、有规则的、可度量的、可控制的工程原则和方法。
()1、软件危机是指软件开发和维护过程中存在的周期长、成本高、质量低等问题()。
2、软件危机是指计算机硬件发展的太快,软件开发跟不上硬件的更新()3、软件工程是指以质量为核心,为经济的开发满足客户需求的软件而研究、建立和应用的系统化的、有规则的、可度量的、可控制的工程原则和方法。
()4、软件工程是指编制软件的工程项目。
()5、软件工程是一个零散的相关知识点的集合。
()6、软件工程包含软件过程、项目管理、开发方法、软件度量和开发工具等各相关方面的知识的有机组合()7、软件开发具有难以描述性()8、软件开发的质量保证主要是通过程序员的经验来保证的()9、软件满足客户需求的程度是衡量软件质量的最重要因素()10、项目管理的内容涉及人力资源管理、项目计划、风险管理、项目跟踪、质量保证、配置管理等方面()11、项目管理的内容涉计算机硬件管理和软件管理两方面( * )二、选择题1、下面描述哪些不属于软件的开发特性()A) 软件开发具有难以描述性 B) 软件开发缺乏可见性C) 软件开发具有独立性 D) 软件开发具有变化性2、下面描述中那些属于软件的开发特性()A) 软件开发具有风险性 B) 软件开发具有随意性C) 软件开发具有可描述性 D) 软件开发不具有变化性3、以下对于软件危机的描述正确的是()A) 软件危机是指软件开发过程越来越长 B) 软件危机是指软件开发成本越来越高C) 软件危机是指软件质量越来越低 D) 软件危机是指以上三项的综合4、软件危机的表现不正确的是()A) 缺乏计划性 B) 软件需求获取不充分、不准确C) 缺乏团队开发的合作 D) 开发过于规范5、软件危机的表现不正确的是()A) 缺乏良好的质量评测手段 B) 软件的可维护性C) 软件种类过少 D) 软件可复用性差6、有关软件工程的描述正确的是()A) 软件工程只包括软件的开发过程B) 软件工程涉及软件过程、项目管理、开发方法、开发工具甚至企业文化。
软件工程师面试题及答案在当今科技飞速发展的时代,软件工程师成为了备受追捧的职业之一。
而在求职过程中,面试是至关重要的环节。
以下为您呈现一些常见的软件工程师面试题及答案,希望能对您有所帮助。
一、技术类问题1、请简要介绍一下面向对象编程(OOP)的三大特性,以及它们在实际开发中的应用。
答案:面向对象编程的三大特性是封装、继承和多态。
封装是将数据和操作数据的方法封装在一个类中,以实现数据的隐藏和保护,提高代码的安全性和可维护性。
例如,将一个人的个人信息和相关操作封装在一个“Person”类中。
继承允许创建一个新类,从现有类继承属性和方法,实现代码的复用和扩展。
比如,从“Employee”类继承创建“Manager”类。
多态使得同一个方法在不同的对象中有不同的实现方式,增强了程序的灵活性。
比如,在一个图形绘制程序中,不同的图形类(如圆形、方形)都实现了“draw”方法,但具体的绘制方式不同。
2、谈谈你对数据库索引的理解,以及在什么情况下应该使用索引,什么情况下不应该使用?答案:数据库索引是一种用于提高数据检索速度的数据结构。
它类似于书籍的目录,通过索引可以快速定位到所需的数据。
在经常用于查询、连接和排序的列上应该使用索引,比如主键、外键、经常用于搜索的字段等。
然而,在数据量小的表、频繁更新的列、数据分布不均匀的列上不应该使用索引,因为创建和维护索引会带来额外的开销,可能会降低数据插入、更新和删除的性能。
3、解释一下什么是线程安全,以及如何实现线程安全?答案:线程安全是指多个线程同时访问和操作同一共享资源时,程序的执行结果是正确的,不会出现数据不一致或其他异常情况。
实现线程安全的方法有多种,比如使用同步关键字(如 synchronized )来锁定关键代码段,确保同一时刻只有一个线程能够访问共享资源;使用线程安全的集合类(如 ConcurrentHashMap )替代非线程安全的集合类;避免共享可变状态,尽量使用不可变对象等。
软件工程师面试题目及答案在软件工程师的面试过程中,面试官通常会提出一系列问题,以评估申请者的技术能力、专业知识和解决问题的能力。
本文将提供一些典型的软件工程师面试题目及其答案。
一、算法与数据结构1. 解释什么是时间复杂度和空间复杂度?如何分析算法的时间复杂度?时间复杂度是衡量算法执行时间的方法,用大O表示。
空间复杂度是衡量算法所需内存空间的方法,也用大O表示。
要分析算法的时间复杂度,我们可以通过计算算法中基本操作的执行次数来评估。
2. 请描述下常见的数据结构以及它们的特点。
常见的数据结构包括数组、链表、栈、队列、树和图等。
数组具有随机访问的特点,但插入和删除操作效率较低;链表可以高效地进行插入和删除操作,但随机访问的效率较低。
二、编程语言1. 请列举一些你熟悉的编程语言,并简要介绍它们的特点。
例如,Java是一种面向对象的编程语言,具有跨平台特性和丰富的类库;Python是一种简洁优雅的动态语言,以其易读易写的特点而受到广泛欢迎。
2. 你对面向对象编程有何了解?请解释继承、封装和多态的概念。
面向对象编程是一种编程思想,将问题抽象为对象,并通过对象之间的交互来解决问题。
继承是指一个类可以继承另一个类的属性和方法;封装是将数据和函数封装在一个单独的对象中,并对外提供公共接口;多态是指不同的对象对同一方法可以有不同的实现方式。
三、操作系统1. 解释进程和线程的概念,它们之间有何区别?进程是程序的执行实例,具有独立的内存空间和执行状态;线程是进程的一部分,多个线程可以共享进程的资源和上下文,线程之间的切换开销较小。
区别在于进程具有独立的资源和上下文,线程共享资源和上下文。
2. 什么是死锁?请描述一些常见的解决死锁问题的方法。
死锁是指在并发系统中,进程或线程之间因为相互等待资源而无法继续执行的状态。
常见的解决死锁问题的方法包括资源分级策略、避免策略和检测与解除策略。
四、数据库1. 请解释关系型数据库和非关系型数据库的概念,并列举几个常见的数据库产品。
软件工程师面试问题一、基本面试问题: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、软件危机是指计算机硬件发展的太快,软件开发跟不上硬件的更新()3、软件工程是指以质量为核心,为经济的开发满足客户需求的软件而研究、建立和应用的系统化的、有规则的、可度量的、可控制的工程原则和方法。
()1、软件危机是指软件开发和维护过程中存在的周期长、成本高、质量低等问题()。
2、软件危机是指计算机硬件发展的太快,软件开发跟不上硬件的更新()3、软件工程是指以质量为核心,为经济的开发满足客户需求的软件而研究、建立和应用的系统化的、有规则的、可度量的、可控制的工程原则和方法。
()4、软件工程是指编制软件的工程项目。
()5、软件工程是一个零散的相关知识点的集合。
()6、软件工程包含软件过程、项目管理、开发方法、软件度量和开发工具等各相关方面的知识的有机组合()7、软件开发具有难以描述性()8、软件开发的质量保证主要是通过程序员的经验来保证的()9、软件满足客户需求的程度是衡量软件质量的最重要因素()10、项目管理的内容涉及人力资源管理、项目计划、风险管理、项目跟踪、质量保证、配置管理等方面()11、项目管理的内容涉计算机硬件管理和软件管理两方面( * )二、选择题1、下面描述哪些不属于软件的开发特性()A) 软件开发具有难以描述性 B) 软件开发缺乏可见性C) 软件开发具有独立性 D) 软件开发具有变化性2、下面描述中那些属于软件的开发特性()A) 软件开发具有风险性 B) 软件开发具有随意性C) 软件开发具有可描述性 D) 软件开发不具有变化性3、以下对于软件危机的描述正确的是()A) 软件危机是指软件开发过程越来越长 B) 软件危机是指软件开发成本越来越高C) 软件危机是指软件质量越来越低 D) 软件危机是指以上三项的综合4、软件危机的表现不正确的是()A) 缺乏计划性 B) 软件需求获取不充分、不准确C) 缺乏团队开发的合作 D) 开发过于规范5、软件危机的表现不正确的是()A) 缺乏良好的质量评测手段 B) 软件的可维护性C) 软件种类过少 D) 软件可复用性差6、有关软件工程的描述正确的是()A) 软件工程只包括软件的开发过程B) 软件工程涉及软件过程、项目管理、开发方法、开发工具甚至企业文化。
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. 什么是面向对象软件工程?它与传统的软件工程有什么不同?
2. 描述一下面向对象的主要原则,如封装、继承和多态。
3. 解释一下类和对象的概念,以及它们在面向对象编程中的作用。
4. 什么是UML?它在面向对象软件工程中有什么作用?
5. 描述一下设计模式的概念,以及设计模式的重要性。
6. 什么是软件架构?描述一下软件架构的重要性。
7. 什么是敏捷开发?解释一下敏捷开发的主要原则。
8. 什么是测试驱动开发?它与传统的测试方法有什么不同?
9. 描述一下单元测试、集成测试和系统测试的概念,以及它们在软件测试中的作用。
10. 解释一下软件维护和重构的概念,以及它们在软件生命周期中的作用。
以上问题仅供参考,具体的复试问题可能会根据不同的学校和导师而有所不同。
建议考生在准备复试时,除了掌握基本概念和原则外,还要了解最新的发展趋势和实际应用情况。
软件工程师面试题(含答案)软件工程师面试题(含答案)作为软件工程师,面试是进入理想职位的一道门槛。
面试官常常通过技术问题来评估面试者的实际能力和知识水平。
在本文中,我们将介绍一些常见的软件工程师面试题,并给出详细的答案和解析。
一、数据结构与算法1. 请解释什么是数据结构?它在软件开发中的作用是什么?数据结构是一种组织和存储数据的方式,它决定了数据元素之间的关系。
在软件开发中,数据结构的选择可以直接影响程序的性能和效率。
合理选择和使用数据结构可以提高程序的执行效率,提高内存利用率,并降低算法的时间复杂度。
2. 请解释栈(Stack)和队列(Queue)的概念,并比较它们的差异。
栈是一种遵循先进后出(LIFO)原则的数据结构,只允许在栈顶进行插入和删除操作。
队列是一种遵循先进先出(FIFO)原则的数据结构,允许在队尾插入元素,在对头删除元素。
栈和队列的主要差异在于插入和删除操作的位置不同。
3. 请解释常见的排序算法,如冒泡排序、选择排序和快速排序,并比较它们的效率。
冒泡排序是一种简单的排序算法,它重复地比较相邻的两个元素,如果它们的顺序错误,则交换它们的位置。
选择排序是一种简单的排序算法,它每次选择最小的元素放到已排序序列的末尾。
快速排序是一种常用的分治法排序算法,它通过选择一个基准元素,将数据分为左右两个子序列进行递归排序。
相比于冒泡排序和选择排序,快速排序通常具有更高的效率。
二、编程语言与开发工具1. 请解释面向对象编程(OOP)的概念,并列举几种面向对象编程语言。
面向对象编程是一种编程思想,它将数据和操作数据的方法封装在一起,形成对象。
面向对象编程的核心概念包括封装、继承和多态。
常见的面向对象编程语言包括Java、C++、C#等。
2. 请解释什么是异常处理,为什么在开发过程中需要使用异常处理机制?异常处理是一种用于处理程序错误和异常情况的机制。
在开发过程中,不可避免会出现各种意外情况,如文件不存在、网络连接断开等。
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)数据流程图应该重点描述了数据加工的过程,主要是模块内部,数据流图则是描述模块之间的关系。