软件工程资料_第1页
软件工程资料_第2页
软件工程资料_第3页
软件工程资料_第4页
软件工程资料_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一.选择题:1,软件工程学的提出是由于软件生产中的软件危机引起的,软件工程学的目的应该是最终解决软件生产的使软件工程佟丽画2,软件危机通常是指在计算机软件开发和维护中所产生的一系列严重的问题,这些问题中相对次要的因素是软件性能。|3,软件危机是软件产业化过程中出现的一种现象,如:软件端求增长难以满足;软件开|发怫本提高;软件叫进便难以控制;软件质量|不容易保证。|4 .造成软件危机的主要原因是:软件本身特点,呼好的开发方法和手段。5 .软件工程方法学研究内容包含软件开发技术和软件工程管理两部分,其期望达到的最终目标是软件开发工程化。一6 .瀑布模型把软件生命周期分为八个阶段:问题定义、可行性研

2、究、软件需要分析、系统总体设计、详细设计、编码、测试和运行、维护。八个阶段又可归纳为三大阶段:计划阶段;开发阶段和运行阶段7 .从结构化的瀑布模型看,在它的生命周期的八个阶段中,需求分|析阶段出丽藏件的影响最大。8 .在结构性的瀑布模型中,需求分析阶段定五|的标准将成为软件测试中的系统测试阶段的目标。9 .软件工程的出现主要是由于软件危机的出现。-10 .软件工程方法学的目的是:使软件生产规范化和工程化,而软件工程方法得以实施的主要保证是软件开发工具和软件开发环境。一11 .软件工程方法学中重要的内容之一是软件工程管理,它包含软件管理学和软件工程经济学,它要达到的目标是以基本的社旨经济效益为基

3、础,工程化生产软件。|12 .软件工程方法中最普遍应用的方法之一是结构化生命周期方法(slc方法),包括:上格定义需求;闻/开发阶段;现范降档格式。一13 .结构化分析方法是一种预先严格定义需求的方法,它在实施时强调分析对象的数据流。|14 .软件开发的结构化生命周期方法将软件生命周期划分为计划麻开发阶康和运彳丽|段15 .进行需求分析可使用多种工具:数揶流图(DFD)|;阿断表;|柩|国数叵豆二16 .在软件的需求分析中,开发人员要从用户那里解决的最重要的问题是要让软件做什么。17 .软件需求分析阶段的工作,可以分为四方面:对问里的识别、芬司与新合、编高用求分析文档以及需求分|析评将。18

4、.在结构化分析方法中,用以表达系统内数据的运动情况的工具是数据流固。19 .软件设计将涉及软件的结构、过程和模块的设计,其中软件过程是指模块的师抻。20 .模块的独立性是由内聚性和耦合性来量度的,其中内聚性是模块的仍能强度。21 .在软件开发过程中常用图作为描述工具。DFD就是面向眄函|析方法的描述工具。在一套分层DFD中,如果某一张图中有N个加工,则这张图允许有0N张子图。在一张DFD图中,任意两个加工之间有R仅有一条数据流。在啊分层DFD时,应注意保持可囹口与子图平间的平衡。DFD中从系统的输入流到系统的输出流的一连串连续变换形成一种信息流,这种信息流可分为事件流和隼制流一两大类。22 .

5、软件设计中划分模块的一个准则是高内聚低耦合。而下模块之间的耦合方式中,内容耦合的耦合同高,非直接耦合白河各度最低。一个模块内部的内聚种类中,功审内聚的丙|聚度最高,偶然巴聚的丙聚m最低。23 .黑盒测试是从产q点的测试,白盒测试是从开发人员观点时测试。24 .为了把握软件开发各个环节的正确性和网调需要进行确认和申访|作口纵的目白叵1证实在一给定的外部环境中软件的逻辑正确性,它包括需匹格说明确认和用户利认。验叫则试图证明在软件生存期各个阶段,以及阶段间的逻辑协调性、完备因匚II正确性。25 .一般来说,与测试数据无关的文档是项目区计划。26 .根据国家标准GB8566-8计算机软件开发的规定,软

6、件的开发和维护分为八个阶段,单元测试在编码阶康完成。单元测试(编码阶段);集成测试(设计阶段);确认测试(需求分析阶段)一27 .在设计测试用例时,划分等价类是用得最多的一种黑盒测试方法。在黑盒测试方法中,等价划分方法设计测试用例的步骤是:(1)根据输入条件把数目极多的输入数据划分成若干个有效等价类盒若干个无效等价类。(2)设计一个测试用例,使其覆盖尽电!空用覆盖的有效等价类,重复这一步,直至所有有效等价类均被覆盖。(3)设计一个测试用例,使其覆盖仅用可覆盖的无效等价类,重复这一步,直至所有无效等价类均被覆盖。在实际应用中,一旦纠正了程序中的错误后,还应选择部分或全部原先已经测试过的测试用例,

7、对修改后的程序重新测试,这种测试称为增归测试T28 .晅元测试徘实现阶段进行,它所依据的模块功能描述和内部细节及测试方案应在详细设计而完成,目的是发现编程错误。|集成测即依据的模块说明书和测试方案应在概要|西丽段完成它能发现设计错误。|确认测试板在模拟的环境中进行强度测试的基础上进行,测试计划应在需求分析阶段完成。29 .软件测试阶段的基本任务应当是根据软件开发各阶段的文档和而诉忖内部结3T,精心设H一批“高产”的测试用例,利用这些测试用例.行程序,I找出软件中潜藏的各种错误和缺陷。30 .测试用例不仅要选用合理的测试输入数据,还需要选用不合理的测试输入数据,这样能更多地发现错误提高程司的可靠

8、性。对于不合理的测试输入数据,程序应拒绝执行,加给出相应的提示。31 .动态测试指通过回行程序发圳错误。对软件产品进行动态测试时使用黑盒测秫法而百!画式相I32 .静态测试指枷式程序不任机器上运行,而是采用人工H测和计算机轲静态分析的手段对隼序进行检测。33 .黑盒测试依据邛件需求规格说明,障查程序是否满足功能野求。因此黑盒测试又称为功能测试或数据呵测式。134 .白盒测试以检查处理过程的细节为基础,对程序中尽可能多的逻辑路值进行测词,检查内部数据结构和恒行状态,可有错,程心的语句和条件甘预期的状态是否一致。白盒测试又称为结构即试。|35 .在基本路径测试中,独立路径是指包括一组以前没有处理过

9、的上层调|用模块的一条唏径。从程序图来看,一条独立路径是至少包含有一条加试输入数据叫边的路径。37 .软件测试的目的是发现软件错误一38 .软件测试用例主要由测伏输入数瓶网试的恢期结果两部处组成。39 .与设计测试用例无关的文档是项母开发计划。40 .软件测试是软件质量保证的主要手段之一,测试的成本已超过软件开出成本的30%以上。因此,提高测试的有效性非常重要。41 .“高产”的测试是指用原量的测试用例发现被测试程序尽可能多的错。一42 .如果想要进行成功的测试,为其设计测试用例主要依赖于测试人员的经验。43 .使用白盒测试方法时,确定测试数据应根据程序的内部结构和指追的底标准。44 .在用逻

10、辑覆盖法设计测试用例时,有语句覆盖、分支覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖和路径覆盖等。其中路径桎盖一是最强的覆盖准则。45 .在设计测试用例时,等介类划分是邛得最多的一种黑盒测试方法。46 .在黑盒测试中,着重检查输入条件的组合的测试用例设计方法是因果图47 .单元测试将根据在详细设计阶段中产生的规格说明进行。48 .集成测试计划是在概怏设计阶段制定的。49 .确认测试计划是在需求分析阶事制定的。50 .软件的集成测试最好是由不麻!软件开发组的软件人员承担,|以提高集成测试的效果。51 .从已发现故障的存在到找到准确的故障位置并确定故障的性质,这一过程称为调试。匚二|52 .统计资

11、料表明,软件测试的工作量占整个软件开发工作量的40%50%,o53 .软件测试计划是一些文档,它们描述了对于预定的测试活动将要采取的手段。54 .IBM公司的统计资料表明,使用静态测试的方法最高可以查出在测试中查出的全部软件错误的170%。55 .黑盒测试方法的优点是可发现实现功能需求中的错误。56 .白盒测试方法的优点是可装软件内部结构测试。一57 .等价类划分完成后,就可得出等庐I,它艮确定测试用例的基础。58 .由因果图转换出来的判叵坦|定测试用例的基础。59 .软件测试的目的是发觇软件的错误。为了提高测试的效率,应该佳择发现错误的可能性大的数据作为测试数癌一|使用白盒测试方法时,确定测

12、试数据应根据程|序的内部国网定眄覆番标准。|与设计测试数据无关的文档是项中开发计划。软件的集成测试工作最好由承担,以提高集成测试的效果。60 .测试过程需要三类输入:软件配置、涧试配置和测试力真。对测状结果进行结果分析|出错则排错,通过国出错率进行可靠性分园61 .程序的三种基本控制结构是顺丘条件,循环。目们的共同点是只有一个入口和一个出口。结构印序设计的一种基本方法是逐步求网软件测试的目的是发起程序中的错误。软件调试的目的是找出错审而在并改正之。一|62 .(1)对可靠性要求很高的软件,例如操作系统,由第三者对源代码进行逐行检查。代码审直一(2)已有的软件被改版时,由于受到变更的影响,改版前

13、正常的功能可能发生异常,性能也可能下降。因此,对变更的软件进行测试是必要的。原归测试(3)在意识到被测试模块的内部结构或算法的情况下进行测试。白盒测试(4)为了确认用户的需求,先做出系统的主要部分,提交给用户试用。原型匚|63 .软件测试方法可分为黑盒测试法和白盒测试法两种。白盒白盒 判定口黑盒测试法是通过分析程序的功叵|计测试用例的方法。除了测试程序外,它还适用于对帝t分析阶段的软件文档进行测试。测试法是根据程序的内邮逻辑来诳计测试用例的方法。除了测试程序外,它也适用于对新性详细设计阶胞的软件文档进行测试。法测试程序时常按照给定的覆盖条件选取测试用例。判定叵耳语句覆其字,它使得每一个判定的每

14、一条分支至少经历一次。而聿盖既是判定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。多重条件咂正球件都要严格,但它不能保证覆盖程序中的每一条路径。单元测试一般以白盒可为主试的依据是模块功能视格说明。64 .集成测试也叫做组装测试或联谷测试。时常,在单元涮试的基油上,将所有模块按照设计要求组装成为系统。子系统的集成测试特别称为部件测试,它所做的工作是要找出子系统和系统需求规格说明之间的不一致需要考虑的问题是:在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢毛二I一个模块的功能是否会对另一个模块的功能产生不利的影响;各个子功能贮逻卜能否达到预期要求的平功能;全f数据结构是耳有

15、问题;单个模块的误差累积起来是否会放大。65 .软件测试中常用的静态分析方法是引用分析和接p步析。接口|分忻用于检堂模块或子程序间的调用是否正确。分析方法(白盒方法)中常用的方法是路|径测试方小。非分析方法(黑盒方法)中常用的方法是等价类平和呻图方即因果方法弗据输出|对输入的依赖关系设计测试用例。66 .等价类划分是一种典型的黑网试方法方法也是一种非常实用的重要的测试方法。使用这一方法,完全不考虑程序的内部结构。片匚所有可能输入的数据来测试程序是不可能的,只能从全部可供输入的数据中选择一个子集进行吧等价类是指巴时域的集合,在该集合中,各个输入数据对于揭露程序中的错误是等效白口|67 .黑盒测试

16、方法的缺点是不匹而软件的特定部位而陛口试未实现功能需求的软件的内部缺陷。68 .白盒测试方法的缺点是不能爰现功能需求中的错误和无阵式验软件的外部特性。|2 .判断题(1)用黑盒法测试时,测试用例是根据程序内部逻辑设计的。(X)(2)尽量用公共过程或子程序去代替重复的代码段。(X)(3)测试是为了验证该软件已正确地实现了用户的要求。(X)(4)对于连锁型分支结构,若有n个判定语句,则有2n条路径。(,)(5)尽量采用复合的条件测试,以避免嵌套的分支结构。(,)(6) GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁。(,)(7)发现错误多的程序模块,残留在模

17、块中的错误也多。(,)(8)黑盒测试方法中最有效的是因果图法。(X)(9)在做程序的单元测试时,桩(存根)模块比驱动模块容易编写。(X)(10)程序效率的提高主要应通过选择高效的算法来实现。(,)3 .应用题1 .求一组数组中的最大数,数组表示为A(n),n=1,2n的自然数。(10分)请画出程序流程图(4分)请画出该算法的N-S图(3分)请用PAD图来表示该算法(3分)答案:2、某银行计算机储蓄系统的工作流程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人的姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存款单

18、给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。请用数据流图描绘本系统的功能。并画出系统的E-R图。DFD图:ER图:3、试用N-S图和PAD表示下面程序流程图,并计算它们的McCabe复杂性度量.(基本路径测试法的环复杂度)。(10%)解答:N6图,PAD图:McCabe复杂性为3.4、某培训中心要研制一个计算机管理系统。它的业务是:将学员发来的信件收集分类后,按几种不同的情况处理。1)如果是报名的,则将报名数据送给负责报名事务的职员,他们将查阅课程文件,检查该课程是否额满,然后在学生文件、课程文件上登记,并开出报

19、告单交财务部门,财务人员开出发票给学生。2)如果是想注销原来已选修的课程,则由注销人员在课程文件、学生文件和帐目文件上做相应的修改,并给学生注销单。3)如果是付款的,则由财务人员在帐目文件上登记,也给学生一张收费收据。要求:1).对以上问题画出数据流程图。(8分)四.计算例题:1.如图所示的程序有三条不同的路径。分别表示为L1(afb)、L2(a-cd)、L3(a-ce),或简写为ace、abd、abe及acd。根据判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖和路径覆盖等五种覆盖标准,写出满足相应覆盖标准的最小测试用例组。解:判定覆盖:x = 90, y = 90路径覆盖:x = 90,

20、y = 90x = 50, y = 50x = 90, y = 70x = 50, y = 50x = 90, y = 70条件覆盖:x = 90, y = 90x = 50, y = 50x = 80, y = 70x = 70, y = 90判定-条件覆盖:x = 90, y = 90x = 50, y = 50条件组合覆盖:x = 90, y = 90x = 90, y = 70x = 90, y = 30x = 70, y = 90x = 30, y = 90x = 70, y = 70x = 50, y = 50x=80,y=70x=50,y=50x=70,y=902.下面是快速排序

21、算法中的一趟划分算法,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。算法中用到两个操作,一是取某数组元素Vi的关键码操作getKey(),一是交换两数组元素内容的操作Swap():intPartition(datalist&list,intlow,inthigh)/在区间low,high以第一个对象为基准进行一次划分,k返回基准对象回放位置。intk=low;Elementpivot=list.Vlow;基准对象for(inti=low+1;i<=high;i+)检测整个序列,进行划分if(list.Vi.getKey(

22、)<pivot.getKey()&&+k!=i)循环次数输入条件M出结累执行路役low喳kiV叫V1Jvpjkivpi叩Ivpj00001一01一一一10101120212一0101212:2一010111Cl211愚20201123D312202011213121020123113123®020132125133图卷<)020121213122(MX3)020123I3123020111231I2010122113L22020122口03222Swap ( list.Vk, list.Vi);Swap ( list.Vlow, list.Vk);retu

23、rn k;小于基准的交换到左侧去将基准对象就位/返回基准对象位置(1)试画出它的程序流程图;试利用路径覆盖方法为它设计足够的测试用例(循环次数限定为 0次,1次和2次)(2)3.设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明如下:“有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“可乐”、“雪碧”或“红茶”按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退还5角硬币。”(1)试利用因果图法,建立该软件的因果图;(2)设计测试该软件的全部测试用例。1234367s910LI输A投入1元5角硬币1111000r000投入3元便市Q001111

24、000拷"可乐"按钮100c10U010U按“雪碧”按钮(5LI100010iu10报“缸茶"撩钮LI010DQ10D0L中间结点已蜥(11)11111111r0D已碘(12)111c110111辎出退还5毫建而(21)00001110000送册“可乐”饮料伽)100c0j0L00送出“雪碧”饮料雨U10c01cc000送出“红茶”饮料(24)001Q0QQQ004.如果对一个长度为100000条指令的程序进行集成测试期间记录下面的数据:a.7月11日:集成测试开始,没有发现错误。b.8月2日:总共改正了100个错误,此时MTTF=0.4h。c.9月1日:总共改正

25、了300个错误,此时MTTF=2h。(1)估计程序中的错误总数。(2)为使MTTF达到10h,必须测试和调试这个程序多长时间?解:(1)投入1元5角便百.41)按"可尔'按“雪碧” /技殂 E 'rLj (4)技钮按“缸茶x X送出“可乐”饮料己第送出雪碧”饮料投人3元硬币,(24j送山“缸英,沈科(21)整田5 侑谑市解:(1)因为:ECEtI-100000K 2250 个。100000所以:100Et300EtK0.4得K=1000,Et=350o所以程序中的错误总数约为(2)设MTTF=10100000则:EC350340100010由可靠性累积曲线EC(t)=

26、ET(1-e-K1t),得100=350(1-e-160K1)300=350(1-e-320K1)因此,3-3*e-160K1=1-e-320K12=3*e-160K1-e-320K1设x=e-160K1有x23x+2=0解彳潺x1=2,x2=1,K1=ln(x1)/(-160)=-0.693/160=0.00433因为ln(x2)/(-160)=0,舍去代入:340=350(1-e-K1t)=350(1-e-0.00433t)350e-0.00433t=10t=(ln(35)/0.00433=821(小时)因此求得为使MTTF=10,测试和调试该程序需要花费821小时。五软件工程心得体会(一

27、)纸上得来终觉浅,觉知此事要躬行理论知识用于指导实践,亲身体验才能领悟软件工程的妙用。虽然软件工程这门课程没有安排实验课时,课后却要花费大量的时间去实践。我感觉到学习这门课花费了大量的时间思考,从而换取了宝贵的经验。学习软件工程的过程是痛苦的,它已经不单纯是一种思想,而是处世的态度。开发软件必须严谨求实,脉络清晰,还需要那么一点点敬业精神,牺牲部分休息娱乐的时间。运用工程学的思想开发软件,就要跳出原本只注重编程的狭隘圈子,从宏观上把握软件的生命周期,强调整体性与协调性,不能任意妄为。特别是需求分析、总体设计和详细设计阶段的工作,更要做到细致、准确,为后期工作做好铺垫。(二)吾生也有涯,而知也无

28、涯学习永无止境,在以后还需加强的方面有:1 分工合作:起初,对软件工程处于一知半解的状态,分工比较混乱。在划分模块后明确了各自分工,渐渐形成良性循环。团队合作十分重要,争议固然存在,但通过讨论、协商,群策群力,在不断磨合中能够达成一致与默契。团队成员中能力各有高下,互相尊重,各取所长,不宜妄自菲薄。组长多加协调,组员积极配合,才能合作愉快。2 学习能力:学习能力体现在能尽快接受新的知识,顺应变化,学为所用。树立终身学习的理念,摸索有效的学习方式。MSDN的中文网站就是我学习的得力助手,给予我很多帮助。此外,在开小组讨论会时,大家各抒己见,也开阔了我的思路。3 有关系统:文档不够详尽,导致标准不

29、统一。模块集成时,做出来的半成品与原本的设计方案有出入。调试时出现了一些小问题,而个别次要的模块还未开发。设计仍有不太合理处,需要进行完善性维护。六软件工程的三段论起源及发展趋势软件工程(SoftwareEngineering,简称为SE)是针对软件这一具有特殊性质的产品的工程化方法。软件工程涵盖了软件生存周期的所有阶段,并提供了一整套工程化的方法,来指导软件人员的工作。一、软件工程定义“工程”是科学和数学的某种应用,通过这一应用,使自然界的物质和能源的特性能够通过各种结构、机器、产品、系统和过程,成为对人类有用的东西。因而,“软件工程”就是科学和数学的某种应用,通过这一应用,使计算机设备的能

30、力借助于计算机程序、过程和有关文档成为对人类有用的东西。软件工程的成果是为软件设计和开发人员提供思想方法和工具,而软件开发是一项需要良好组织,严密管理且各方面人员配合协作的复杂工作。软件工程正是指导这项工程的一门科学。软件工程在过去一段时间内已经取得了长足的进展,可以说在软件的开发和应用中起到了其应有的作用。高质量的软件工程可以保证软件工业中生产的软件是高质量的产品、用户满意的产品。但是,对软件工程的界定,总是存在一定的差异。软件工程应该包括哪些知识?这里我们引用IEEE在软件工程知识体系指南(SEWBOK:GuidetotheSoftwareEngineeringBodyofKnowledg

31、e2004Version)中的定义,它是这样定义软件工程的:1)软件开发、实施、维护的系统化、规范化、质量化的方法的应用,也就是软件的应用工程2)对上述方法的研究。IEEE的软件工程知识体系指南(SWEBOK)中界定了软件工程的10个知识领域(KAs:KnowledgeAreas)即软件需求(Softwarerequirements)、软件设计(Softwaredesign)、软件构建(Softwareconstruction)、软件测试(Softwaretesting)、软件维护(Softwaremaintenance)、软件配置管理(Softwareconfigurationmanagem

32、ent)、软件工程管理(Softwareengineeringmanagement)、软件工程过程(Softwareengineeringprocess)、软件工程工具和方法(Softwareengineeringtoolsandmethods)和软件质量(SoftwarequalITy)。这10个知识领域的每个知识领域还包括很多子领域。二、软件工程起源的三段论这里的三段论是指从时间角度看软件工程起源的三个阶段。本世纪中期软件产业从零开始起步,在短短的50年的时间里迅速发展成为推动人类社会发展的龙头产业。随着信息产业的发展,软件对人类社会性越来越重要。软件发展的五十年历史中,人们对软件的认识经

33、历了一个由浅到深的过程。第一个写软件的人是Ada(AugustaAdaLovelace),在1860年代他尝试为Babbage(CharlesBabbage两机械式计算机写软件。尽管失败了,但他将永远载入了计算机发展的史册。1950年代,软件伴随着第一台电子计算机的问世诞生了。以写软件为职业的人也开始出现,他们多是经过训练的数学家和电子工程师。1960年代美国大学里开始出现授予计算机专业的学位,教人们写软件。软件发展的历史可以大致分为如下的三个阶段:第一个阶段是1950年代到1960年代,是程序设计阶段,基本是个体手工劳动的生产方式。这个时期,一个程序是为一个特定的目的而编制的,软件的通用性很

34、有限的。软件往往带有强烈的个人色彩。早期的软件开发没有什么系统的方法可以遵循,软件设计是在某个人的头脑中完成的一个隐藏的过程。而且,除了源代码往往没有软件说明书等文档,因此这个时期尚无软件的概念,基本上只有程序、程序设计概念,不重视程序设计方法,主要是用于科学计算,规模很小、采用简单的工具(基本上采用低级语言),硬件的存储容量小、运行可靠性差。第二阶段是1960年代到1970年代,是软件设计阶段,小组合作生产方式。在这一时期软件开始作为一种产品被广泛使用,出现了“软件作坊”。这个阶段,基本采用高级语言开发工具,开始提出结构化方法。硬件的速度、容量、工作可靠性有明显提高,而且硬件的价格降低。人们

35、开始使用产品软件(可购买),从而建立了软件的概念。程序员数量猛增,但是开发技术没有新的突破,软件开发的方法基本上仍然沿用早期的个体化软件开发方式,软件需求日趋复杂,维护的难度越来越大,开发成本令人吃惊地高,开发人员的开发技术不适应规模大、结构复杂的软件开发,失败的项目越来越多。第三个阶段是从1970年代止今,为软件工程时代,是工程化的生产方式。这个阶段的硬件向超高速、大容量、微型化以及网络化方向发展,第三、四代语言出现。数据库、开发工具、开发环境、网络、分布式、面向对象技术等工具方法都得到应用。软件开发技术有很大进步,但未能获得突破性进展,软件开发技术的进步一直未能满足发展的要求。软件的数量急

36、剧膨胀,一些复杂的、大型的软件开发项目提出来了,在那个时代,很多的软件最后都得到了一个悲惨的结局。很多的软件项目开发时间大大超出了规划的时间表,一些项目导致了财产的流失,甚至某些软件导致了人员伤亡。同时软件开发人员也发现软件开发的难度越来越大,在软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,失败的软件开发项目却屡见不鲜,因而导致了软件危机。软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括来说,软件危机包含两方面问题:一、如何开发软件,以满足不断增长,日趋复杂的需求;二、如何维护数量不断膨胀的软件产品。落后的软件生产方式无法满足迅速增长的计算机软

37、件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。最为突出的例子是美国旧M公司于1963年1966年开发的IBM360系列机的操作系统。难怪该项目的负责人FredBrooks(F?D?希罗克斯)在总结该项目时无比沉痛地说:“正像一只逃亡的野兽落到泥潭中作垂死挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难,程序设计工作正像这样一个泥潭一批批程序员被迫在泥潭中拼命挣扎,谁也没有料到问题竟会陷入这样的困境。”IBM360操作系统的历史教训已成为软件开发项目中的典型事例被记入历史史册。由于软件危系的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法。从此软件生产进入软件工程时代。

38、1968年北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上第一次提出了“软件危机”(softwarecrisis)这个名词。同时,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程(softwareengineering)这个概念,从此一门新兴的工程学科-软件工程学-为研究和克服软件危系应运而生。“软件工程”的概念是为了有效的控制软件危系的发生而被提出来的,它的难心目标就是把软件作为一种物理的工业产品来开发,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。软件工程是一门旨在开发满足用户需求、及时交付、不超过预算和无故障的软件的学科。软件工程的主要对象是大型

39、软件。它的最终目的是摆脱手工生产软件的状况,逐步实现软件开发和维护的自动化。我们要求工程目标能在一定的时间、一定的预算之内完成。软件工程是针对软件危系提出来的。从微观上看,软件危系的特征正是表现在完工日期一再拖后、经费一再超支,甚至工程最终宣告失败等方面。而从宏观上看,软件危系的实质是软件产品的供应赶不上需求的增长。自从软件工程概念提出以来,经过几十多年的研究与实践,虽然“软件危系”没得到彻底解决,但在软件开发方法和技术方面已经有了很大的进步。尤其应该指出的是,自80年代难期,美国工业界和政府部门开始认识到,在软件开发难,最关键的问题是软件开发组织不能很好地定义和管理其软件过程,从而使一些好的

40、开发方法和技术都起不到所期望的作用。也就是说,在没有很好定义和管理软件过程的软件开发难,开发组织不可能在好的软件方法和工具难获益。三、软件工程内容的三段论这里的三段论是指从内容角度看软件工程的三段理论。软件工程是为克服软件危系而提出的一种概念,并在实践难不断地探索它的原理,技术和方法。在此过程难,人们研究和借鉴了工程学的某些原理和方法,并形成了软件工程学。软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。既然软件工程是“工程”,那么我们从工程的角度看一下软件项目的实施过程,如图1所示。客户的需求起动了一个软件项目,为此我们需要先规划这个项目,即完成项目计划,然后根据这个项目计划

41、实施项目,项目实施的依据是需求,这个需求类似工程项目的图纸,开发人员按照这个图纸生产软件即设计、编码,在开发生产线上,将开发过程的半成品,通过配置管理存储和管理,然后进行必要的集成和测试,直到最后提交给客户。在整个开发过程中需要进行项目跟踪管理。软件工程活动是“生产一个最终满足需求且达到工程目标的软件产品所需要的步骤”。这些活动主要包括开发类活动、管理类活动和过程类活动,这里将它定义为“软件工程的三段论”,或者“软件工程的三线索”。一段论是“软件项目管理论”,二段论是“软件项目开发论”,三段论是“软件过程改进论"。这个三段论可以用一个三角型表示,如图2,它们类似于相互支撑的三角形的三

42、个边。我们知道三角形是最稳定的,要保证三角形的稳定性,三角形的三个边必不可少,而且要保持一定的相互关系。www.Topoint*gok.gh其中:开发过程是软件人员生产软件的过程,例如需求分析、设计、编码、测试等,相当于生产线上的生产过程。管理过程是项目管理者规划软件开发、控制软件开发的过程,相当于生产线上的管理过程,管理过程是伴随开发过程进行的过程。过程改进相当于对软件开发过程和软件管理过程的“工艺流程”进行管理和改进,如果没有好的工艺生产不出好的产品,它包括对开发过程和管理过程的定义和改进。为了保证软件管理、软件开发过程的有效性,应该保证这些过程的高质量和过程的持续改进。为此我在软件工程的

43、系列教程书中分三册,以案例贯穿讲述了软件项目管理过程、软件项目开发过程、软件过程改进。传统工业中知名的生产方式可算是“手工作坊式”生产方式。过去的一段时间里,甚至到现在,中国软件业中还有一部分公司的开发方式与之类似。公正地说,以此方式还是成就了好多成功的应用开发项目,甚至可以说此法支撑起了软件开发的初期事业。但是,在我们的“作坊”里还有太多的项目失败,例如开发周期的不可控制、项目结果为用户所不认可、项目最终的严重亏损,这种失败的惨痛出乎我们的意料,以至于我们无所适从。再加上技术人员、资金严重匮乏的困扰,软件开发管理举步维艰。作坊式的软件企业中,很多方法、规则都是装在开发人员的脑子里面的,往往会

44、因为一两个开发骨干走了,就造成整个公司的瘫痪。赌注完全押在这一两个人的身上,资本投入风险很大,如果研发骨干另谋高就,公司投资就将全部付之流水,作坊式的运作模式严重阻障了软件企业的成长。让软件工程成为真正的工程,就需要软件项目的开发、管理、过程等方面规范化、工程化,工艺化,机械化。软件开发过程中脑力活动的“不可见性”大大增加了过程管理上的困难。因此软件工程管理中的一项指导思想就是千方百计地使这些过程变为“可见的”以及事后可以检查的记录。只有从一开始就在开发过程中严格贯彻质量管理,软件产品的质量才有保证。否则,开发工作一旦进行到后期,无论怎样通过测试和补漏洞,都会无济于事。四、软件工程的发展状况和趋势软件工程的研究热点是随着软件技术的发展而不断变化的。即便在软件工程的领域内,研究热点也在不断转移。以往软件工程一直不能像其他产品一样,做到标准化,但是,随着技术条件的不断成熟,相应标准的出台,软件人员已经开始重视这方面的工作。实际上可以将许多软件工作分成许多部件去构造。很有可能今后的软件队伍会分为两个部分,一部分专门从事评估,另一部分专门从事集成,集成的对象是软

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论