软件工程复试面试问题总结(一)
仅仅只收集一部分
软件=程序+数据+系列文档
软件危机是什么?
软件危机是指软件在开发和维护的过程中出现的一系列严重的问题。
两个问题:
一是如何开发软件,如何满足对软件日益增长的需求。
二是如何维护数量不限已经膨胀的已有软件。
软件危机的表现
软件的开发成本和进度估计不准确。
用户对已经开发出来的软件不满意。
软件没有合适的文档资料。
软件的成本在公司的总成本中逐年上升。
软件产品的质量常常不可靠。
软件常常是不可维护的。
软件危机出现的原因
一是指软件生产自身存在的复杂性。
二是指与软件开发过程中使用的方法和技术有关。
软件工程?
采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而验证正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济的开发处高质量的软件并有效地维护它。
软工方法学三要素是什么?
软工方法学三要素:
1、方法(指的是开发方法)
2、工具(支持方法的工具)
3、过程(管理过程)
软件的生命周期?
软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期。软件生存周期包括:
(1)问题定义:弄清"用户需要计算机解决什么样的问题”,提出"系统目标和范围的说明“,提交用户审查和确认。
(2)可行性分析:把待开发系统的目标以明确的语言描述出来,并从经济、技术、法律等多个方面进行可行性分析。
(3)需求分析:弄清用户对软件系统的全部需求,编写需求规格说明书和初步的用户手册,提交评审。
(4)开发阶段:设计、实现(完成源程序的编码)、测试
(5)维护:改正性维护(由于开发测试的不彻底、不完全),适应性维护(适应环境变化),完善性维护(使用过程中提出的一些建设性意见),预防性维护(改善软件系统的可维护性和可靠性)。
软件开发模型有哪些?
<**瀑布模型**>
思想:将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落
优点:1.奠定了软件工程方法的基础;
2.流水依赖,便于分工协作;
3.推迟物理实现,易于修改文档,有复审质量保证;
不足:与用户见面晚,成功率低,一般为25%
适用范围:适用与系统要求明确的系统,各种应用软件的开发均可适用
<**快速原型模型**>
思想:软件开发人员以用户需求出发,快速开发一个原型,以便向用户展示软件系统应有的部分或全部的功能和性能,在征求用户对原型的评价意见后,进一步使需求精确化、完全化,并据此改进、完善原型,如此迭代,直到软件开发人员和用户都确认软件系统的需求并达到一致的理解位置
优点:比瀑布模型更符合人们认识事物的过程和规律,使一种较适用的开发框架
适用:适用于那些不能预先确切定义需求的软件系统的开发
<**渐增模型**>
一次开发一个模块,当这个模块客户满意了之后,才进行下一个模块的开发。所以产品是以一次一个构建的方式开发的
<**螺旋模型**>
瀑布模型和原型模型的结合。
四部分组成:制定计划、风险分析、实施开发、客户评估
适用:需要具有相当丰富的风险评估经验和专门知识,价格昂贵,适用大型软件的开发
<**喷泉模型**>
以面向对象的软件开发方法为基础,以用户需求为动力,以对象来驱动的模型
<**V模型**>
通过开发和测试同时进行的方式来缩短开发周期
极限编程是什么?
极限编程(简称XP)是由KentBeck在1996年提出的,是一种软件工程方法学,是敏捷软件开发中可能是最富有成效的几种方法学之一。
“Extreme”(极限)是指,对比传统的项目开发方式,XP强调把它列出的每个方法和思想做到极限、做到最好
极限编程以五种基本方式改进软件项目; 沟通,简单,反馈,尊重和勇气。极端程序员经常与他们的客户和程序员沟通。他们保持设计简洁。他们通过从第一天开始测试他们的软件获得反馈。他们尽早将系统交付给客户,并按照建议实施变更。每一个小小的成功都会加深对每个团队成员独特贡献的尊重。有了这个基础,Extreme程序员就能够勇敢地响应不断变化的需求和技术。
敏捷开发是什么?
敏捷开发(scrum)是一种软件开发的流程,强调快速反应、快速迭代、价值驱动。
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。
优点:
- 敏捷开发的高适应性,以人为本的特性。
- 更加的灵活并且更加充分的利用了每个开发者的优势,调动了每个人的工作热情。
缺点:
- 由于其项目周期很长,所以很难保证开发的人员不更换,而没有文档就会造成在交接的过程中出现很大的困难。
内聚和耦合的含义
(1)内聚:指块内联系,即模块的功能强度的度量;
在模块划分时,要遵循“一个模块,一个功能”的原则,尽可能模块达到功能内聚。
(2)耦合:指块间联系,即软件系统结构中各模块间相互联系的紧密程度的度量。
若模块间存在耦合,应尽量使用数据耦合,少用控制耦合,慎用或者有控制地使用公共耦合,并限制公共耦合的范围,尽量避免内容耦合。
高内聚低耦合的系统具有更好的重用性、维护性、扩展性,可以更高效地完成系统的维护开发。
黑盒测试和白盒测试
1、黑盒测试:把程序看作一个黑盒子,完全不考虑程序的内部逻辑结构和内部特性。它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。黑盒测试又称为功能测试或基于规格说明书的测试。
黑盒测试方法:等价类划分法、边界值分析法、错误推测法、因果图法、功能图法和接口测试法。
2、白盒测试:检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。
是把测试对象看成一个玻璃盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计测试用例对程序所有的逻辑路径进行测试,通过在不同点检查程序的状态,确定实际状态是否与预期一致。白盒测试又称为结构测试或基于程序的测试。
白盒测试主要包含六种测试方法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
软件维护的困难?
软件维护工作的困难性表现在一下几个方面:
1、理解别人写的程序困难,困难程度随软件配置成分减少而迅速增加;
2、要维护的软件往往没有合适的文档或资料不全;
3、绝大多数软件设计时没有考虑将来的修改;
4、软件维护不是一项吸引人的工作;
5、软件人员经常流动,维护不能依靠原开发人员;
6、追踪软件的建立过程非常困难,或根本做不到。
软件工程方法学一般有哪两种?
结构化方法学(又称为生命周期方法学):强调自顶向下顺序完成软件开发的任务。
结构化方法学中有三种基本控制结构:1.顺序2.选择3.循环
面向对象方法学:尽量模拟人类习惯的思维方式去开发。
简述结构化分析、设计的要点
结构化分析方法适用于数据处理类型软件的需求分析。
其要点是 “自顶向下” 地开发系统,由整体到各组成部分,由表及里,由抽象到具体,逐步求精。
(1)模块化
(2)自顶向下
(3)上层模块分解为下层模块,有三种不同的结构形式:即顺序结构、选择结构、循环结构。
面向对象的基本概念
(1)对象:对象是人们要进行研究的任何事物。从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
(2)类:类是具有相同或相似性质的对象的抽象。类的具体化就是对象,也可以说类的实例是对象。
(3)消息:对象之间进行通信的结构叫做消息。消息包含接收对象去执行某种操作的信息。
(4)方法:类中操作的实现过程叫做方法。一个方法有方法名、参数、方法体。
面向对象和面向过程软件工程有哪些区别
(1)面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。
(2)面向过程是把一件事一项工程分解成为一个个小的功能,用一个个函数来实现。
面向对象是把事情看成是一个个小的对象组成的,这些对象之间的相互关系,构成了整个项目。在面向对象的思想中,万物皆对象。而“类”,就是对象的抽象或者说是概括。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)