软件工程:13个关键问题解答

发表时间: 2020-05-02 10:02

1、软件工程为什么要强调规范化和文档化?

软件工程强调规范化和文档化。规范化的目的是使众多的开发者遵守相同的规范,使软件生产摆脱个人生产方式,进入标准化、工程化的生产方式。

文档化是将软件的设计思想、设计过程和实现过程完整地记录下来,以便于后人的使用和维护,在开发过程中各类相关人员借助于文档进行交流和沟通。另外,在开发过程中产生的各类文档使得软件的生产过程由不可见变为可见,便于管理者对软件生产进度和开发过程进行管理。在用户最终验收时可以通过对提交的文档进行技术审查和管理审查,保证软件的质量。



2、软件工程层次是如何划分的?

软件工程的内容具有层次化结构,最底层是质量保证层,中间是过程层和方法层,最上层是工具层。

如:工具层,方法层,过程层,质量保证层

其中过程层定义了一组关键过程域,目的是保证软件开发过程的规范性和可控性。方法层提供了软件开发的各种方法,包括如何进行软件需求分析和设计,如何实现设计,如何测试和维护等方法。

软件工程的研究内容具有层次化结构,它的最底层是质量保证层,中间是过程层和方法层,最上层是工具层。

全面的质量管理和质量需求是推动软件工程过程不断改进的动力,正是这种改进的动力导致了更加成熟的软件工程方法不断涌现。过程层定义了一组关键过程域,目的是保证软件开发过程的规范性和可控性。方法层提供了软件开发的各种方法,包括如何进行软件需求分析和设计,如何实现设计,如何测试和维护等方法。工具层为软件工程方法和过程提供了自动或半自动的支撑环境。目前市场上已经有许多不错的软件工程工具,应用效果良好。

3、什么是软件生存周期模型?

软件生命周期模型反映的是软件开发过程、活动和任务的结构框架。它能够清晰、直观地表达软件开发全过程,明确规定要完成的主要活动和任务。对于不同的软件系统,可能采用不同的开发方法,使用不同的程序设计语言、不同的管理方法和手段、以及各种具有不同技能的人员参与工作,但是对于软件生命周期模型来说都应该是稳定有效和普遍适用的。

到目前为止,已经提出了多种模型,主要有瀑布模型、演化模型、喷泉模型、螺旋模型、智能模型。模型的选择是基于软件的特点和应用领域。

4、软件工程的发展至今为止经历了哪几个阶段?各阶段的特征是什么?

软件工程经历了以下几个发展阶段:结构化程序设计、面向对象的程序设计和系统分

析、基于组件软件系统开发等三个阶段。

结构化程序设计:

世纪年代中叶到的上代初,程序模块概念的提出,逐渐形成了结构化程序设计的思想。模块是指一组逻辑相关、功能聚合的子例程或函数,这些子例程或函数可以改变程序的状态或进行数据的特定计算处理。模块化的思想强调模块的独立性,将程序系统分割为一组松散连接的组成模块,有利于大型软件

系统的小组开发模式的实施,可以有效减小和控制系统的复杂性。

面向对象的程序设计:

模块发展的下一阶段是抽象数据类型发展的高级阶段是面向对象的程序设计和系统分析。面向对象的程序设计以对象作为程序设计的基本构件,整个程序由不同的对象组成,各对象分工执行各自在系统中负责完成的任务,并通过相互协作实现系统的整体任务。面向对象的程序设计和系统分析主要任务是发现系统中的对象及对象其间的类层次关系和服务关系,将数据和对数据的处理封装在一个个的对象中,通过建立对象间的关系构造系统的整体任务求解模型。

基于组件软件系统开发:

组件化是软件技术发展到一定阶段的产物,是改善软件的可靠性、可维护性、可重用性行之有效的方法。

在20世纪70年代基本形成了软件工程的概念、框架、方法和手段,被称之为第一代软件工程,即传统软件工程。结构化分析、结构化设计和结构化编程方法是这个时期的代表。

80年代出现的Smalltalk 80程序设计语言标志着面向对象程序设计进入了实用阶段,从80年代中到90年代中,研究的重点转移到面向对象分析和设计上来,从而演化成软件工程的第二代,称之为对象工程。

90年代后期,软件工程的一个重要进展就是基于组件的开发方法。为了提高软件生产力,避免草率地开发应用程序,尽可能地利用可复用组件来组装成新的应用软件系统。到目前为止,组件技术的研究和发展形成了新一代软件工程,即第三代软件工程,也有不少人称之为组件工程。

软件工程至今还在不断发展,无论是组件工程还是对象工程都在不断发展,即使是传统软件工程的一些基本概念、框架,也随着技术的进步在发生变化。总之,软件工程代与代之间并没有鸿沟,它们不仅交叉重叠,也携手并进。

5、根据相关的法律,对于侵犯软件著作权的行为,根据情节应当给予什么处罚?


对于侵犯软件著作权的行为,要根据情况承担停止侵害、消除影响、赔礼道歉、赔偿损失等民事责任;损害社会公共利益的,由著作权行政管理部门责令停止侵权行为,没收违法所得,没收、销毁侵权复制品,并处罚款;

情节严重的,著作权行政管理部门可以没收用于制作侵权复制品的材料、工具、设备等;触犯刑律的,依法追究刑事责任。

6、职业化软件工程师十大忌讳是哪些?

  1. 对外交付半成品
  2. 不遵守标准和规范
  3. 不积极帮助他人
  4. 版权意识不敏感
  5. 对待计划不严肃
  6. 公事私事相混淆
  7. 不注意知识更新
  8. 不主动与人沟通
  9. 不遵守职业规则
  10. 不够诚实和正直

7、什么叫职业化?职业化软件工程师的必备条件是什么?


所谓职业化,简单说就是能胜任工作,让人放心。

“能胜任工作”,就需要具备相应的专业技能、知识和经验;“让人放心”意味着很多,包括遵守行业成文的或未成文的规则和规范,积极有效地和同事沟通,确保自己的工作产品是大家所期望的,尽可能地向客户提供最专业的服务和产品。自律、沟通和技能是成为职业化软件工程师的必要条件。

自律:

软件区别于其它传统产品,软件只有安装运行后,人们才看见它的界面;开发进度也是肉眼看不见的,很难准确判断开发任务完成了80%还是30%;质量更是不可见的,只有通过非常认真、全面的测试和度量,才能了解代码的质量。一个程序员认真思考问题时的模样和他发呆时的表现一样,外人很难判断。因此说,“自律”对软件工程师来说更为重要。

沟通:

软件的规模越来越大,而且处在不断的变化过程中。因此需要软件工程师进行大量书面的、口头的、或面对面的沟通。大到产品的整体功能和性能要求,小到程序的结构,甚至一个函数、一个变量的含义都需要沟通。沟通有标准化的、可视化的工具语言,如UML。软件工程强调文档的重要性就是以文档作为沟通的工具,与客户沟通明确用户需求;工程师之间沟通明确设计方案,市场人员和工程师沟通确定产品特征。软件工程的实践表明,缺乏主动沟通,往往导致整个团队的技术方案出现偏差,使整个项目的进度受到影响。

技能:

软件工程师常常强调自己掌握的编码技术,往往忽视用户需求和软件开发的规范。作为职业化软件工程师,需求分析、软件设计、软件构造、软件测试、软件维护、配置管理、软件项目管理、软件过程改进、软件工具和方法以及软件质量保证等是更为重要的技能。


8、请比较软件生命周期瀑布模型和螺旋模型的特点。

瀑布模型有什么特点?

1、其核心思想是按工序将问题简单化。

2、采用结构化的分析与设计方法将逻辑实现以物理实现分开。

3、瀑布型将软件生命周期划分为软件计划、需求分析和定义(前两者为定义阶段)、软件设计、软件编码、软件测试(前面为开发阶段)、软件运行维护(最后一个为维护阶段)6个阶段。

优点:

可强迫开发人员采用规范的方法(例如,结构化技术);

严格地规定了每个阶段必须提交的文档;

要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

螺旋模型的主要特点和优点有:

1)支持用户需求的动态变化。

2)原型可看作形式的可执行的需求规格说明,易于为用户和开发人员共同理解,还可作为继续开发的基础,并为用户参与所有关键决策提供了方便。

3)螺旋模型特别强调原型的可扩充性和可修改性,原型的进化贯穿整个软件生存周期,这将有助于目标软件的适应能力。

4)为项目管理人员及时调整管理决策提供了方便,进而可降低开发风险。

瀑布模型最重要的特点:只有当一个阶段的任务完成、交付相应的文档、通过审查小组的审查合格后,才能开始下一个阶段的工作。瀑布模型的优点:有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究,从而提高了大型软件项目开发的质量和效率。瀑布模型的缺点:(1)开发过程一般不能逆转,否则代价太大;(2)实际的项目开发很难严格按该模型进行;(3)客户往往很难清楚地给出所有的需求,而该模型却要求如此。(4)软件的实际情况必须到项目开发的后期客户才能看到,这要求客户有足够的耐心。

螺旋模型的主要优势在于它是风险驱动的,每个方案在实施前都要经过风险分析。如果风险过大,则项目应该停止,或改变方案。螺旋模型的优点:(1)设计上的灵活性,可以在项目的各个阶段进行变更;(2)以小的分段来构建大型系统,使成本计算变得简单容易;(3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性;(4) 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。 螺旋模型的缺点:(1)采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失;(2)过多的迭代次数会增加开发成本,延迟提交时间。

9、指出瀑布模型中下列任务的顺序:验收测试,项目计划,单元测试,需求评审,成本估计,概要设计,详细设计,系统测试,设计评审,编码,需求规格说明书。

项目计划->成本估计->需求规格说明书->需求评审->概要设计->详细设计->设计评审->编码->单元测试->系统测试->验收测试

10、什么是软件危机?软件危机表现在哪几个方面?

由于软件具有上述这些特点,长期以来一直没有发明一种高效的开发方法,从而导致软件生产效率非常低,交付期一拖再拖,最终交付的软件产品在质量上很难保障。这种现象早在20世纪60年代被定义为“软件危机”。它的具体表现如下:

1) “已完成”的软件不满足用户的需求。

2) 开发进度不能保障,交付时间一再拖延。

3) 软件开发成本难以准确估算,开发过程控制困难造成开发成本超出预算。

4) 软件产品的质量没有保证,运算结果出错、操作死机等现象屡屡出现。

5) 软件通常没有适当的文档资料,或文档与最终交付的软件产品不符,软件的可维护程度非常低。

11、试述产生软件危机的主要原因?

导致软件危机的主要原因有:

(1)软件日益复杂和庞大

(2)软件开发管理困难和复杂

(3)软件开发技术落后

(4)生产方式落后

(5)开发工具落后

(6)软件开发费用不断增加

软件的特点是导致软件危机的客观因素,而软件开发和软件维护过程中使用的不正确方法是主观因素,主要表现为:忽视软件开发前期的调研和分析工作,没有统一的、规范的方法论指导,文档资料不齐全,忽视人员之间的交流,忽视测试工作,轻视软件的维护。

12、什么是软件工程?软件工程的目标是什么?

什么是软件工程?软件工程的目标是什么?

软件工程的定义:

软件工程是一门旨在生产无故障的、及时交付的、在预算之内的和满足用户需求的软件的学科。本质上,软件工程就是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理方法和先进软件开发技术结合起来,运用到软件开发和维护过程中,解决软件危机。

1、将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护过程,也就是说,将工程化应用于软件开发和管理之中;

2、对1中所选方法的研究。

软件工程的目标:

实现预期的软件功能,达到较好的软件性能,满足用户的需求;

增强软件过程的可见性和可控性,保证软件的质量;

提高所开发软件的可维护性,降低维护费用;

提高软件开发生产率,及时交付使用;

合理预算开发成本,付出较低的开发费用。

软件工程是:① 将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护过程,也就是说将工程化应用于软件开发和管理之中;② 对①中所选方法的研究”。

软件工程旨在开发满足用户需要、及时交付、不超过预算和无故障的软件,其主要目标如下:

a) 实现预期的软件功能,达到较好的软件性能,满足用户的需求。

b) 增强软件过程的可见性和可控性,保证软件的质量。

c) 提高所开发软件的可维护性,降低维护费用。

d) 提高软件开发生产率,及时交付使用。

e) 合理预算开发成本,付出较低的开发费用。

13、职业化软件工程师要注意的问题是什么?

职业化软件工程师要注意的十大问题:

  1. 高质量地完成任务
  2. 遵守行业标准,不能肆意按照自己的想象来发挥
  3. 积极帮助他人
  4. 版权意识敏感
  5. 严格遵守计划
  6. 公私分明
  7. 注意知识更新
  8. 善于沟通
  9. 遵守职业规则⑩诚实和正直。