软件工程综述.docx
- 文档编号:24560989
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:15
- 大小:544.37KB
软件工程综述.docx
《软件工程综述.docx》由会员分享,可在线阅读,更多相关《软件工程综述.docx(15页珍藏版)》请在冰豆网上搜索。
软件工程综述
软件工程综述
摘要:
本文简单介绍了软件工程。
分别从软件工程的定义、发展历程、危机及解决途径、软件过程的基本原理、软件工程包含的领域和生命周期模型等方面介绍。
从而对软件工程的基本内容有了初步了解。
关键词:
定义过程原理领域模型
1.引言:
软件工程(SoftwareEngineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。
它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。
在现代社会中,软件应用于多个方面。
典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。
同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等。
这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。
2.系统介绍
2.1软件工程的定义
概括地说,软件工程是指导计算机软件开发和维护的工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的科技方法结合起来,经济地开发出高质量的软件并有效地维护它,这就是软件工程。
下面给出软件工程的几个定义:
1983年IEEE(美国电气和电子工程师协会)给软件工程下的定义是:
“软件工程是开发、运行、维护和修复软件的系统方法。
”这个定义相当概括,它主要强调软件工程是系统方法而不是某种神秘的个人技巧。
Fairly认为:
“软件工程学是为了在成本限额以内按时完成开发和修改软件产品所需要的系统生产和维护技术及管理学科。
”这个定义明确指出了软件工程的目标是在成本限额内按时完成开发和修改软件的工作,同时也指出了软件工程包含技术和管理两方面的内容。
FritzBauer给出了下述定义:
“软件工程是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用的完善的工程化原则。
”这个定义不仅指出软件工程的目标是经济地开发出高质量的软件,而且强调了软件工程是一门学科,它应该建立并使用完善的工程化原则。
1993年IEEE进一步给出了一个更全面的定义。
软件工程是:
①把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;②研究①中提到的途径。
[1]
2.2软件发展及危机
2.2.1软件发展的历程
程序设计阶段计算机发展的早期阶段(20世纪50年代初期~20世纪60年代中期)。
在这个阶段硬件已经同用花,而软件的生产却是个体化。
程序系统阶段计算机系统发展的第二阶段(20世纪60年代中期~20世纪70年代末期)。
引入了人机交互的新概念。
出现了实时系统和第一代数据库管理系统。
软件工程阶段计算机系统发展的第三阶段(始于20世纪70年代中期)。
以软件的产品化、系列化、工程化、标准化为特征的软件产业发展起来,打破了软件生产的个体化特征,有了可以遵循的软件工程化得设计原则、方法和标准。
第四阶段有复杂操作系统控制的强大的桌面机、广域网络和局域网络,配以先进的软件应用已成为标准。
从技术的软件刚才阶段过渡到社会信息化得计算机系统阶段。
随着第四阶段的进展,一些新技术开始涌现。
[2]
2.2.2软件危机
⑴由于缺乏软件开发经验和科学的理论指导,开发者不能准确地估计软件开发的成本和进度。
所制定的成本规划可能大大低于实际的成本,实际的开发进度也可能要比计划的慢,为了赶进度往往就会牺牲软件的质量。
⑵由于缺乏使开发人员与用户进行交流的有效机制,开发人员常会犯闭门造车的错误。
从而会造成用户对已完成的软件系统不满意。
⑶由于测试工作不够充分,又没有好的软件质量保证技术,导致提交给用户的软件质量不高。
⑷软件的可维护性差,程序的错误难以改正。
程序的可移植性差,很难适应不同的运行环境。
软件的可重用性差,大量的软件人员在重复开发。
⑸开发过程缺乏标准和规范的指导,各个开发组织都有自己的开发方法,开发组织之间进行工作交接的流程也不规范。
⑹软件开发生产率的提高速度难以满足对软件需求的增长速度,软件产品供不应求。
⑺由于软件开发和维护方法不当,使得软件成本居高不下,过高的成本已严重制约了软件的开发。
造成软件危机的原因很多,归纳起来主要有两个方面:
一是与软件本身的特点有关,二是与软件开发与维护方法不当有关。
2.2.3解决软件危机的途径
⑴采用工程化方法来开发和维护软件。
软件开发不应只是个体化的劳动,而应该是由组织良好、管理严密、各类人员共同配合完成的一个工程项目,因此应该注意吸收和借鉴从事其他工程项目的行之有效的科学原理和方法。
⑵采用先进的技术、方法、工具开发和软件设计。
即采用先进的管理技术、规范的开发方法和模型、各种提高开发效率的软件工具等。
⑶采用必要的组织管理措施。
软件工是正式在解决软件危机问题的过程中形成的一门综合技术与管理两个方面的新兴学科,并逐渐成为指导计算机开发、维护、管理的理论依据。
[3]
2.3软件过程的基本原理
2.3.1软件的生命周期
一个软件产品从构想到不再使用,期间会经历若干阶段,我们称其为软件的生命周期(lifecycle)。
生命周期中的3个主要阶段是:
开发阶段(development),使用阶段(use)和维护阶段(maintenance)。
通常情况是:
客户提出需要解决的问题,软件开发者就构思并开发相应的软件,并藉此获得酬劳。
新的软件是在开发阶段建立的。
软件开发完毕之后就交付用户使用。
用户在使用过程中,通常都会发现各种问题(错误)及提出各种修改建议。
这些信息都会反馈给开发者,这就进入了维护阶段.
在软件维护阶段中,软件中的错误被修改(标识),功能被增强。
如果需要进行较大的修改,通常会开发一个新版本的软件并发布和使用。
当一个软件的维护费用过于昂贵时,开发者就考虑不再使用该软件,也不再发布新的版本。
软件开发阶段是生命周期中的第一个阶段,也是最重要的阶段。
如果一个软件开发得好,后续的维护将十分容易,相应的也就节约维护成本。
2.3.2软件开发阶段
软件工程师通常将软件的开发阶段分为下面4个子阶段:
●分析阶段
●设计阶段
●实现阶段
●测试和调试阶段
1.分析阶段
分析问题是第一步也是最为重要的一部。
在这一步中。
您需要做以下事情:
●全面理解所要解决的问题
●进行需求分析(requirementanalysis):
理解问题需求,包括程序是否需要和用户进行交互,是否操纵数据,是否有输出结果以及输出结果的格式等等。
举一个例子,如果您需要编写一个自动取款机(ATM)的程序。
在分析阶段,您要给出该ATM机可以进行的操作,如:
取款,存款,转账及余额查询等等。
您会和使用该ATM机的客户进行讨论,理解他们的需求,增加必要的操作,以便是您的程序是用户友好的。
●如果程序需要对数据进行操作,开发人员必须了解数据类型及它们的表示方法。
这时候可能会接触一些样本数据。
如果程序有输出信息,必须确定它们所生成的结果及输出格式等。
●如果需要解决的问题过于复杂,可以把它分解为多个子问题,在对每个子问题做相应的需求分析。
2.设计阶段
当您仔细分析完问题后,就需要设计相应的算法去解决问题。
如果已经将问题分解为若干子问题,那么对每个子问题都需要设计相应的算法。
算法(algorithm):
在有限时间内获得问题解决方案的逐步求解过程。
○1结构化设计方法
将一个问题分解为若干个子问题的方法叫做结构化设计方法(structureddesign)。
结构化设计方法又叫做自顶向下的设计方法(top-downdesign)、逐步求精方法(stepwiserefinement)和模块化程序设计方法(modularprogramming)。
在结构化设计方法中,问题被分解为若干子问题,然后分别对每个子问题进行分析和求解。
所有子问题的解合并起来就是原始问题的解。
使用结构化设计方法进行编程就叫做结构化程序设计(structureprogramming)。
○2面向对象设计方法
在面向对象设计方法(object-oriented,OOD)中,求解问题的首要步骤是识别称为“对象”(object)的组件(它是运用该方法求解问题的基础)和确定对象之间如何进行交互。
比如,我们要为一家录像出租店编写一个可以使其业务自动化的程序。
在这个问题中,我们可以确定两个主要对象,即:
录像带对象和客户对象。
明确系统中的对象之后,下一步就是为每个对象确定有关数据和数据上进行的相关操作。
对于录像带对象而言,数据可能包括影片名称,演员名单,制片人,出版公司,库存副本数等等。
在录像带对象可以进行的相关操作包括查询影片名,每租出一盘录像带就将库存副本数减一,客户每归还一盘录像带就将库存数加一。
由上文可知:
对象包括数据和在数据上执行的操作。
对象可以看作数据和其上操作的统一体。
使用面向对象方法编程,最终的程序是交互对象的集合。
实现面向对象设计方法的编程语言叫做面向对象程序设计(object-orientedprogramming,OOP)语言。
面向对象设计方法的3个基本原则:
●封装性(encapsulation):
将数据和操作集成在一个单元(对象)中的能力。
●继承性(inheritance):
从已有数据类型中派生新数据类型的能力。
●多态性(polymorphism):
使用相同表达形式来实现不同操作的能力。
在C++中,封装性是通过叫做类(class)的数据类型实现的。
在面向对象的设计方法中,我们要确定需要哪些类,它们的数据成员和成员方法。
我们还需要描述个各类之间如何进行交互。
4.实现阶段
在实现阶段,您将编写和编译程序代码,以实现在设计阶段分析得到的类和函数。
最终的程序通常由几个函数组成,它们分别完成不同的任务。
有些函数是主程序的一部分,其他的则是在对象上完成的操作。
显然函数之间存在交互关系,从而能够利用彼此的函数功能。
要使用一个函数,用户只需要知道该函数的功能和用法即可,而不必关心该函数的实现的具体细节。
5.测试和调试
测试(testing)这个术语表示检测程序的正确性,即检查程序是不是完成了需要完成的工作。
而调试(debugging)一词指,如果程序存在错误,如何找到并修改错误。
在每写完一个函数或算法后,接下来应该验证它是否正确工作。
在复杂的大型程序中,错误是一定存在的。
为了提高程序的可靠性,必须在交付用户前发现并修改其中的错误。
您可以使用某些方法,通常是数学方法来证明程序的正确性。
然而,对于大型的程序来说,单单使用证明方法是不行的,因为在证明过程中就有可能引入错误。
所以,我们必须使用测试的方法考察程序的质量。
通过让程序运行一些特定的例子,即测试用例(testcase)来找出程序中的问题。
测试用例的组成部分包括:
一组输入数据、用户操作、初始条件和期望的结果等。
由于测试用例将被多次使用,所以需要正确地记录它们。
通常,一个程序需要对大量的数据进行操作,虽然理论上可以将所有的输入情况在测试用例中体现,但在实际工作中显然是不现实的。
例如,一个程序需要对整数进行处理,显然,为每个整数做一个测试用例是不可能的。
我们可以将测试用例分类,即分为等价类(equivalencecategory)。
所谓等价类是指:
在这个分类中的所有输入值将对应相同的输出值。
有比如说,有一个函数的输入为整数,并且如果该整数为非负则返回真(true),否则返回假(false)。
那么我们可以做两个等价类,一个为负数集合,另一个为非负数集合。
测试有两类方法,即:
黑盒测试(black-boxtesting)和白盒测试(White-boxtesting)。
使用黑盒测试方法时,您不需要知道算法或函数的内部实现,只需要知道程序的功能即可黑盒测试是基于输入输出的方法。
它的测试用例通过创建等价类来选取。
如果程序对于等价类中的某个输入的输出结果是正确的话,那么就认为对应该等价类中其他输入也会输出同样的正确结果。
软件工程的目标:
提高软件的质量与生产率,最终实现软件的工业化生产。
[4]
2.3.3原理:
1.用分阶段的生命周期计划严格管理
2.坚持进行阶段评审
3.实行严格的产品控制
4.采用现代化程序设计技术
5.结果应能清楚地审查
6.开发小组的人员应该少而精
7.承认不断改进软件工程实践的必要性
2.4软件工程包含的领域
2.4.1软件需求:
用户解决问题或达到目标所需条件或权能;系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或权能;一种反映上面所述条件或权能的文档说明。
2.4.2软件设计:
把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。
是一个过程和这个过程的结果,此过程对一个系统或组件定义架构(体系结构)、组件、接口以及其他特征。
其在软件开发中起着重要的作用。
2.4.3软件构建:
指的是如何创建产生软件的详细步骤,包括编码、验证、单元测试、集成测试和调试。
2.4.4软件测试:
利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。
执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。
2.4.5软件维护:
软件开发的工作的结果就是交付一个满足用户需求的软件产品。
软件产品一旦投入应用,产品的缺陷就会逐渐的暴露出来,运行的环境会逐渐发生变化,新的用户也会不断地浮出水面。
软件维护就是要针对这些问题而对软件产品进行相应的修改或演化,从而真正的修改错误,改善性能或其他特征。
2.4.6软件配置管理:
一项跟踪和控制软件变更的活动
2.4.7软件工程管理:
是软件的开发和维护的管理活动,为了达到系统的、遵守规程的和可量化的目的,它包括计划、协调、度量、监控、控制和报表。
2.4.8软件工程过程:
将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。
软件工程过程应确定方法使用的顺序、要求交付的文档资料、为保证质量和适应变化所需要的管理、软件开发各个阶段完成的任务。
[1]
2.4.9软件工程工具和方法[4]
(1)软件需求工具包括:
a)RationalRequisitePro够帮助项目团队改进项目目标的沟通,增强协作开发,降低项目风险,以及在部署前提高应用程序的质量。
b)TelelogicDOORS基于整个公司的需求管理系统,用来捕捉、链接、跟踪、分析及管理信息,以确保项目与特定的需求及标准保持一致。
c)BorlandCaliberRM基于Web和用于协作的需求定义和管理工具,可以帮助分布式的开发团队平滑协作,从而加速交付应用系统。
CaliberRM辅助团队成员沟通,减少错误和提升项目质量。
(2)软件测试工具:
a)Testdirector业界第一个基于Web的测试管理系统,它可以在您公司内部或外部进行全球范围内测试的管理。
通过在一个整体的应用系统中集成了测试管理的各个部分,包括需求管理,测试计划,测试执行以及错误跟踪等功能,TestDirector极大地加速了测试过程。
b)ClearQuest具有完善的用户权限控制系统,可以对整个开发团队中的全部成员实现权限管理,对于不同用户,可以根据其在开发团队中担任的角色来分配其相应的权限。
c)IBM的RationalTeststudio测试套件
d)MI的WinrunnerLoadrunner
e)qtp测试工具
在测试工具中,除去上面所讲,目前还有自动化测试工具,其中有Web的,应用软件的,还有单元测试的.以上具有代表性常用的软件是:
Selenium,Watir,Winrunner,Loadrunner,Junit等等。
而在开发软件过程中,除去选择正确的工具之外,我们还必须要有简便的合适的方法,这就是软件工程方法。
软件工程方法为软件开发提供了“如何做”的技术。
它包括了多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。
软件工程方法有三种:
启发式方法,形式化方法,原型方法。
a)启发式方法:
寻找现实世界的对象(object,物体),形成一致的抽象,封装实现细节,在可能的情况下继承,藏住秘密(信息隐藏),找出容易改变的区域,保持松散耦合,探寻通用的设计模式。
启发式方法拥有很多,其中画图时一种强大的启发式方法。
b)形式化方法:
在逻辑科学中是指分析、研究思维形式结构的方法。
它把各种具有不同内容的思维形式(主要是命题和推理)加以比较,找出其中各个部分相互联结的方式,如命题中包含概念彼此间的联结,推理中则是各个命题之间的联结,抽取出它们共同的形式结构;再引入表达形式结构的符号语言,用符号与符号之间的联系表达命题或推理的形式结构。
c)原型化方法:
在正式编码之前,做一个原型出来给用户看看,看界面是否符合用户的要求。
它的可视化强,强化沟通,降低风险,节省后期变更成本,提高项目成功率。
一般来说,采用原型法后可以改进需求质量;虽然投入了较多先期的时间,但可以显著减少后期变更的时间;原型投入的人力成本代价并不大,但可以节省后期成本;对于较大型的软件来说,原型系统可以成为开发团队的蓝图;另外,原型通过充分和客户交流,还可以提高客户满意度。
2.4.10软件质量:
软件与明确的和隐含的定义的需求相一致的程度。
具体说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的隐含特征的程度。
影响软件质量的主要因素,这些因素是从管理角度对软件质量的度量。
可划分为三组,分别反应用户在使用软件产品时的三种观点。
正确性、健壮性、效率、完整性、可用性、风险(产品运行);可理解性、可维修性、灵活性、可测试性(产品修改);可移植性、可再用性、互运行性(产品转移)。
2.5软件生命周期模型
2.5.1瀑布模型
定义:
是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好“返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。
包括软件工程开发、企业项目开发、产品生产以及市场销售等构造瀑布模型。
特点:
(1)阶段间具有顺序性和依赖性,即必须等前一阶段的工作完成之后才能开始后一阶段工作,前一阶段的输出文档就是后一阶段的输入文档
(2)推迟实现的观点(3)质量保证的观点:
*每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。
完整、准确的合格文档不仅是软件开发时期各类人员之间互相通信的媒介,也是运行时期对软件进行维护的重要依据。
*每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。
事实上,越是早期阶段犯下的错误,暴露出来的时间越晚,排除故障改正错误所需付出的代价也越高。
因此,及时审查,是保证软件质量,降低软件成本的重要措施。
2.5.2快速模型
快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集,其本质是“快速”。
快速原型是不带反馈环的,其优点是软件产品的开发基本上是按线性顺序进行的
2.5.3增量模型(渐增模型)
定义:
融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。
当使用增量模型时,第1个增量往往是核心的产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。
客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。
特点:
其能分批地逐步向用户提交产品,能在较短的时间内向用户提交一些可完成有用的工作的产品;逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户带来的冲击。
2.5.4螺旋模型:
其基本思想是使用原型及其他方法来尽量降低风险。
优点:
对可选的方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量做为软件开发的一个重要目标;减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;更重要的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发并没有本质的区别。
螺旋模型主要适用于内部开发的大规模软件项目。
其主要优势:
它是风险驱动的,但是这也可能是它的一个弱点。
2.5.5喷泉模型
喷泉模型是典型的面向对象生命周期的模型,“喷泉”一词体现了面向对象软件开发过程的迭代和无缝特性。
结论
这次课题,我组选定了“软件工程”这一与时俱进的课题,在以认真严肃的态度,良好团结的合作氛围来进行过程中,我们明白了软件在各个领域都有着它不可取代的位置,更加的激励着我们将其作用更好地运用,因“利”制宜,发挥其的长处。
同样的,在课题进行时也发现了不少问题,但我们都成功解决,而且,我相信,下一次,我们会做得更好。
——————
此次课题,我们小组选择了"软件工程综述"这一课题。
在研究该课题的过程中,我与组员一同去了图书室借阅了相关的一些书籍,一同在机房里查找相关资料,并将那些资料整合。
在此次与组员合作中,我懂得了合作的重要性——合作可以使我们取得事半功倍的效果。
从本次的课题研究中我学习到了软件的无所不在以及深奥,我也懂得光凭这样一次小小得到研究根本无法全面地了解软件,但是由于时间有限,我们小组没有办法再进行进一步的研究。
但是还是初步的了解了软件的概念以及软件危机方面的知识。
最后我们小组还需要努力在以后的学习中逐渐认识软件了解软件明白软件的价值。
我们还需要努力——————
参考文献
[1]张海藩倪宁软件工程[M].北京:
人民邮电出版社,2010
[2]陈明软件工程导论[M].第三版.北京:
机械工业出版社,2010
[3]钱晓明朱健江王晓勇软件工程[M].北京:
中国铁道出版社,2007
[4]
[5]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 综述