软件工程1

  1. 请解释什么是用例模型,用例图有哪些元素,用例描述需要描述哪些内容?

用例模型由用力图组成,它是系统用例图的集合,是对系统从宏观角度的确定描述。

元素:执行者、用例、关系、用例描述。简要说明条件、前置条件、后置条件、基本事件流、其它事件流、异常事件流

  1. 软件测试与软件质量保证的区别是什么?

软件测试和软件质量保证是软件质量工程的两个不同层面的工作。软件测试只是软件质量保证工作的一个重要环节。质量保证的工作是通过预防、检查和改进来保证软件质量。测试虽然也与开发过程紧密相关,但它所关心的不是过程的活动,相对的是关心结果。

  1. 简述详细设计阶段的主要任务是什么?
  1. 为每个模块进行详细的算法设计。(2)为模块内的数据结构进行设计。(3)对数据结构进行物理设计,即确定数据库的物理结构。(4)其他设计:根据软件系统的类型,还可能要进行以下设计:①代码设计。②输入/输出格式设计。③人机对话设计。(5)编写详细设计说明书。(6)评审。
  1. 简述项目管理的五个阶段。

启动:是一个新的项目识别与开始的过程,此阶段非常重要,决策失误可能会造成巨大损失,重视该过程是保证项目成功的首要步骤。计划:通过对项目的范围、任务分解、资源分析等制定一个科学的计划,能使项目团队的工作有序的进展。实施:一般指项目的主体内容执行过程,实施包括项目的前期工作,因此不仅要在具体实施过程中注意范围变更、记录项目信息、鼓励项目组成员努力完成项目,还要在开头与收尾过程中,强调实施的重点内容,如正式验收项目范围等。控制:是保证项目朝目标反向前进的重要过程,该过程要及时发现偏差并采取纠正措施,使项目进展朝向目标方向。收尾:包括对最终产品进行验收,形成项目档案吸取的教训等。

  1. 需求变更控制中应该注意什么?

(1)必须做好需求变更影响分析(2)再小的变更也要履行正式的变更流程(3)变更决策要慎重(4)必须做好变更的验证

6.什么是黑盒测试法,和白盒测试的区别是什么?

黑盒测试,又称功能测试,主要用于集成测试和确认测试阶段。它把软件看作一个不透明的黑箱子,完全不考虑(或不了解)软件的内部结构和处理算法,它只检查软件功能是否能按照软件需求说明书的要求正常使用,软件是否能适当地接收输入数据并产生正确的输出信息,软件运行过程中能否保持外部信息(例如文件和数据库)的完整性等。

白盒测试,又称结构测试,主要用于单元测试阶段。它的前提是可以把程序看成装在一个透明的白箱子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部逻辑设计测试用例,检测程序中的主要执行通路是否都能按预定要求正常工作。

白盒测试根据软件的内部逻辑设计测试用例,常用的技术是逻辑覆盖,即考察用测试数据运行被测程序时对程序逻辑的覆盖程度。主要的覆盖标准有 6 种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合条件覆盖和路径覆盖。

7.什么是软件测试?

在规定条件下对程序进行操作,以发现错误,对软件质量进行评估

8.在ATM系统中的“取款”用例,可以用事件流表述如下: (1)用户插入银行卡。 (2)输入密码。 (3)输入提款金额。 (4)提取现金。 (5)退出系统,取回银行卡。

其中,还有哪些备选流没有考虑到,请你说出至少3种可能情况。

  1. 无效的银行卡(2)密码错误(3)用户账户现金余额不足
  1. 什么是架构的设计模式?常见的设计模式有哪些?

架构模式是一个通用的、可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题。架构模式与软件设计模式类似,但具有更广泛的范围。

创建型模式:单例模式、工厂方法模式、抽象工厂模式、创建者模式、原型模式。

结构型模式:适配器模式、代理模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

  1. 什么是软件架构?进行软件架构设计的主要目的是什么?

软件架构指软件系统的顶层结构。系统由一群关联个体组成,以及个体运作和协作的规则。个体可以是子系统、模块和组件。软件架构的目的是解决复杂度。复杂度来源有很多,比如常见的有高性能、高可用、可扩展性、成本、安全、规模等。

  1. 简述类和类之间的关系有哪些,并举例说明?

继承:继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。实现:实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。依赖:依赖就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。关联:关联体现的是两个类之间语义级别的一种强依赖关系,比如我和我的朋友,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。聚合: 聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。组合:合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。

  1. 从软件用户对软件的实际需求来看,常见的需求有哪些种类?
  1. 常规需求:用户认为系统应该做到的功能或性能,实现越多用户会越满意。(2)期望需求:用户想当然认为系统应具备的功能或性能,但并不能正确描述自己想要得到的这些功能或性能需求。如果期望需求没有得到实现,会让用户感到不满意。(3)意外需求:意外需求也称为兴奋需求,是用户要求范围外的功能或性能(但通常是软件开发人员很乐意赋予系统的技术特性),实现这些需求用户会更高兴,但不实现也不影响其购买的决策。
  1. 软件生命周期有哪些阶段?
  1. 问题定义及规划阶段,主要确定软件的开发目的及其可行性,制定开发计划;2、需求分析阶段,对软件需要实现的各个功能进行详细分析;3、软件设计阶段,主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计;4、软件编码阶段;5、软件测试阶段,发现软件在整个设计过程中存在的问题并加以纠正;6、软件运行维护阶段,用于版本、产品上线(版本升级)、BUG修复。
  1. 需求获取的方式有哪些,请简要描述?

(1)访谈:访谈是需求获取的主要方式,通过当面交流和引导,获取有效信息,例如用户的痛点、用户希望解决的问题、达到什么目的等。(2)现场考察是最直接最有效的需求获取方式,深入现场,观察用户的使用场景和遇到的问题,挖掘潜在需求、分析用户的真正所需,必要时可录像或记录,以便后续深入分析。(3)资料查阅是指获取业务相关的资料文献,通过阅读资料挖掘相关的需求点,例如业务流程、SOP、操作手册等。(4)问卷调查适用于大范围的目标人员调查,可以收集到用户对软件的意见和建议,根据收集到的信息进行统计分析,有助于软件需求的挖掘。(5)市场调研和竞品分析有助于扩展需求、升级需求,学习市场上更好的产品和想法,在原需求的范围内进一步做优化和升级,获得客户的认可。

15.请举例描述一种你熟悉的面向对象设计原则?

开闭原则一个软件实体应当对扩展开放,对修改关闭,也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。

16.请举例描述一种你熟悉的设计模式?

工厂模式(Factory)定义一个用于创建对象的接口,让子类决定实例化哪一个类。

Factory Method 使一个类的实例化延迟到其子类。适用性当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。当类将创建对象的职责委托给个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。简单来说就是:在一个类返回一个实例化的对象,并且这个对象是你要使用的对象。

17.常用的软件测试方法有哪些?

按测试分类:黑盒测试、白盒测试、灰盒测试。是否执行代码:静态测试、动态测试。

从产品开发各个阶段:单元测试、集成测试、确认测试、系统测试、验收测试、回归测试

18.请描述什么是单元测试,其作用是什么?

单元测试:又称模块测试,是针对软件设计的最小单位----程序模块或功能模块,进行正确性检验的测试工作。其目的在于检验程序各模块是否存在各种差错,是否能正确地实现了其功能,满足其性能和接口要求。

19.什么是测试驱动开发?

是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。

  1. 什么是敏捷开发?

是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

  1. 什么是结对编程?

是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面。观察员当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。
结对编程是极端编程的组成部分。

  1. 什么是软件危机?你觉得如何避免软件危机?

是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

表现在:(1)对于软件开发的成本和进度的估计很不准确。(2)开发的软件产品不能完全满足用户要求,用户对已完成的软件系统不满意的现象常常发生。(3)开发的软件可靠性差。(4)软件通常没有适当的文档。(5)软件的可维护性差。(6)软件开发生产率提高的速度,远远跟不上计算机应用普及深入的趋势。

从软件开发的工程化方法入手,即用现代工程的概念原理、技术和方法去指导软件的开发、管理和维护,这就是软件工程思想和方法。具体措施:(1)使用好的软件开发技术和方法;(2)要有良好的组织、严密的管理,各类人员协同配合,共同完成任务;(3)使用好的软件开发工具,提高软件生产率;(4)建立严格的文档资料,重视软件开发过程的阶段评审。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值