BoehmQ运用现代科学技术知识来设计q构造计机E序及ؓ开发、运行和l护q些E序所必需的相x件资料?
IEEEQY件工E是开发、运行、维护和修复软g的系l方法?
Fritz BauerQ徏立ƈ使用完善的工E化原则Q以较经的手段获得能在实际机器上有效运行的可靠软g的一pdҎ?
软g工程学的内容
软g工程学的主要内容是Y件开发技术和软g工程理Q?
软g开发技术包含Y件工E方法学、Y件工具和软g开发环境;软g工程理学包含Y件工E经学和Y件管理学?
软g工程基本原理
著名软g工程专家B.Boehml合有关专家和学者的意见qȝ了多q来开发Y件的l验Q于1983q在一论文中提出了Y件工E的七条基本原理?
Q?Q用分阶D늚生存周期计划q行严格的管理?
Q?Q坚持进行阶D评审?
Q?Q实行严格的产品控制?
Q?Q采用现代程序设计技术?
Q?QY件工E结果应能清楚地审查?
Q?Q开发小l的人员应该而精?
Q?Q承认不断改qY件工E实늚必要性?
B.Boehm指出Q遵循前六条基本原理Q能够实现Y件的工程化生产;按照W七条原理,不仅要积极主动地采纳新的软g技术,而且要注意不断ȝl验?
软g工程(SoftWare Engineering)的框架可概括为:目标、过E和原则?
(1)软g工程目标Q生产具有正性、可用性以及开销合宜的品。正性指软g产品辑ֈ预期功能的程度。可用性指软g基本l构、实现及文为用户可用的E度。开销合宜是指软g开发、运行的整个开销满用户要求的程度。这些目标的实现不论在理Zq是在实践中均存在很多待解决的问题,它们形成了对q程、过E模型及工程Ҏ选取的约束?
(2)软g工程q程Q生产一个最l能满需求且辑ֈ工程目标的Y件品所需要的步骤。Y件工E过E主要包括开发过E、运作过E、维护过E。它们覆盖了需求、设计、实现、确认以及维护等zd。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软g需求规U。需求分析生成功能规U。设计活动一般包括概要设计和详细设计。概要设计徏立整个Y件系l结构,包括子系l、模块以及相兛_ơ的说明、每一模块的接口定义。详l设计生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计l果转换为可执行的程序代码。确认活动诏I于整个开发过E,实现完成后的认Q保证最l品满用L要求。维护活动包括用过E中的扩充、修改与完善。伴随以上过E,q有理q程、支持过E、培训过E等?
(3)软g工程的原则是指围l工E设计、工E支持以及工E管理在软g开发过E中必须遵@的原则?
软g工程必须遵@什么原?
围绕工程设计、工E支持以及工E管理已提出了以下四条基本原则:
(1)选取适宜的开发模?
该原则与pȝ设计有关。在pȝ设计中,软g需求、硬仉求以及其它因素间是相互制U和影响的,l常需要权衡。因此,必需认识需求定义的易变性,采用适当的开发模型,保证软g产品满用户的要求?
(2)采用合适的设计Ҏ
在Y件设计中Q通常需要考虑软g的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计Ҏ有助于这些特征的实现Q以辑ֈ软g工程的目标?
(3)提供高质量的工程支撑
工欲善其事,必先利其器。在软g工程中,软g工具与环境对软gq程的支持颇为重要。Y件工E项目的质量与开销直接取决于对软g工程所提供的支撑质量和效用?
(4)重视软g工程的管?
软g工程的管理直接媄响可用资源的有效利用Q生产满目标的软g产品以及提高软gl织的生产能力等问题。因此,仅当软gq程予以有效理Ӟ才能实现有效的Y件工E?
软g工程是指D机软g开发和l护的工E学U?
采用工程的概c原理?技术和Ҏ来开发与l护软gQ把l过旉考验而证明正的理技术和当前能够 得到的最好的技术方法结合v来,q就是Y件工E?
软g工程使用生存周期Ҏ学和各种l构分析及结构设计技术。它们是在七十年代ؓ了对付应用Y件日益增长的复杂E度、O长的开发周期以及用户对软g产品l常不满意的状况而发展v来的。hc解军_杂问题时普遍采用的一个策略就?#8220;各个ȝ”Q也是寚w题进行分解然后再分别解决各个子问题的{略。Y件工E采用的生存周期Ҏ学就是从旉角度对Y件开发和l护的复杂问题进行分解,把Y件生存的漫长周期依次划分q个阶段Q每个阶D|相对独立的Q务,然后逐步完成每个阶段的Q务。采用Y件工E方法论开发Y件的时候,从对d的抽象逻辑分析开始,一个阶D一个阶D地q行开发。前一个阶DQ务的完成是开始进行后一个阶D工作的前提和基Q而后一阶段d的完成通常是前一阶段提出的解法更q一步具体化Q加q了更多的物理细节。每一个阶D늚开始和l束都有严格标准Q对于Q何两个相ȝ阶段而言Q前一阶段的结束标准就是后一阶段的开始标准。在每一个阶D늻束之前都必须q行正式严格的技术审查和理复审Q从技术和理两方面对q个阶段的开发成果进行检查,通过之后q个阶段才算l束Q如果检查通不q,则必进行必要的q工Qƈ且返工后q要再经q审查。审查的一条主要标准就是每个阶D都应该交出“最新式?#8221;Q即和所开发的软g完全一致的Q高质量的文档资料,从而保证在软g开发工E结束时有一个完整准的软g配置交付使用。文是通信的工P它们清楚准确地说明了到这个时候ؓ止,关于该项工程已经知道了什么,同时立了下一步工作的基础。此外,文也v备忘录的作用Q如果文档不完整Q那么一定是某些工作忘记做了Q在q入生存周期的下一阶段之前Q必补些遗漏的l节。在完成生存周期每个阶段的Q务时Q应该采用适合该阶DQ务特点的pȝ化的技术方法——结构分析或l构设计技术?
把Y件生存周期划分成若干个阶D,每个阶段的Q务相对独立,而且比较单,便于不同人员分工协作Q从而降低了整个软g开发工E的困难E度Q在软g生存周期的每个阶D都采用U学的管理技术和良好的技术方法,而且在每个阶D늻束之前都从技术和理两个角度q行严格的审查,合格之后才开始下一阶段的工作,q就使Y件开发工E的全过E以一U有条不紊的方式q行Q保证了软g的质量,特别是提高了软g的可l护性。MQ采用Y件工E方法论可以大大提高软g开发的成功率,软g开发的生率也能明显提高?
目前划分软g生存周期阶段的方法有许多U,软g规模、种cR开发方式、开发环境以及开发时使用的方法论都媄响Y件生存周期阶D늚划分。在划分软g生存周期的阶D|应该遵@的一条基本原则就是各阶D늚d彼此间尽可能相对独立Q同一阶段各项d的性质可能相同,从而降低每个阶DQ务的复杂E度Q简化不同阶D之间的联系Q有利于软g开发工E的l织理。一般说来,软g生存周期pY件定义、Y件开发和软gl护三个时期l成Q每个时期又q一步划分成若干个阶Dc下面的主要针对应用软gQ对pȝ软g也基本适用?
软g定义时期的Q务是定软g开发工E必d成的ȝ标;定工程的可行性,导出实现工程目标应该采用的策略及pȝ必须完成的功能;估计完成该项工程需要的资源和成本,q且制定工程q度表。这个时期的工作通常又称为系l分析,ql分析员负责完成。Y件定义时期通常q一步划分成三个阶段Q即问题定义、可行性研I和需求分析?
开发时期具体设计和实现在前一个时期定义的软gQ它通常׃q四个阶D늻成:M设计Q详l设计,~码和单元测试,l合试?
l护时期的主要Q务是使Y件持久地满用户的需要。具体地_当Y件在使用q程中发现错误时应该加以ҎQ当环境改变时应该修改Y件以适应新的环境Q当用户有新要求时应该及时改qY件满用L新需要。通常对维护时期不再进一步划分阶D,但是每一ơ维护活动本质上都是一ơ压~和化了的定义和开发过E?/p>
下面D介绍软g生存周期每个阶段的基本Q务和l束标准?
1问题定义
问题定义阶段必须回答的关键问题:“要解决的问题是什么?”如果不知道问题是什么就试图解决q个问题Q显然是盲目的,只会白白费旉和金钱,最l得出的l果很可能是毫无意义的。尽确切地定义问题的必要性是十分明显的,但是在实践中它却可能是最Ҏ被忽视的一个步骤?
通过问题定义阶段的工作,pȝ分析员应该提出关于问题性质、工E目标和规模的书面报告。通过对系l的实际用户和用部门负责h的访问调查,分析员扼要地写出他对问题的理解,q在用户和用部门负责h的会议上认真讨论q䆾书面报告Q澄清含p不_地方Q改正理解不正确的地方,最后得Z份双斚w满意的文?
问题定义阶段是Y件生存周期中最短的阶段Q一般只需要一天甚x的旉?
2可行性研I?/strong>
q个阶段要回{的关键问题Q?#8220;对于上一个阶D|定的问题有行得通的解决办法吗?”Z回答q个问题Q系l分析员需要进行一ơ大大压~和化了的系l分析和设计的过E,也就是在较抽象的高层ơ上q行的分析和设计的过E?
可行性研I应该比较简短,q个阶段的Q务不是具体解决问题,而是研究问题的范_探烦q个问题是否值得去解Q是否有可行的解军_法?
在问题定义阶D|出的对工E目标和规模的报告通常比较含糊。可行性研ID应该导出系l的高层逻辑模型Q通常用数据流图表C)Qƈ且在此基上更准确、更具体地确定工E规模和目标。然后分析员更准地估计pȝ的成本和效益Q对的系l进行仔l的成本Q效益分析是q个阶段的主要Q务之一?
可行性研I的l果是用部门负责h做出是否l箋q行q项工程的决定的重要依据Q一般说来,只有投资可能取得较大效益的那些工E项目才值得l箋q行下去。可行性研I以后的那些阶段需要投入要多的人力物力。及时中止不值得投资的工E项目,可以避免更大的浪贏V?
3需求分?/strong>
q个阶段的Q务仍然不是具体地解决问题Q而是准确地确?#8220;Z解决q个问题Q目标系l必d什?#8221;Q主要是定目标pȝ必须具备哪些功能?
用户了解他们所面对的问题,知道必须做什么,但是通常不能完整准确地表辑և他们的要求,更不知道怎样利用计算决他们的问题QY件开发h员知道怎样使用软g实现Z的要求,但是对特定用L具体要求q不完全清楚。因此系l分析员在需求分析阶D必d用户密切配合Q充分交信息,以得出经q用L认的pȝ逻辑模型。通常用数据流图、数据字典和要的法描述表示pȝ的逻辑模型?
在需求分析阶D늡定的pȝ逻辑模型是以后设计和实现目标pȝ的基Q因此必d完整地体现用户的要求。系l分析员通常都是计算Y件专Ӟ技术专家一般都喜欢很快着手进行具体设计,然而,一旦分析员开始谈论程序设计的l节Q就会脱ȝP使他们不能l提Z们的要求和徏议。较件工E用的l构分析设计的方法ؓ每个阶段都规定了特定的结束标准,需求分析阶D必L供完整准的pȝ逻辑模型Q经q用L认之后才能进入下一个阶D,q就可以有效地防止和克服急于着手进行具体设计的們?
4M设计
q个阶段必须回答的关键问题是Q?#8220;概括地说Q应该如何解册个问题?”
首先Q应该考虑几种可能的解x案。列如,目标pȝ的一些主要功能是用计机自动完成q是用h工完成;如果使用计算机,那么是用批处理方式q是人机交互方式Q信息存储用传l的文gpȝq是数据?#8230;…。通常臛_应该考虑下述几类可能的方案:
低成本的解决Ҏ。系l只能完成最必要的工作,不能多做一炚w处的工作?
中等成本的解x案。这Lpȝ不仅能够很好地完成预定的dQ用v来很方便Q而且可能q具有用h有具体指定的某些功能和特炏V虽然用h有提些具体要求,但是pȝ分析员根据自q知识和经验断定,q些附加的能力在实践中将证明是很有h值的?
高成本的“十全十美”的系l。这Lpȝh用户可能希望有的所有功能和特点?
pȝ分析员应该用系l流E图或其他工hq每U可能的pȝQ估计每U方案的成本和效益,q应该在充分权衡各种Ҏ的利弊的基础?推荐一个较好的pȝ (最x?,q且制定实现所推荐的系l的详细计划。如果用h受分析员推荐的系l,则可以着手完成本阶段的另一主要工作?
上面的工作确定了解决问题的策略以及目标系l需要哪些程序,但是Q怎样设计q些E序呢?l构设计的一条基本原理就是程序应该模块化Q也是一个大E序应该p多规模适中的模块按合理的层ơ结构组l而成。M设计阶段的第二项主要d是设计软g的结构,也就是确定程序由哪些模块l成以及模块间的关系。通常用层ơ图或结构图描绘软g的结构?
5详细设计
M设计阶段以比较抽象概括的方式提出了解决问题的办法。详l设计阶D늚d是把解法具体化Q也是回答下面q个关键问题Q?#8220;应该怎样具体地实现这个系l呢Q?#8221;
q个阶段的Q务还不是~写E序Q而是设计出程序的详细规格说明。这U规D明的作用很类g其他工程领域中工E师l常使用的工E蓝图,它们应该包含必要的细节,E序员可以根据它们写出实际的E序代码?
通常用HIPO图(层次囑֊输入Q处理/输出图)或PDL语言Q过E设计语aQ描q详l设计的l果?
6~码和单元测?/strong>
q个阶段的关键Q务是写出正确的容易理解、容易维护的E序模块?
E序员应该根据目标系l的性质和实际环境,选取一U适当的高U程序设计语aQ必要时用汇~语aQ,把说l设计的l果译成用选定的语a书写的程序,q且仔细试~写出的每一个模块?
7l合试
q个阶段的关键Q务是通过各种cd的测试(及相应的调试Q软g辑ֈ预定的要求?
最基本的测试是集成试和验收测试。所谓集成测试是Ҏ设计的Y件结构,把经q单元测试检验的模块按某U选定的策略装配v来,在装配过E中对程序进行必要的试。所谓验收测试则是按照规D明书的规定(通常在需求分析阶D늡定)Q由用户Q或在用L极参加下Q对目标pȝq行验收?
必要时还可以再通过现场试或^行运行等Ҏ对目标系l进一步测试检验?
Z使用戯够积极参加验收测试,q且在系l投入生产性运行以后能够正有效地使用q个pȝQ通常需要以正式的或非正式的方式对用戯行培训?
通过对Y件测试结果的分析可以预测软g的可靠性;反之Q根据对软g可靠性的要求也可以决定测试和调试q程什么时候可以结束?
应该用正式的文资料把测试计划、详l测试方案以及实际测试结果保存下来,做ؓ软g配置的一个组成成分?
8软gl护
l护阶段的关键Q务是Q通过各种必要的维护活动ɾpȝ持久地满用L需要?
通常有四cȝ护活动:Ҏ性维护,也就是诊断和Ҏ在用过E中发现的Y仉误;适应性维护,即修改Y件以适应环境的变化;完善性维护,x据用L要求改进或扩充Y件它更完善Q预防性维护,即修改Y件ؓ来的维护活动预先做准备?
虽然没有把维护阶D进一步划分成更小的阶D,但是实际上每一维护活动都应该l过提出l护要求Q或报告问题Q,分析l护要求Q提出维护要求,提出l护ҎQ审批维护方案,定l护计划Q修改Y件设计,修改E序Q测试程序,复查验收{一pd步骤Q因此实质上是经历了一ơ压~和化了的Y件定义和开发的全过E?
都应该经q提出维护要求(或报告问题)Q分析维护要求,提出l护要求Q提出维护方案,审批l护ҎQ确定维护计划,修改软g设计Q修改程序,试E序Q复查验收等一pd步骤Q因此实质上是经历了一ơ压~和化了的Y件定义和开发的全过E?/p>