软件工程重点内容

  1. 什么是软件?软件有哪些组成?各组成的定义和意义是什么?
答:软件是一个抽象的逻辑产品,复杂的脑力劳动的结果,没有明显的制造过程,不会磨损,老化,维护困难。
软件 = 程序 + 数据 + 文档,
程序(program)是按用户需求编制的指令序列,表明软件做什么。
数据(data)是使程序能正常操纵信息的数据结构,是程序加工的材料和结果。
文档(document)是与程序开发,维护和使用有关的图文资料。
  1. 什么是软件危机?软件危机有哪些主要表现?如何才能消除软件危机?
答:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件开发成本和进度估计常常很不准确
用户对“已完成”的软件系统不满意
软件产品的质量往往靠不住
软件常常是不可维护的
软件通常没有适当的文档资料	
软件成本在计算机系统总成本中所占的比例逐年上升
软件生产率的提高跟不上硬件和需求的发展,供不应求。
正确地认识计算机软件,即软件是程序、数据及相关文档的完整集合。
必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
应该推广使用从实践中总结出来的成功的技术和方法,并不断地探索和研究。
应该开发和使用更好的软件工具。
  1. 什么是软件工程?为什么要学习和应用软件工程?
答:采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
软件项目的开发其实是一个工程,整个开发过程是可以有效组织起来的;对于开发过程的各个阶段,已经有很多解决问题的最佳实践,学习有用的理论方法来帮助我们高效完成任务;学习与应用软件工程借助工具来协助管理,提升开发效率。
  1. 请详细描述软件工程的一个基本目标和三个要素。
答:质量保证;工具,方法,过程。
  1. 什么是软件生命周期? 软件一生有哪3个时期,哪8个阶段? 各阶段的核心任务是什么?
答:软件从定义、开发、使用和维护,到废弃的过程。
软件定义,软件开发,运行维护。
问题定义(用户需要解决什么问题),可行性研究(可以吗,值得吗),需求分析(软件必须做什么),总体设计(软件总体结构),详细设计(模块结构),编码和单元测试(写模块源码,并验证),综合测试(验证是否能够解决问题),维护(持久满足用户的需求)。
  1. 什么是软件过程? 用4个英语单词总结出来呢。
答:软件工程过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
Who,when,what,how。
  1. 什么是可行性研究?可行性研究的目的是什么?本质又是什么?可行性是指哪些方面的可行性(最主要的)?最好每一方面都能举例来说明。
答:当前情况下,研制的软件是否有必要,是否具有必要的条件。
目的:最小的代价,在最短的时间内,确定该项目是否可能开发、是否值得开发,从而能够避免盲目投资,减少不必要的损失。
本质:压缩简化了的系统分析和设计过程,就是在较高层次上以较抽象的方式进行系统的分析和设计的过程。
技术可行性:现有技术对系统功能和性能的支持;
经济可行性:成本-效益分析;
操作可行性:系统能否在用户组织内正常运作。
  1. 为什么要进行需求分析?通常对软件系统有哪些需求?
答:弄清用户对软件系统在功能和非功能(性能,环境,界面,接口,设计约束等)方面的全部确切要求,写出最终的《软件需求规格说明(SRS)》并严格复审。
功能需求,性能需求,可靠性和可用性需求,出错处理需求,接口需求,约束,逆向需求,将来可能提出的需求。
  1. 什么是模块?什么又是模块化?为什么软件设计要进行模块化?
答:模块是程序对象有名字的集合,如过程,函数,子程序,宏等,是构成软件系统结构的基本元素。
模块化是将系统划分为若干个模块,每个模块完成一个子功能,通过模块之间的联系又构成一个完整的软件整体。
模块化的目的将系统“分而治之”,从而能够降低问题的复杂性,使软件结构清晰,易阅读、易理解、易于功能测试和调试,因而有助于提高软件的可靠性。
  1. 软件设计过程中需要遵循哪些原则?请简要描述它们。
答:模块化:将系统划分为若干个模块,每个模块完成一个子功能,通过模块之间的联系又构成一个完整的软件整体;
抽象:抽出事物的本质特性而不考虑其细节;
逐步求精:逐步细化;
信息隐藏:指出一个模块内包含的信息,对于不需要这些信息的其他模块来说是不能访问的;
模块独立:模块化、抽象、逐步求精和信息隐藏等概念的综合,也是划分模块的基本标准。
  1. 什么是内聚?有几种内聚?如何区分它们?什么是耦合? 有哪7种耦合?如何区分它们?
答:内聚:衡量一个模块内部各成分间彼此结合的紧密程度;7种内聚;
(1) 偶然内聚。模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同
的功能,这种模块称为巧合强度模块。
(2) 逻辑内聚。这种模块把几种相关的功能组合在一起, 每次被调用时,由传送给模
块参数来确定该模块应完成哪一种功能
(3) 时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
(4) 过程内聚:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。
(5) 通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
(6) 顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。
(7) 功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。
耦合:是对模块间关联程度的度量;
(1) 内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合:一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重叠(只可能出现在汇编语言中);一个模块有多个入口。
(2) 公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
(3) 外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
(4) 控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合
(5) 标记耦合:一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。其实传递的是这个数据结构的地址;也就是地址传递。
(6) 数据耦合:指两个模块之间有调用关系,传递的是简单的数据值,一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的,相当于高级语言的值传递。
(7) 非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。
  1. 简述编码语言的发展与分类,如何选择编码语言?
答:最开始机器唯一能识别和执行的二进制面向机器的机器语言与机器语言一一对应的符号化表示语言的汇编语言用自然语言和数学语言描述处理过程的高级语言面向问题、面向事务的甚高级语言(4GL);总体上应适应详细设计的要求,并且有利于编码、测试和维护。具体包括:
1) 软件项目的应用领域;
2) 算法和数据结构的复杂性;
3) 软件性能等需求;
4) 软件运行环境;
5) 软件的可移植性;
6) 软件开发人员的素质。
  1. 什么是软件测试?软件测试的目的是什么?简述软件测试的6条基本原则。
答:软件测试:为了发现程序中的错误而执行程序的过程;
目的:发现程序中的错误;
基本原则:
(1) 所有测试都应该能追溯到用户需求。
(2) 应该远在测试开始之前就制定出测试计划。
(3) 把Pareto原理(二八原理)应用到软件测试中。
(4) 应该从“小规模”测试开始,并逐步进行“大规模”测试。
(5) 穷举测试是不可能的。
(6) 为了达到最佳的测试效果,应该由独立的第三方从事测试工作。
  1. 如何区分黑盒测试和白盒测试?全方位简述这两种测试方法的异同。
答:黑盒测试:根据软件产品的功能设计规格进行测试,证实每个实现了的功能是否符合要求;测试在软件的接口处进行,完全不考虑程序内部的逻辑结构和内部特征;黑盒测试又叫功能测试或数据驱动测试。
白盒测试:利用程序内部的逻辑结构及内部工作过程的有关信息,对程序的所有逻辑路径进行测试;通过在程序内部结构的不同点检查程序的状态,确定实际的状态是否与预期的状态一致,以证实每种内部操作是否符合设计规格要求,所有内部成分是否已经检查;又称为结构测试或逻辑驱动测试。
  1. 软件测试应该分为哪几个阶段?能简述每个阶段的测试对象、内容、依据及方法。
答:阶段:单元测试、集成测试、确认测试。
单元测试:单元测试是对软件中的基本组成单元进行测试,如一个模块、一个过程等等,它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件最基本组成单元的正确性。一般采用白盒测试技术。
集成测试:集成测试是在软件系统集成过程中所进行的测试,其主要目的是检验软件各单位之间的接口是否正确。一般采用渐增式测试方法。
确认测试:也称为验收测试。旨在向软件的购买者展示该软件满足其用户的需求。它的测试数据通常是系统测试的测试数据的子集。确认测试通常使用黑盒测试的方法。
  1. 什么是软件维护?软件维护在软件生命周期中的地位如何?软件维护的内容有哪些?
答:软件维护:在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。
地位:是软件生命周期的最后一个阶段。维护成本高,甚至可能会束缚住软件开发组织的手脚,使他们没有余力开发新的软件。
维护的内容:改正性维护,也就是诊断和改正在使用过程中发现的软件错误;适应性维护,即修改软件以适应环境的变化;完善性维护,即根据用户的要求改进或扩充软件使它更完善;预防性维护,即修改软件为将来的维护活动预先做准备。
  1. 什么是面向对象方法学?它有哪些优点?
答:面向对象的方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间与实现解法的解空间(也称问题域与求解域)在结构上尽可能一致。
优点在于:
1) 与人类习惯的思维方法一致:开发过程符合人们认识客观世界解决复杂问题时逐步深化的渐进过程;
2) 稳定性好:由于现实世界中的实体是相对稳定的,因此,以对象为中心构造的软件系统也是比较稳定的;
3) 可重用性好:对象是比较理想的模块和可重用的软件成分,面向对象的软件技术所实现的可重用性是自然的和准确的,是软件重用技术中最成功的一个;
4) 较易开发大型软件产品:可以把一个大型软件产品分解成一系列本质上相互独立的小产品来处理,降低了成本的同时提升了软件整体质量;
5) 可维护性好:原因在于稳定性较好、易修改、易理解、易于测试和调试。
  1. 面向对象分析需要建立哪三种模型?其中的核心是什么?简述三种面向对象模型的主要功能和主要工具。
答:三种模型:对象模型、动态模型、功能模型。核心为对象模型。
对象模型:是对模拟客观世界实体的对象以及对象彼此间关系的映射,描述了系统的静态结构。为建立动态模型和功能模型,提供了实质性的框架。工具:类图。
动态模型:动态模型表示瞬时的、行为化的系统“控制”性质,它规定了对象模型中的对象合法变化序列。工具:状态图。
功能模型:表示变化的系统的“功能”性质,指明了系统应该做什么,因此更直接地反映了用户对目标系统地需求。工具:用例图。
  1. 面向对象设计应该遵循哪些准则?简述每条准则的内容和遵循这些准则的必要性。
答:面向对象设计准则:
1) 模块化;把程序整体划分成一个个独立命名且可独立访问的完成单个子功能的模块。采用模块化,软件结构清晰,不仅容易设计也容易阅读和理解,有利于软件开发工程的组织管理
2) 抽象:抽出事物的本质特性,暂不考虑其细节,使设计从具体实现方法中超脱。包括程序抽象、数据抽象、参数抽象。
3) 信息隐藏:对象封装。有利于测试期间和以后的软件维护期间进行软件的修改。
4) 弱耦合:包括交互耦合、继承耦合。
5) 强内聚:包括服务内聚、类内聚、一般-特殊内聚。
6) 可重用:是提高软件开发生产率和目标系统质量的重要途径。
  1. 什么是OOA?OOA模型分为哪5个层次?这5个层次以一种什么样的层次结构组织?OOA的一般活动过程是哪几个?
答:OOA:面向对象分析,即抽取和整理用户需求并建立问题域精确模型的过程。
OOA的五个层次:主题层、类与对象层、结构层、属性层、服务层。
层次结构组织:像叠在一起的5张透明塑料片,它们一层比一层显现出对象模型的更多细节。
OOA的一般活动过程:5项活动:找出类与对象,识别结构,识别主题,定义属性,定义服务(这五项工作没有必要顺序完成)。OOA的大体过程:寻找类与对象,识别结构,识别主题,定义属性,建立动态模型,建立功能模型,定义服务。
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值