首页 > 代码库 > 软件工程--软件工程的介绍
软件工程--软件工程的介绍
1.2软件工程
1.2.1软件工程的介绍
概括地说,软件工程是是指导计算机软件开发和维护的一门工程科学。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前得到的最好的技术方法结合起来,以经济的开发出高质量的软件并有效的维护它,这就是软件工程。
人们普遍认为软件工程具有下述的本质特性:
软件工程关注大型程序的构造;
软件工程的中心课题是控制复杂性;
软件产品交付使用后仍然需要经常修改;
开发软件的效率非常重要;
和谐地合作是成功地开发软件的关键;
软件必须有效地支持它的用户;
在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人开发产品。
1.2.2软件工程的基本原理
著名软件工程专家B.W.Boehm提出了软件工程的7条基本原理,这7条基本原理在今天仍有一定的借鉴意义。下面列出这7条基本原理:
用分阶段的生命周期计划严格管理;
坚持进行阶段评审;
实行严格的产品控制;
采用现代程序设计技术;
结果能清楚地审查;
开发小组的人员应该少而精;
承认不断改进软件工程实践的必要性。
1.2.3软件工程方法学
前面已经讲过,软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,已达到既定目标的过程。
通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。在软件工程领域中,这两个术语的含义基本相同。
软件工程方法学包含3个要素:方法、工具、和过程。其中,方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。
1.传统方法学
传统方法学也称为生命周期方法学或结构化范型。
它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,也是用适当的软件工具或软件工程环境来支持结构化技术的运用。
这种方法学吧软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。
采用这种方法学开发软件的时候,从对问题的抽象分析开始,一个阶段一个阶段地顺序进行开发。前一个阶段任务的完成是开始进行后一个阶段工作的前提和基础,而后一阶段任务的完成通常是使前一阶段提出的解法更进一步具体化,加进了更多的实现细节。
在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审,从技术和管理两个方面对这个阶段的开发成果进行检查,通过之后这个阶段才算结束;如果没有通过检查,则必须进行必要的返工,而且返工后还要再经过审查。审查的一条主要标准就是每个阶段都应该交出“最新式的”(即和所开发的软件完全一致的)高质量的文档资料,从而保证在软件开发工程结束时有一个完整准确的软件配置交付使用。
文档时通信的工具,它清楚准确的说明了到这个时候为止,关于该项工程已经知道了什么,同时奠定了下一步工作的基础。此外文档也起备忘录的作用,如果文档不完整,那么一定是某些工作忘记做了,在进入生命周期的下一个阶段之前,必须补充这些遗漏的细节。
把软件生命周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工合作,从而降低了整个软件开发工程的困难程度;在软件生命周期的每个阶段都采用科学的管理技术和良好的技术方法,而且在每个阶段结束之前都从技术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作,这就使软件工程的全过程以一种有条不紊的方式进行,保证软件的质量,特别提高了软件的可维护性。总之,采用生命周期方法学可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。
目前,传统方法学任然是人们在开发软件时使用得十分广泛的软件工程。这种方法学历史悠久,为广大软件工程师所熟悉,而且在开发某些类型的软件时也比较有效,因此,在相当长一段时期内这种方法学还会有生命力。此外,如果没有完全理解传统方法学,也就不能深入理解这种方法学与面向对象方法学的差别以及面向对象方法学为何优于传统方法学。
2.面向对象方法学
当软件规模庞大,或者对软件需求是模糊的或会随时间变化而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发的软件,维护起来任然很困难。
结构化范型只能获得有限成功的一个重要原因是,这种技术要么面向行为(即对数据的操作),要么面向数据,还没有既面向数据又面向行为的结构化技术。
众所周知,软件系统本质上是信息处理系统。离开了操作便无法更改数据,而脱离了数据的操作便是毫无意义的。数据和对数据的处理原本是密切相关的,把数据和操作人为地分离成两个独立的部分,自然会增加软件开发和维护的难度。与传统方法相反,面向对象方法把数据和行为看成同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。
概括地说,面向对象方法学具有下述4个要点:
①把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。面向对象程序是由对象组成的,程序中任何元素都是对象,复杂对象是由比较简单的对象组合而成。也就是说,用对象分解取代了传统方法的功能分解。
②把所有的对象都划分成类(class)。每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。数据用于表示对象的静态属性,是对象的状态信息,而施加于数据之上的操作用于实现对象的动态行为。
③按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承。
④对象彼此之间仅能通过发送消息互相联系。对象与传统数据有本质区别,他不是被动地等待外界对它施加操作,相反,它是数据处理的主体,必须向他发送消息请求它执行它的某个操作以处理它的数据,而不是从外界直接对它的数据进行处理。也就是说,对象的所有私有信息都被封装在该对象内,不能从外界直接访问,这就是通常所说的封装性。
面向对象方法学的出发点和基本原则,是尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。
用面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过程。面向对象方法在概念和表示方法的一致性,保证了在各项开发活动之间的平滑(即无缝)过渡。面向对象方法普遍进行的对象分类过程,支持从特殊到一般的归纳思维过程;通过建立类等级而获得的继承性,支持从一般到特殊的演绎思维过程。
正确地运用面向对象方法学开发软件,则最终的软件产品由许多较小的、基本上独立的对象组成,每个对象相当于一个微型程序,而且大多数对象都与现实世界中的实体相对应,因此,降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。对象是相对独立的实体,容易在以后的软件产品中重复使用,因此,面向对象范型的另一个重要优点是促进了软件重用。面向对象方法特有的继承性和多态性,进一步提高了面向对象软件的可重用性。
摘自:《软件工程》张海藩编著
本文出自 “栋栋的博客” 博客,请务必保留此出处http://mengdong.blog.51cto.com/8682013/1412635