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

下载本文档

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

文档简介

一.选择题:1.软件工程学的提出是由于软件消费中的软件危机引起的,软件工程学的目的应该是最终解决软件消费的使软件工程化的问题。2.软件危机通常是指在计算机软件开发和维护中所产生的一系列严重的问题,这些问题中相对次要的因素是软件性能。3.软件危机是软件产业化过程中出现的一种现象,如:软件需求增长难以满足;软件开发本钱进步;软件开发进度难以控制;软件质量不容易保证。4.造成软件危机的主要原因是:软件本身特点,缺乏好的开发方法和手段。5.软件工程方法学研究内容包含软件开发技术和软件工程管理两局部,其期望到达的最终目的是软件开发工程化。6.瀑布模型把软件生命周期分为八个阶段:问题定义、可行性研究、软件需要分析、系统总体设计、详细设计、编码、测试和运行、维护。八个阶段又可归纳为三大阶段:方案阶段;开发阶段和运行阶段7.从构造化的瀑布模型看,在它的生命周期的八个阶段中,需求分析阶段出错对软件的影响最大。8.在构造性的瀑布模型中,需求分析阶段定义的标准将成为软件测试中的系统测试阶段的目的。9.软件工程的出现主要是由于软件危机的出现。10.软件工程方法学的目的是:使软件消费标准化和工程化,而软件工程方法得以施行的主要保证是软件开发工具和软件开发环境。11.软件工程方法学中重要的内容之一是软件工程管理,它包含软件管理学和软件工程经济学,它要到达的目的是以根本的社会经济效益为根底,工程化消费软件。12.软件工程方法中最普遍应用的方法之一是构造化生命周期方法〔SLC方法〕,包括:严格定义需求;划分开发阶段;标准文档格式。13.构造化分析方法是一种预先严格定义需求的方法,它在施行时强调分析对象的数据流。14.软件开发的构造化生命周期方法将软件生命周期划分为方案阶段;开发阶段和运行阶段。15.进展需求分析可使用多种工具:数据流图〔DFD〕;判断表;断定树和数据字典。16.在软件的需求分析中,开发人员要从用户那里解决的最重要的问题是要让软件做什么。17.软件需求分析阶段的工作,可以分为四方面:对问题的识别、分析与综合、编写需求分析文档以及需求分析评审。18.在构造化分析方法中,用以表达系统内数据的运动情况的工具是数据流图。19.软件设计将涉及软件的构造、过程和模块的设计,其中软件过程是指模块的操作细节。20.模块的独立性是由内聚性和耦合性来量度的,其中内聚性是模块的功能强度。21.在软件开发过程中常用图作为描绘工具。DFD就是面向数据流分析方法的描绘工具。在一套分层DFD中,假如某一张图中有N个加工,那么这张图允许有0~N张子图。在一张DFD图中,任意两个加工之间有且仅有一条数据流。在画分层DFD时,应注意保持父图与子图之间的平衡。DFD中从系统的输入流到系统的输出流的一连串连续变换形成一种信息流,这种信息流可分为事件流和控制流两大类。22.软件设计中划分模块的一个准那么是高内聚低耦合。两个模块之间的耦合方式中,内容耦合的耦合度最高,非直接耦合的耦合度最低。一个模块内部的内聚种类中,功能内聚的内聚度最高,偶尔内聚的内聚度最低。23.黑盒测试是从用户观点的测试,白盒测试是从开发人员观点的测试。24.为了把握软件开发各个环节的正确性和协调性,人们需要进展确认和验证工作。确认的目的是想证实在一给定的外部环境中软件的逻辑正确性,它包括需求规格说明确认和用户确认。验证那么试图证明在软件生存期各个阶段,以及阶段间的逻辑协调性、完备性和正确性。25.一般来说,与测试数据无关的文档是工程开发方案。26.根据国家标准GB8566-8计算机软件开发的规定,软件的开发和维护分为八个阶段,单元测试在编码阶段完成。 单元测试〔编码阶段〕;集成测试〔设计阶段〕;确认测试〔需求分析阶段〕。27.在设计测试用例时,划分等价类是用得最多的一种黑盒测试方法。在黑盒测试方法中,等价划分方法设计测试用例的步骤是:〔1〕根据输入条件把数目极多的输入数据划分成假设干个有效等价类盒假设干个无效等价类。〔2〕设计一个测试用例,使其覆盖尽可能多尚未覆盖的有效等价类,重复这一步,直至所有有效等价类均被覆盖。〔3〕设计一个测试用例,使其覆盖仅一个尚未覆盖的无效等价类,重复这一步,直至所有无效等价类均被覆盖。在实际应用中,一旦纠正了程序中的错误后,还应选择局部或全部原先已经测试过的测试用例,对修改后的程序重新测试,这种测试称为回归测试。28.单元测试在实现阶段进展,它所根据的模块功能描绘和内部细节及测试方案应在详细设计阶段完成,目的是发现编程错误。集成测试所根据的模块说明书和测试方案应在概要设计阶段完成,它能发现设计错误。确认测试应在模拟的环境中进展强度测试的根底上进展,测试方案应在需求分析阶段完成。29.软件测试阶段的根本任务应当是根据软件开发各阶段的文档资料和程序的内部构造,精心设计一批“高产〞的测试用例,利用这些测试用例执行程序,找出软件中潜藏的各种错误和缺陷。30.测试用例不仅要选用合理的测试输入数据,还需要选用不合理的测试输入数据,这样能更多地发现错误,进步程序的可靠性。对于不合理的测试输入数据,程序应回绝执行,并给出相应的提示。31.动态测试指通过运行程序发现错误。对软件产品进展动态测试时使用黑盒测试法和白盒测试法。32.静态测试指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进展检测。33.黑盒测试根据软件需求规格说明,检查程序是否满足功能要求。因此,黑盒测试又称为功能测试或数据驱动测试。34.白盒测试以检查处理过程的细节为根底,对程序中尽可能多的逻辑途径进展测试,检查内部数据构造和运行状态是否有错,程序的语句和条件与预期的状态是否一致。白盒测试又称为构造测试。35.在根本途径测试中,独立途径是指包括一组以前没有处理过的上层调用模块的一条途径。从程序图来看,一条独立途径是至少包含有一条测试输入数据的边的途径。37.软件测试的目的是发现软件错误。38.软件测试用例主要由测试输入数据和测试的预期结果两局部组成。39.与设计测试用例无关的文档是工程开发方案。40.软件测试是软件质量保证的主要手段之一,测试的本钱已超过软件开发本钱的30%以上。因此,进步测试的有效性非常重要。41.“高产〞的测试是指用适量的测试用例发现被测试程序尽可能多的错。42.假如想要进展成功的测试,为其设计测试用例主要依赖于测试人员的经历。43.使用白盒测试方法时,确定测试数据应根据程序的内部构造和指定的覆盖标准。44.在用逻辑覆盖法设计测试用例时,有语句覆盖、分支覆盖、条件覆盖、断定-条件覆盖、条件组合覆盖和途径覆盖等。其中途径覆盖是最强的覆盖准那么。45.在设计测试用例时,等价类划分是用得最多的一种黑盒测试方法。46.在黑盒测试中,着重检查输入条件的组合的测试用例设计方法是因果图法。47.单元测试将根据在详细设计阶段中产生的规格说明进展。48.集成测试方案是在概要设计阶段制定的。49.确认测试方案是在需求分析阶段制定的。50.软件的集成测试最好是由不属该软件开发组的软件人员承当,以进步集成测试的效果。51.从已发现故障的存在到找到准确的故障位置并确定故障的性质,这一过程称为调试。52.统计资料说明,软件测试的工作量占整个软件开发工作量的40%~50%。53.软件测试方案是一些文档,它们描绘了对于预定的测试活动将要采取的手段。54.IBM公司的统计资料说明,使用静态测试的方法最高可以查出在测试中查出的全部软件错误的70%。55.黑盒测试方法的优点是可发现实现功能需求中的错误。56.白盒测试方法的优点是可按软件内部构造测试。57.等价类划分完成后,就可得出等价类表,它是确定测试用例的根底。58.由因果图转换出来的断定表是确定测试用例的根底。59.软件测试的目的是发现软件的错误。为了进步测试的效率,应该选择发现错误的可能性大的数据作为测试数据。使用白盒测试方法时,确定测试数据应根据程序的内部逻辑和指定的覆盖标准。与设计测试数据无关的文档是工程开发方案。软件的集成测试工作最好由承当,以进步集成测试的效果。60.测试过程需要三类输入:软件配置、测试配置和测试工具。对测试结果进展结果分析,出错那么排错,通过数据出错率进展可靠性分析。61.程序的三种根本控制构造是顺序,条件,循环。它们的共同点是只有一个入口和一个出口。构造化程序设计的一种根本方法是逐步求精法。软件测试的目的是发现程序中的错误。软件调试的目的是找出错误所在并改正之。62.(1)对可靠性要求很高的软件,例如操作系统,由第三者对源代码进展逐行检查。代码审查(2)已有的软件被改版时,由于受到变更的影响,改版前正常的功能可能发生异常,性能也可能下降。因此,对变更的软件进展测试是必要的。回归测试(3)在意识到被测试模块的内部构造或算法的情况下进展测试。白盒测试(4)为了确认用户的需求,先做出系统的主要局部,提交给用户试用。原型63.软件测试方法可分为黑盒测试法和白盒测试法两种。黑盒测试法是通过分析程序的功能来设计测试用例的方法。除了测试程序外,它还适用于对需求分析阶段的软件文档进展测试。白盒测试法是根据程序的内部逻辑来设计测试用例的方法。除了测试程序外,它也适用于对软件详细设计阶段的软件文档进展测试。白盒法测试程序时常按照给定的覆盖条件选取测试用例。断定覆盖比语句覆盖严格,它使得每一个断定的每一条分支至少经历一次。断定/条件覆盖既是断定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。多重条件覆盖比其他条件都要严格,但它不能保证覆盖程序中的每一条途径。单元测试一般以白盒法为主,测试的根据是模块功能规格说明。64.集成测试也叫做组装测试或结合测试。通常,在单元测试的根底上,将所有模块按照设计要求组装成为系统。子系统的集成测试特别称为部件测试,它所做的工作是要找出子系统和系统需求规格说明之间的不一致。需要考虑的问题是:在把各个模块连接起来的时侯,穿越模块接口的数据是否会丧失;一个模块的功能是否会对另一个模块的功能产生不利的影响;各个子功能组合起来,能否到达预期要求的父功能;全局数据构造是否有问题;单个模块的误差累积起来是否会放大。65.软件测试中常用的静态分析方法是引用分析和接口分析。接口分析用于检查模块或子程序间的调用是否正确。分析方法〔白盒方法〕中常用的方法是途径测试方法。非分析方法〔黑盒方法〕中常用的方法是等价类方法和因果图方法。因果图方法根据输出对输入的依赖关系设计测试用例。66.等价类划分是一种典型的黑盒测试方法方法,也是一种非常实用的重要的测试方法。使用这一方法,完全不考虑程序的内部构造。用所有可能输入的数据来测试程序是不可能的,只能从全部可供输入的数据中选择一个子集进展测试。等价类是指某个输入域的集合,在该集合中,各个输入数据对于揭露程序中的错误是等效的。67.黑盒测试方法的缺点是不可测试软件的特定部位和无法测试未实现功能需求的软件的内部缺陷。68.白盒测试方法的缺点是不能发现功能需求中的错误和无法检验软件的外部特性。二.判断题

(1)用黑盒法测试时,测试用例是根据程序内部逻辑设计的。〔×〕

(2)尽量用公共过程或子程序去代替重复的代码段。〔×〕

(3)测试是为了验证该软件已正确地实现了用户的要求。〔×〕

(4)对于连锁型分支构造,假设有n个断定语句,那么有2n条途径。〔√〕

(5)尽量采用复合的条件测试,以防止嵌套的分支构造。〔√〕

(6)GOTO语句概念简单,使用方便,在某些情况下,保存GOTO语句反能使写出的程序更加简洁。〔√〕

(7)发现错误多的程序模块,残留在模块中的错误也多。〔√〕

(8)黑盒测试方法中最有效的是因果图法。〔×〕

(9)在做程序的单元测试时,桩〔存根〕模块比驱动模块容易编写。〔×〕

(10)程序效率的进步主要应通过选择高效的算法来实现。〔√〕三.应用题1.求一组数组中的最大数,数组表示为A〔n〕,n=1,2……n的自然数。(10分)请画出程序流程图〔4分〕请画出该算法的N-S图〔3分〕请用PAD图来表示该算法〔3分〕答案:

2、某银行计算机储蓄系统的工作流程大致如下:储户填写的存款单或取款单由业务员键入系统,假如是存款那么系统记录存款人的姓名、住址〔或号码〕、身份证号码、存款类型、存款日期、到期日期、利率及密码〔可选〕等信息,并印出存款单给储户;假如是取款而且存款时留有密码,那么系统首先核对储户密码,假设密码正确或存款时未留密码,那么系统计算利息并印出利息清单给储户。请用数据流图描绘本系统的功能。并画出系统的E-R图。DFD图:ER图:3、试用N-S图和PAD表示下面程序流程图,并计算它们的McCabe复杂性度量.〔根本途径测试法的环复杂度〕。〔10%〕解答:4、某培训中心要研制一个计算机管理系统。它的业务是:将学员发来的信件搜集分类后,按几种不同的情况处理。1)假如是报名的,那么将报名数据送给负责报名事务的职员,他们将查阅课程文件,检查该课程是否额满,然后在学生文件、课程文件上登记,并开出报告单交财务部门,财务人员开出发票给学生。2)假如是想注销原来已选修的课程,那么由注销人员在课程文件、学生文件和帐目文件上做相应的修改,并给学生注销单。3)假如是付款的,那么由财务人员在帐目文件上登记,也给学生一张收费收据。要求:1〕.对以上问题画出数据流程图。(8分)2〕.画出该培训管理的软件构造图的主图。(8分)四.计算例题:1.如下图的程序有三条不同的途径。分别表示为L1(a→b)、L2(a→c→d)、L3(a→c→e),或简写为ace、abd、abe及acd。根据断定覆盖、条件覆盖、断定-条件覆盖、条件组合覆盖和途径覆盖等五种覆盖标准,写出满足相应覆盖标准的最小测试用例组。解:断定覆盖:x=90,y=90 途径覆盖:x=90,y=90x=50,y=50 x=50,y=50x=90,y=70 x=90,y=70 条件覆盖:x=90,y=90 条件组合覆盖:x=90,y=90 x=50,y=50 x=90,y=70 x=80,y=70 x=90,y=30 x=70,y=90 x=70,y=90 x=30,y=90断定-条件覆盖:x=90,y=90 x=70,y=70 x=50,y=50 x=50,y=50 x=80,y=70 x=50,y=50 x=70,y=902.下面是快速排序算法中的一趟划分算法,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。算法中用到两个操作,一是取某数组元素V[i]的关键码操作getKey(),一是交换两数组元素内容的操作Swap():intPartition(datalist&list,intlow,inthigh){//在区间[low,high]以第一个对象为基准进展一次划分,k返回基准对象回放位置。intk=low;Elementpivot=list.V[low];//基准对象for(inti=low+1;i<=high;i++)//检测整个序列,进展划分if(list.V[i].getKey()<pivot.getKey()&&++k!=i)Swap(list.V[k],list.V[i]);//小于基准的交换到左侧去Swap(list.V[low],list.V[k]);//将基准对象就位returnk;//返回基准对象位置}(1)试画出它的程序流程图;(2)试利用途径覆盖方法为它设计足够的测试用例〔循环次数限定为0次,1次和2次〕。解:〔1〕〔2〕3.设要对一个自动饮料售货机软件进展黑盒测试。该软件的规格说明如下:“有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。假设投入1元5角硬币,按下“可乐〞、“雪碧〞或“红茶〞按钮,相应的饮料就送出来。假设投入的是2元硬币,在送出饮料的同时退还5角硬币。〞 (1)试利用因果图法,建立该软件的因果图;(2)设计测试该软件的全部测试用例。解:〔1〕〔2〕4.假如对一个长度为100000条指令的程序进展集成测试期间记录下面的数据: a.7月11日:集成测试开场,没有发现错误。 b.8月2日:总共改正了100个错误,此时MTTF=0.4h。 c.9月1日:总共改正了300个错误,此时MTTF=2h。 〔1〕估计程序中的错误总数。 〔2〕为使MTTF到达10h,必须测试和调试这个程序多长时间?解:〔1〕因为: 所以: 得K=1000,ET=350。所以程序中的错误总数约为250个。〔2〕设MTTF=10 那么:由可靠性累积曲线EC(t)=ET(1-e-K1t),得

100=350(1-e-160K1)

300=350(1-e-320K1)

因此,3-3*e-160K1=1-e-320K1

2=3*e-160K1-e-320K1

设x=e-160K1

有x2–3x+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=10

t=(ln(35))/0.00433=821(小时)

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

〔二〕吾生也有涯,而知也无涯学习永无止境,在以后还需加强的方面有:

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

3有关系统:文档不够详尽,导致标准不统一。模块集成时,做出来的半成品与本来的设计方案有出入。调试时出现了一些小问题,而个别次要的模块还未开发。设计仍有不太合理处,需要进展完善性维护。六.软件工程的三段论起源及开展趋势软件工程(SoftwareEngineering,简称为SE)是针对软件这一具有特殊性质的产品的工程化方法。软件工程涵盖了软件生存周期的所有阶段,并提供了一整套工程化的方法,来指导软件人员的工作。一、软件工程定义“工程〞是科学和数学的某种应用,通过这一应用,使自然界的物质和能源的特性可以通过各种构造、机器、产品、系统和过程,成为对人类有用的东西。因此,“软件工程〞就是科学和数学的某种应用,通过这一应用,使计算机设备的才能借助于计算机程序、过程和有关文档成为对人类有用的东西。软件工程的成果是为软件设计和开发人员提供思想方法和工具,而软件开发是一项需要良好组织,严密管理且各方面人员配合协作的复杂工作。软件工程正是指导这项工程的一门科学。软件工程在过去一段时间内已经获得了长足的进展,可以说在软件的开发和应用中起到了其应有的作用。高质量的软件工程可以保证软件工业中消费的软件是高质量的产品、用户满意的产品。但是,对软件工程的界定,总是存在一定的差异。软件工程应该包括哪些知识?这里我们引用IEEE在软件工程知识体系指南(SEWBOK:GuidetotheSoftwareEngineeringBodyofKnowledge2004Version)中的定义,它是这样定义软件工程的:1)软件开发、施行、维护的系统化、标准化、质量化的方法的应用,也就是软件的应用工程2)对上述方法的研究。IEEE的软件工程知识体系指南(SWEBOK)中界定了软件工程的10个知识领域(KAs:KnowledgeAreas)即软件需求(Softwarerequirements)、软件设计(Softwaredesign)、软件构建(Softwareconstruction)、软件测试(Softwaretesting)、软件维护(Softwaremaintenance)、软件配置管理(Softwareconfigurationmanagement)、软件工程管理(Softwareengineeringmanagement)、软件工程过程(Softwareengineeringprocess)、软件工程工具和方法(Softwareengineeringtoolsandmethods)和软件质量(SoftwarequalITy)。这10个知识领域的每个知识领域还包括很多子领域。二、软件工程起源的三段论这里的三段论是指从时间角度看软件工程起源的三个阶段。本世纪中期软件产业从零开场起步,在短短的50年的时间里迅速开展成为推动人类社会开展的龙头产业。随着信息产业的开展,软件对人类社会性越来越重要。软件开展的五十年历史中,人们对软件的认识经历了一个由浅到深的过程。第一个写软件的人是Ada(AugustaAdaLovelace),在1860年代他尝试为Babbage(CharlesBabbage)的机械式计算机写软件。尽管失败了,但他将永远载入了计算机开展的史册。1950年代,软件伴随着第一台电子计算机的问世诞生了。以写软件为职业的人也开场出现,他们多是经过训练的数学家和电子工程师。1960年代美国大学里开场出现授予计算机专业的学位,教人们写软件。软件开展的历史可以大致分为如下的三个阶段:第一个阶段是1950年代到1960年代,是程序设计阶段,根本是个体手工劳动的消费方式。这个时期,一个程序是为一个特定的目的而编制的,软件的通用性很有限的。软件往往带有强烈的个人色彩。早期的软件开发没有什么系统的方法可以遵循,软件设计是在某个人的头脑中完成的一个隐藏的过程。而且,除了源代码往往没有软件说明书等文档,因此这个时期尚无软件的概念,根本上只有程序、程序设计概念,不重视程序设计方法,主要是用于科学计算,规模很小、采用简单的工具(根本上采用低级语言),硬件的存储容量小、运行可靠性差。第二阶段是1960年代到1970年代,是软件设计阶段,小组合作消费方式。在这一时期软件开场作为一种产品被广泛使用,出现了“软件作坊〞。这个阶段,根本采用高级语言开发工具,开场提出构造化方法。硬件的速度、容量、工作可靠性有明显进步,而且硬件的价格降低。人们开场使用产品软件(可购置),从而建立了软件的概念。程序员数量猛增,但是开发技术没有新的打破,软件开发的方法根本上仍然沿用早期的个体化软件开发方式,软件需求日趋复杂,维护的难度越来越大,开发本钱令人吃惊地高,开发人员的开发技术不适应规模大、构造复杂的软件开发,失败的工程越来越多。第三个阶段是从1970年代止今,为软件工程时代,是工程化的消费方式。这个阶段的硬件向超高速、大容量、微型化以及网络化方向开展,第三、四代语言出现。数据库、开发工具、开发环境、网络、分布式、面向对象技术等工具方法都得到应用。软件开发技术有很大进步,但未能获得打破性进展,软件开发技术的进步一直未能满足开展的要求。软件的数量急剧膨胀,一些复杂的、大型的软件开发工程提出来了,在那个时代,很多的软件最后都得到了一个悲惨的结局。很多的软件工程开发时间大大超出了规划的时间表,一些工程导致了财产的流失,甚至某些软件导致了人员伤亡。同时软件开发人员也发现软件开发的难度越来越大,在软件开发中遇到的问题找不到解决的方法,使问题积累起来,形成了锋利的矛盾,失败的软件开发工程却屡见不鲜,因此导致了软件危机。

软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括来说,软件危机包含两方面问题:一、如何开发软件,以满足不断增长,日趋复杂的需求;二、如何维护数量不断膨胀的软件产品。落后的软件消费方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。最为突出的例子是美国IBM公司于1963年~1966年开发的IBM360系列机的操作系统。难怪该工程的负责人FredBrooks(F?D?希罗克斯)在总结该工程时无比沉痛地说:“……正像一只逃亡的野兽落到泥潭中作垂死挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难,……程序设计工作正像这样一个泥潭……一批批程序员被迫在泥潭中拼命挣扎,……,谁也没有料到问题竟会陷入这样的困境……。〞IBM360操作系统的历史教训已成为软件开发工程中的典型事例被记入历史史册。由于软件危机的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法。从此软件消费进入软件工程时代。1968年北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上第一次提出了“软件危机〞(softwarecrisis)这个名词。同时,讨论和制定摆脱“软件危机〞的对策。在那次会议上第一次提出了软件工程(softwareengineering)这个概念,从此一门新兴的工程学科--软件工程学--为研究和克制软件危机应运而生。“软件工程〞的概念是为了有效的控制软件危机的发生而被提出来的,它的中心目的就是把软件作为一种物理的工业产品来开发,要求“采用工程化的原理与方法对软件进展方案、开发和维护〞。软件工程是一门旨在开发满足用户需求、及时交付、不超过预算和无故障的软件的学科。软件工程的主要对象是大型软件。它的最终目的是摆脱手工消费软件的状况,逐步实现软件开发和维护的自动化。我们要求工程目的能在一定的时间、一定的预算之内完成。软件工程是针对软件危机提出来的。从微观上看,软件危机的特征正是表如今完工日期一再拖后、经费一再超支,甚至工程最终宣告失败等方面。而从宏观上看,软件危机的本质是软件产品的供给赶不上需求的增长。自从软件工程概念提出以来,经过几十多年的研究与理论,虽然“软件危机〞没得到彻底解决,但在软件开发方法和技术方面已经有了很大的进步。尤其应该指出的是,自80年代中期,美国工业界和政府部门开场认识到,在软件开发中,最关键的问题是软件开发组织不能很好地定义和管理其软件过程,从而使一些好的开发方法和技术都起不到所期望的作用。也就是说,在没有很好定义和管理软件过程的软件开发中,开发组织不可能在好的软件方法和工具中获益。三、软件工程内容的三段论这里的三段论是指从内容角度看软件工程的三段理论。软件工程是为克制软件危机而提出的一种概念,并在理论中不断地探究它的原理,技术和方法。在此过程中,人们研究和借鉴了工程学的某些原理和方法,并形成了软件工程学。软件工程的目的是进步软件的质量与消费率,最终实现软件的工业化消费。既然软件工程是“工程〞,那么我们从工程的角度看一下软件工程的施行过程,如图1所示。客户的需求起动了一个软件工程,为此我们需要先规划这个工程,即完成工程方案,然后根据这个工程方案施行工程,工程施行的根据是需求,这个需求类似工程工程的图纸,开发人员按照这个图纸消费软件即设计、编码,在开发消费线上,将开发过程的半成品,通过配置管理存储和管理,然后进展必要的集成和测试,直到最后提交给客户。在整个开发过程中需要进展工程跟踪管理。软件工程活动是“消费一个最终满足需求且到达工程目的的软件产品所需要的步骤〞。这些活动主要包括开发类活动、管理类活动和过程类活动,这里将它定义为“软件工程的三段论〞,或者“软件工程的三线索〞。一段论是“软件工程管理论〞,二段论是“软件工程开发论〞,三段论是“软件过程改良论〞。这个三段论可以用一个三角型表示,如图2,它们类似于互相支撑的三角形的三个边。我们知道三角形是最稳定的,要保证三角形的稳定性,三角形的三个边必不可少,而且要保持一定的互相关系。其中:开发过程是软件人员消费软件的过程,例如需求分析、设计、编码、测试等,相当于消费线上的消费过程。管理过程是工程管理者规划软件开发、控制软件开发的过程,相当于消费线上的管理过程,管理过程是伴随开发过程进展的过程。过程改良相当于对软件开发过程和软件管理过程的“工艺流程〞进展管理和改良,假如没有好的工艺消费不出好的产品,它包括对开发过程和管理过程的定义和改良。为了保证软件管理、软件开发过程的有效性,应该保证这些过程的高质量和过程的持续改良。为此我在软件工程的系列教程书中分三册,以案例贯穿讲述了软件工程管理过程、软件工程开发过程、软件过程改良。传统工业中知名的消费方式可算是“手工作坊式〞消费方式。过去的一段时间里,甚至到如今,中国软件业中还有一局部公司的开发方式与之类似。公正地说,以此方式还是成就了好多成功的应用开发工程,甚至可以说此法支撑起了软件开发的初期事业。但是,在我们的“作坊〞里还有太多的工程失败,例如开发周期的不可控制、工程结果为用户所不认可、工程最终的严重亏损,这种失败的惨痛出乎我们的意料,以致于我们无所适从。再加上技术人员、资金严重匮乏的困扰,软件开发管理举步维艰。作坊式的软件企业中,很多方法、规那么都是装在开发人员的脑子里面的,往往会因为一两个开发骨干走了,就造成整个公司的瘫痪。赌注完全押在这一两个人的身上,资本投入风险很大,假如研发骨干另谋高就,公司投资就将全部付之流水,作坊式的运作形式严重阻障了软件企业的成长。让软件工程成为真正的工程,就需要软件工程的开发、管理、过程等方面标准化、工程化,工艺化,机械化。软件开发过程中脑力活动的“不可见性〞大大增加了过程管理上的困难。因此软件工程管理中的一项指导思想就是千方百计地使这些过程变为“可见的〞以及事后可以检查的记录。只有从一开场就在开发过程中严格贯彻质量管理,软件产品的质量才有保证。否那么,开发工作一旦进展到后期,无论怎样通过测试和补破绽,都会无济于事。四、软件工程的开展状况和趋势软件工程的研究热点是随着软件技术的开展而不断变化的。即便在软件工程的领域内,研究热点也在不断转移。以往软件工程一直不能像其他产品一样,做到标准化,但是,随着技术条件的不断成熟,相应标准的出台,软件人员已经开场重视这方面的工作。实际上可以将许多软件工作分成许多部件去构造。很有可能今后的软件队伍会分为两个局部,一局部专门从事评估,另一局部专门从事集成,集成的对象是软构件。软构件的开发与运用刚刚开场。在一些公共领域

温馨提示

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

评论

0/150

提交评论