1、什么是软件工程?为什么会出现软件工程?
概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过实践考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。
2、软件工程的主要目标是什么?
软件工程的目标是经济地开发出高质量的软件。 ① 付出较低的开发成本 ② 达到要求的软件功能 ③ 取得较好的软件性能 ④ 开发的软件易于移植 ⑤ 需要较低的维护费用 ⑥ 能按时完成开发任务,及时完成开发任务,及时交付费用; ⑦ 开发的软件可靠性高成本、生产力和质量;
3、什么是软件工程方法学?软件工程的3要素(软件工程方法学的3要素)是什么?分别包含什么内容?
软件方法学(SoftWare Methodology)是以方法为研究对象的软件学科。主要涉及指导软件设计的原理和原则,以及基于这些原理、原则的方法和技术。狭义的也指某种特定的软件设计指导原则和方法体系。不论何种含义,其关注的中心问题是如何设计正确的软件和高效率地设计软件。
软件工程方法学包含3个要素:方法、工具和过程。
其中,方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题; 工具是为运用方法二提供的自动的或半自动的软件工程支撑环境; 过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
4、什么是软件过程?常见软件生命周期模型(课件中的前5类)的特点有哪些?
软件过程是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
瀑布模型
传统软件工程方法学的软件过程 , 基本上可以用瀑布模型来描述。
优点:
它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。虽然有不少缺陷但比在软件开发中随意的状态要好得多。
缺点: (1) 实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化而造成大的混乱。 (2) 经常情况下客户难以表达真正的需求,而这种模型却要求如此,这种模型是不欢迎具有二义性问题存在的。 (3) 客户要等到开发周期的晚期才能看到程序运行的测试版本,而在这时发现大的错误时,可能引起客户的惊慌,而后果也可能是灾难性的。 (4) 会经常在过程的开始和结束时碰到等待其他成员完成其所依赖的任务才能进行下去,有可能花在等待的时间比开发的时间要长。称之为“堵塞状态”。
它是软件工程中应用最广泛的过程模型,在软件工程中占有肯定和重要的位置。 (在可运行的软件产品交付给用户之前,用户只能通过文档来了解未来的产品是什么样的。开发人员和用户之间缺乏有效的沟通,很可能导致最终开发出的软件产品不能真正满足用户的需求 。)
快速原型模型
在进行了基本需求分析之后,快速开发出产品的原型,然后基于这个原型,同客户沟通、交流,更好地了解客户需求,不断修改这个原型,到了双方认可的程度,再做详细地分析、设计和编程,最终开发出令客户满意的产品。
原型是软件开发人员与用户沟通的强有力工具,因此有助于所开发出的软件产品满足用户的真实需求。
优点:
使用户能够感受到实际的系统,使开发者能够快速地构造出系统的框架。
缺点:
产品的先天性不足,因为开发者常常需要做实现上的折中,可能采用不合适的操作系统或程序设计语言,以使原型能够尽快工作。
增量模型
增量模型也称为渐增模型。
优点: (1) 人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人力实现下一个增量。 (2) 当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。 缺点: (1) 至始至终开发者和客户纠缠在一起,直到完全版本出来。 (2) 适合于软件需求不明确、设计方案有一定风险的软件项目。 该模型具有一定的市场。
螺旋模型
螺旋模型的基本思想是, 使用原型及其他方法尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。
螺旋模型所描述的软件过程主要适用于内部开发的大型软件项目。
优点:
对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。
A.有利于已有软件的重用 ; B.有助于把软件质量作为软件开发的一个重要目标 ; C.减少了过多测试或测试不足所带来的风险 ; D.软件维护与软件开发没有本质区别 。
缺点: (1) 需要相当的风险分析评估的专门技术,且成功依赖于这种技术。 (2) 很明显一个大的没有被发现的风险问题,将会导致问题的发生,可能导致演化的方法失去控制。 (3) 这种模型相对比较新,应用不广泛,其功效需要进一步的验证。 喷泉模型
迭代是软件开发过程中普遍存在的一种内在属性。在面向对象范型中,软件开发过程各阶段之间的迭代或同一阶段内各个工作步骤之间的迭代,比在结构化范型中更常见。
喷泉模型,是典型的面向对象生命周期模型,它充分体现了面向对象软件开发过程迭代和平滑过渡的特性。
优点:
喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
缺点:
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
5、在“快速原型”模型中软件原型的作用主要是什么?在哪类生命周期模型中引入了风险分析?哪类生命周期模型是典型的传统软件工程生命周期模型?哪类生命周期模型是典型的面向对象软件工程生命周期模型?
在“快速原型”模型中软件原型的作用主要是软件开发人员与用户沟通的强有力工具,因此有助于所开发出的软件产品满足用户的真实需求。
螺旋模型中引入了风险分析。螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。
瀑布模式是典型的传统软件工程生命周期模型。
喷泉模型是典型的面向对象软件工程生命周期模型。这种方法在开发的早期阶段定义了一系列面向问题的对象,并且在整个开发过程中不断充实和扩充这些对象。
题目1、 软件工程的基本目标,三要素及其具体内容。
目标: 1、付出较低的开发成本; 2、达到要求的软件功能; 3、取得较好的软件性能; 4、开发的软件易于移植; 5、需要较低的维护费用; 6、能按时完成开发任务,及时完成开发任务,及时交付费用; 7、开发的软件可靠性高成本、生产力和质量; 三要素:方法、工具和过程。
题目2、 软件生命周期各个模型及特点,适用场合。
软件生命周期由软件定义、软件开发和运行维护(也称之为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。
1) 瀑布模型:1.阶段间具有顺序性和依赖性;2.推迟实现的观点;3.质量保证的观点。瀑布模型的成功在很大程序上是由于它基本上是一种文档驱动的模型。 2) 快速原形模型:它可以快速建立起来在计算机上运行,它所能完成的功能往往是最终产品的一个子集,可以根据用户的需求和意见进行快速的修改。 3) 增量模型:用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。它可以分批地逐步向用户提交产品,整个软件产品被分解成许多个增量构件,开发人员一个构件接一个构件地向用户提交产品。 4) 螺旋模型:使用原形及其他方法来尽量降低风险,它是一个在每个阶段之前都增加了风险分析过程的快速原形模型。主要适用于内部开发的大规模软件项目。 5) 喷泉模型:喷泉模型各阶段相互重叠,反映了软件过程并行性的特点。主要用于采用对象技术的软件开发项目。
题目3、 软件工程和软件危机的关系是什么。
软件工程是为了解决软件危机而顺势兴起的一门工程学科。
题目4、 什么是软件原型,用在什么场合?
快速原型就是快速建立起来的旨在演示目标系统主要功能的程序。构建原型的要点是,它应该实现用户看得见的功能(例如屏幕显示或打印报表),省略目标系统的“隐含”功能(例如修改文件)。
快速原型应该具备的第一个特性是“快速”。快速原型的目的是尽快向用户提供一个可在计算机上运行的目标系统的模型,以便使用户和开发者在目标系统应该“做什么”这个问题上尽可能快地达成共识。因此,原型的某些缺陷是可以忽略的,只要这些缺陷不严重地损害原型的功能,不会使用户对产品的行为产生误解,就不必管它们。
快速原型应该具备的第二个特性是“容易修改”。如果原型的第一版不是用户所需要的,就必须根据用户的意见迅速地修改它,构建出原型的第二版,以更好地满足用户的需求。
题目5、 软件工程方法学。
软件工程方法包含3个要素:方法、工具和过程。 其中,方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题; 工具是为运用方法而提供的自动的或半自动的软件工程支撑环境; 过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
题目6、什么是软件危机?它有哪些典型表现?为什么会出现软件危机?
软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。
软件危机的典型表现: (1) 对软件开发成本和进度的估计常常很不准确。常常出现实际成本比估算成本高出一个数量级、实际进度比计划进度拖延几个月甚至几年的现象。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量。这些都降低了开发商的信誉,引起用户不满。 (2) 用户对已完成的软件不满意的现象时有发生。 (3) 软件产品的质量往往是靠不住的。 (4) 软件常常是不可维护的。 (5) 软件通常没有适当的文档资料。文档资料不全或不合格,必将给软件开发和维护工作带来许多难以想象的困难和难以解决的问题。 (6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。 (7) 开发生产率提高的速度远跟不上计算机应用普及的需求。 软件危机出现的原因: (1) 来自软件自身的特点 是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。 (2) 软件开发与维护的方法不当 忽视需求分析;认为软件开发等于程序编写;轻视软件维护。 (3) 供求矛盾将是一个永恒的主题 面对日益增长的软件需求,人们显得力不从心。
题目7、什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机?
1993年IEEE的定义:软件工程是:① 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;② 研究①中提到的途径。
软件工程的本质特征: (1) 软件工程关注于大型程序(软件系统)的构造 (2) 软件工程的中心课题是分解问题,控制复杂性 (3) 软件是经常变化的,开发过程中必须考虑软件将来可能的变化 (4) 开发软件的效率非常重要,因此,软件工程的一个重要课题就是,寻求开发与维护软件的更好更有效的方法和工具 (5) 和谐地合作是开发软件的关键 (6) 软件必须有效地支持它的用户 (7) 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人(完成一些工作) 消除软件危机的途径: (1) 对计算机软件有一个正确的认识(软件≠程序) (2) 必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目 (3) 推广使用在实践中总结出来的开发软件的成功技术和方法 (4) 开发和使用更好的软件工具
题目8、简述结构化范型和面向对象范型的要点,并分析他们的优缺点。
1、结构化范型
要点: (1) 采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。 (2) 把软件生命周期的全过程依次划分为若干个阶段,然后自上而下顺序地完成每个阶段的任务。 (3) 每一个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。 (4) 在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审,审查的一条主要标准就是每个阶段都应该交出“最新式的”(即和所开发的软件完全一致的)高质量的文档资料,从而保证在软件开发工程结束时有一个完整准确的软件配置交付使用。 优缺点:
把软件生命周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度;在软件生命周期的每个阶段都采用科学的管理技术和良好的技术方法,而且在每个阶段结束之前都从技术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作,这就使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性。总之,采用生命周期方法学可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。
遵循“程序=数据结构+算法”的思路,把程序理解为由一组被动的数据和一组能动的过程组成。编程时,先设计数据结构,再围绕数据结构编写其处理过程。程序运行后,获得预期的运算结果或正确的操作,以满足程序功能的需求。对于比较大的程序,必须先进行功能分解,把较小的功能编写为子程序。程序调用子程序、子程序调用子子程序,直至最终将程序做成由一组大小适中、层层调用的模块所构成的应用程序系统。
在客观事物中,实体的内部“状态”(一般用数据表示)和“运动”(施加于数据的操作)总是结合在一起的,当结构化范型的软件模型被人为地构造为偏离客观实体本身的模型。随着程序规模的扩大,这类编程范型的缺陷越来越明显,在错综复杂的调用关系下,即使功能可以满足,性能也不容易满足,使程序难于维护和移植。因此,这类范型通常只用于开发代码在50,000行以下、不轻易更改的应用程序。
2、面向对象范型
要点:
(1) 把对象作为融合了数据及在数据上的操作行为的统一的软件构件。 (2) 把所有对象都划分成类; (3) 按照父类与子类的关系,把若干个相关类组成一个层次结构的系统; (4) 对象彼此间仅能通过发送消息互相联系。 优缺点:
出发点和基本原则是尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识实践解决问题的方法与过程,从而使描述问题的问题空间与实现解法的解空间在结构上尽可能一致。
用面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过程。面向对象方法在概念和表示方法上的一致性,保证了在各项开发活动之间的平滑(即无缝)过渡。面向对象方法普遍进行的对象分类过程,支持从特殊到一般的归纳思维过程;通过建立类等级而获得的继承性,支持从一般到特殊的演绎思维过程。
正确地运用面向对象方法学开发软件,则最终的软件产品由许多较小的、基本上独立的对象组成,每个对象相当于一个微型程序,而且大多数对象都与现实世界中的实体相对应,因此,降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。对象是相对独立的实体,容易在以后的软件产品中重复使用,因此,面向对象范型的另一个重要优点是促进了软件重用。面向对象方法特有的继承性和多态性,进一步提高了面向对象软件的可重用性。