资源描述
一选择题:1软件工程学的提出是由于软件生产中的软件危机引起的,软件工程学的目的应该是最终解决软件生产的使软件工程化的问题。2软件危机通常是指在计算机软件开发和维护中所产生的一系列严重的问题,这些问题中相对次要的因素是软件性能。3软件危机是是软件产业化化过程中出现现的一种现象象,如:软件件需求增长难难以满足;软件开发成成本提高;软件开发进进度难以控制制;软件质量不不容易保证。4造成软件危危机的主要原原因是:软件件本身特点,缺乏好的开开发方法和手手段。5软件工程方方法学研究内内容包含软件件开发技术和和软件工程管管理两部分,其其期望达到的的最终目标是是软件开发工工程化。6瀑布模型把把软件生命周周期分为八个个阶段:问题题定义、可行行性研究、软软件需要分析析、系统总体体设计、详细细设计、编码码、测试和运运行、维护。八八个阶段又可可归纳为三大大阶段:计划划阶段;开发阶段和运行阶段7从结构化的的瀑布模型看看,在它的生生命周期的八八个阶段中,需求分析阶段出错对软件的影响最大。8在结构性的的瀑布模型中中,需求分析析阶段定义的的标准将成为为软件测试中中的系统测试试阶段的目标标。9软件工程的的出现主要是是由于软件危危机的出现。10软件工程程方法学的目目的是:使软软件生产规范范化和工程化化,而软件工工程方法得以以实施的主要要保证是软件件开发工具和和软件开发环环境。11软件工程程方法学中重重要的内容之之一是软件工工程管理,它它包含软件管管理学和软件件工程经济学学,它要达到到的目标是以以基本的社会会经济效益为为基础,工程程化生产软件件。12软件工程程方法中最普普遍应用的方方法之一是结结构化生命周周期方法(SSLC方法),包包括:严格定定义需求;划分开发阶阶段;规范文档格格式。13结构化分分析方法是一一种预先严格格定义需求的的方法,它在在实施时强调调分析对象的的数据流。14软件开发发的结构化生生命周期方法法将软件生命命周期划分为为计划阶段;开发阶段和运行阶段。15进行需求求分析可使用用多种工具:数据流图(DDFD);判断表;判定树和数据字典。16在软件的的需求分析中中,开发人员员要从用户那那里解决的最最重要的问题题是要让软件件做什么。17软件需求求分析阶段的的工作,可以以分为四方面面:对问题的的识别、分析与综合合、编写需求分分析文档以及及需求分析评评审。18在结构化化分析方法中中,用以表达达系统内数据据的运动情况况的工具是数数据流图。19软件设计计将涉及软件件的结构、过过程和模块的的设计,其中中软件过程是是指模块的操操作细节。20模块的独独立性是由内内聚性和耦合合性来量度的的,其中内聚聚性是模块的的功能强度。21在软件开开发过程中常常用图作为描描述工具。DDFD就是面面向数据流分析方方法的描述工工具。在一套套分层DFDD中,如果某某一张图中有有N个加工,则则这张图允许许有0N张子图图。在一张DDFD图中,任任意两个加工工之间有且仅仅有一条数据据流。在画分分层DFD时时,应注意保保持父图与子子图之间的平平衡。DFDD中从系统的的输入流到系系统的输出流流的一连串连连续变换形成成一种信息流流,这种信息息流可分为事事件流和控制制流两大类。22软件设计计中划分模块块的一个准则则是高内聚低低耦合。两个个模块之间的的耦合方式中中,内容耦合合的耦合度最最高,非直接接耦合的耦合合度最低。一一个模块内部部的内聚种类类中,功能内内聚的内聚度度最高,偶然然内聚的内聚聚度最低。23黑盒测试试是从用户观点的测测试,白盒测测试是从开发发人员观点的的测试。24为了把握握软件开发各各个环节的正正确性和协调性,人们们需要进行确确认和验证工作。确认的目的是是想证实在一一给定的外部部环境中软件件的逻辑正确确性,它包括括需求规格说说明确认和用户确认。验验证则试图证证明在软件生生存期各个阶阶段,以及阶阶段间的逻辑辑协调性、完备性和正确性。25一般来说说,与测试数数据无关的文文档是项目开开发计划。26根据国家家标准GB88566-88计算机软件件开发的规定定,软件的开开发和维护分分为八个阶段段,单元测试试在编码阶段段完成。单元测试(编编码阶段);集成测试(设设计阶段);确认测试(需需求分析阶段段)。27在设计测测试用例时,划分等价类是用得最多的一种黑盒测试方法。在黑盒测试方法中,等价划分方法设计测试用例的步骤是:(1)根据输入入条件把数目目极多的输入入数据划分成成若干个有效效等价类盒若若干个无效等等价类。(2)设计一个个测试用例,使使其覆盖尽可可能多尚未覆覆盖的有效等等价类,重复复这一步,直直至所有有效效等价类均被被覆盖。(3)设计一个个测试用例,使使其覆盖仅一一个尚未覆盖盖的无效等价价类,重复这这一步,直至至所有无效等等价类均被覆覆盖。在实际应用中,一一旦纠正了程程序中的错误误后,还应选选择部分或全全部原先已经经测试过的测测试用例,对对修改后的程程序重新测试试,这种测试试称为回归测测试。28单元测试试在实现阶段段进行,它所所依据的模块块功能描述和和内部细节及及测试方案应应在详细设计计阶段完成,目目的是发现编编程错误。 集成测试所依依据的模块说说明书和测试试方案应在概概要设计阶段段完成,它能能发现设计错错误。确认测测试应在模拟拟的环境中进进行强度测试试的基础上进进行,测试计计划应在需求求分析阶段完完成。29软件测试试阶段的基本本任务应当是是根据软件开开发各阶段的的文档资料和程程序的内部结结构,精心设设计一批“高产”的测试用例例,利用这些些测试用例执执行程序,找找出软件中潜潜藏的各种错错误和缺陷。 30测试用例例不仅要选用用合理的测试试输入数据,还还需要选用不不合理的测试试输入数据,这这样能更多地地发现错误,提提高程序的可可靠性。对于于不合理的测测试输入数据据,程序应拒拒绝执行,并并给出相应的的提示。31动态测试试指通过运行行程序发现错错误。对软件件产品进行动动态测试时使使用黑盒测试试法和白盒测试法法。32静态测试试指被测试程程序不在机器器上运行,而而是采用人工工检测和计算机辅助助静态分析的的手段对程序序进行检测。33黑盒测试试依据软件需需求规格说明明,检查程序序是否满足功功能要求。因因此,黑盒测测试又称为功功能测试或数据驱动测试试。34白盒测试试以检查处理理过程的细节节为基础,对对程序中尽可可能多的逻辑辑路径进行测测试,检查内内部数据结构构和运行状态是否否有错,程序序的语句和条条件与预期的的状态是否一一致。白盒测测试又称为结结构测试。35在基本路路径测试中,独独立路径是指指包括一组以以前没有处理理过的上层调调用模块的一一条路径。从从程序图来看看,一条独立立路径是至少少包含有一条条测试输入数数据的边的路路径。37软件测试试的目的是发发现软件错误误。38软件测试试用例主要由由测试输入数数据和测试的预期期结果两部分分组成。39与设计测测试用例无关关的文档是项项目开发计划划。40软件测试试是软件质量量保证的主要要手段之一,测测试的成本已已超过软件开开发成本的330%以上。因因此,提高测测试的有效性性非常重要。41“高产”的测试是指指用适量的测测试用例发现现被测试程序序尽可能多的的错。42如果想要要进行成功的的测试,为其其设计测试用用例主要依赖赖于测试人员员的经验。43使用白盒盒测试方法时时,确定测试试数据应根据据程序的内部部结构和指定的覆盖盖标准。44在用逻辑辑覆盖法设计计测试用例时时,有语句覆覆盖、分支覆覆盖、条件覆覆盖、判定-条件覆盖、条条件组合覆盖盖和路径覆盖盖等。其中路路径覆盖是最最强的覆盖准准则。45在设计测测试用例时,等价类划分是用得最多的一种黑盒测试方法。46在黑盒测测试中,着重重检查输入条条件的组合的的测试用例设设计方法是因因果图法。47单元测试试将根据在详详细设计阶段段中产生的规规格说明进行行。48集成测试试计划是在概概要设计阶段段制定的。49确认测试试计划是在需需求分析阶段段制定的。50软件的集集成测试最好好是由不属该该软件开发组组的软件人员员承担,以提提高集成测试试的效果。51从已发现现故障的存在在到找到准确确的故障位置置并确定故障障的性质,这这一过程称为为调试。52统计资料料表明,软件件测试的工作作量占整个软软件开发工作作量的40%50%。53软件测试试计划是一些些文档,它们们描述了对于于预定的测试试活动将要采采取的手段。54IBM公公司的统计资资料表明,使使用静态测试试的方法最高高可以查出在在测试中查出出的全部软件件错误的700%。55黑盒测试试方法的优点点是可发现实实现功能需求求中的错误。56白盒测试试方法的优点点是可按软件件内部结构测测试。57等价类划划分完成后,就就可得出等价价类表,它是是确定测试用用例的基础。58由因果图图转换出来的的判定表是确定定测试用例的的基础。59软件测试试的目的是发发现软件的错错误。为了提提高测试的效效率,应该选选择发现错误误的可能性大大的数据作为为测试数据。使使用白盒测试试方法时,确确定测试数据据应根据程序序的内部逻辑辑和指定的覆盖盖标准。与设设计测试数据据无关的文档档是项目开发发计划。软件的集成成测试工作最最好由承担,以以提高集成测测试的效果。60测试过程程需要三类输输入:软件配配置、测试配置和测试工具。对对测试结果进进行结果分析析,出错则排错错,通过数据据出错率进行行可靠性分析析。61程序的三三种基本控制制结构是顺序序,条件,循循环。它们的的共同点是只只有一个入口口和一个出口口。结构化程程序设计的一一种基本方法法是逐步求精精法。软件测测试的目的是是发现程序中中的错误。软软件调试的目目的是找出错错误所在并改改正之。62(1) 对可靠性要要求很高的软软件,例如操操作系统,由由第三者对源源代码进行逐逐行检查。代代码审查 (2) 已有的软件件被改版时,由由于受到变更更的影响,改改版前正常的的功能可能发发生异常,性性能也可能下下降。因此,对对变更的软件件进行测试是是必要的。回回归测试 (3) 在意识到被被测试模块的的内部结构或或算法的情况况下进行测试试。白盒测试试 (4) 为了确认用用户的需求,先先做出系统的的主要部分,提提交给用户试试用。原型63软件测试试方法可分为为黑盒测试法法和白盒测试试法两种。 黑盒测试试法是通过分分析程序的功功能来设计测测试用例的方方法。除了测测试程序外,它它还适用于对对需求分析阶段段的软件文档档进行测试。白盒测试法是根据程序的内部逻辑来设计测试用例的方法。除了测试程序外,它也适用于对软件详细设计阶段的软件文档进行测试。白盒法测试程序时常按照给定的覆盖条件选取测试用例。判定覆盖比语句覆盖严格,它使得每一个判定的每一条分支至少经历一次。判定/条件覆盖既是判定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。多重条件覆盖比其他条件都要严格,但它不能保证覆盖程序中的每一条路径。单元测试一般以白盒法为主,测试的依据是模块功能规格说明。64集成测试试也叫做组装装测试或联合测试。通通常,在单元元测试的基础础上,将所有有模块按照设设计要求组装装成为系统。子子系统的集成成测试特别称称为部件测试试,它所做的的工作是要找找出子系统和和系统需求规规格说明之间间的不一致。需要要考虑的问题题是:在把各各个模块连接接起来的时侯侯,穿越模块块接口的数据据是否会丢失失; 一个模模块的功能是是否会对另一一个模块的功功能产生不利利的影响;各各个子功能组合起起来,能否达达到预期要求求的父功能;全局数据结结构是否有问问题;单个模模块的误差累累积起来是否否会放大。65软件测试试中常用的静静态分析方法法是引用分析析和接口分析。接口分析用于于检查模块或或子程序间的的调用是否正正确。分析方方法(白盒方方法)中常用用的方法是路路径测试方法法。非分析方方法(黑盒方方法)中常用用的方法是等等价类方法和和因果图方法。因果图图方法根据输输出对输入的的依赖关系设设计测试用例例。66等价类划划分是一种典典型的黑盒测测试方法方法法,也是一种种非常实用的的重要的测试试方法。使用用这一方法,完完全不考虑程程序的内部结结构。用所有有可能输入的的数据来测试试程序是不可可能的,只能能从全部可供供输入的数据据中选择一个个子集进行测试试。等价类是指某某个输入域的的集合,在该该集合中,各各个输入数据据对于揭露程程序中的错误误是等效的。67黑盒测试试方法的缺点点是不可测试试软件的特定定部位和无法测试未未实现功能需需求的软件的的内部缺陷。68白盒测试试方法的缺点点是不能发现现功能需求中中的错误和无法检验软软件的外部特特性。二判断题(1) 用黑黑盒法测试时时,测试用例例是根据程序序内部逻辑设设计的。()(2) 尽量量用公共过程程或子程序去去代替重复的的代码段。()(3) 测试试是为了验证证该软件已正正确地实现了了用户的要求求。()(4) 对于于连锁型分支支结构,若有有n个判定语语句,则有22n条路径。()(5) 尽量量采用复合的的条件测试,以以避免嵌套的的分支结构。()(6) GOOTO语句概概念简单,使使用方便,在在某些情况下下,保留GOOTO语句反反能使写出的的程序更加简简洁。()(7) 发现现错误多的程程序模块,残残留在模块中中的错误也多多。()(8) 黑盒盒测试方法中中最有效的是是因果图法。()(9) 在做做程序的单元元测试时,桩桩(存根)模模块比驱动模模块容易编写写。()(10) 程程序效率的提提高主要应通通过选择高效效的算法来实实现。()三应用题1.求一组数组组中的最大数数, 数组表表示为A(nn) ,n1,2n的自然数数。(10分分) 请画出程序流程程图(4分) 请画出该算法的的N-S图(33分) 请用PAD图来来表示该算法法(3分) 答案: 2、某银行计算算机储蓄系统统的工作流程程大致如下:储户填写的的存款单或取取款单由业务务员键入系统统,如果是存存款则系统记记录存款人的的姓名、住址址(或电话号号码)、身份份证号码、存存款类型、存存款日期、到到期日期、利利率及密码(可可选)等信息息,并印出存存款单给储户户;如果是取取款而且存款款时留有密码码,则系统首首先核对储户户密码,若密密码正确或存存款时未留密密码,则系统统计算利息并并印出利息清清单给储户。请请用数据流图图描绘本系统统的功能。并并画出系统的的E-R图。DFD图:ER图: 3、试用NN-S图和PPAD表示下下面程序流程程图,并计算算它们的MccCabe复复杂性度量.(基本路径径测试法的环复杂度)。(110%)解答:4、某培训中心心要研制一个个计算机管理理系统。它的的业务是:将学员发来的信信件收集分类类后,按几种种不同的情况况处理。1)如果是报名名的,则将报报名数据送给给负责报名事事务的职员,他他们将查阅课课程文件,检检查该课程是是否额满,然然后在学生文文件、课程文文件上登记,并并开出报告单单交财务部门门,财务人员员开出发票给给学生。2)如果是想注注销原来已选选修的课程,则则由注销人员员在课程文件件、学生文件件和帐目文件件上做相应的的修改,并给给学生注销单单。3)如果是付款款的,则由财财务人员在帐帐目文件上登登记,也给学学生一张收费费收据。要求:1).对以上问问题画出数据据流程图。(8分)2).画出该培培训管理的软软件结构图的的主图。(88分)四计算例题:1如图所示的的程序有三条条不同的路径径。分别表示示为L1(aab)、L22(acd)、L33(ace),或简简写为acee、abd、aabe及accd。根据判判定覆盖、条条件覆盖、判判定-条件覆覆盖、条件组组合覆盖和路路径覆盖等五五种覆盖标准准,写出满足足相应覆盖标标准的最小测测试用例组。解:判定覆盖:x = 990, y = 90路径覆盖:x = 990, y = 90x = 50, y = 50 x = 50, yy = 500x = 90, y = 70 x = 90, yy = 700条件覆盖:x = 90, y = 90条件组合覆覆盖:x = 90, y = 990x = 50, yy = 500x = 990, y = 70x = 80, yy = 700x = 990, y = 30x = 70, yy = 900x = 770, y = 90x = 330, y = 90判定-条件覆盖盖:x = 90, yy = 900x = 770, y = 70 xx = 500, y = 50x = 550, y = 50 xx = 800, y = 70x = 550, y = 50 xx = 700, y = 902下面是快速速排序算法中中的一趟划分分算法,其中dataalist是是数据表,它有两个数数据成员:一是元素类类型为Eleement的的数组V,另一个是是数组大小nn。算法中用用到两个操作作,一是取某某数组元素VVi的关关键码操作ggetKeyy ( ),一一是交换两数数组元素内容容的操作Swwap( ): int Partiition ( dattalistt &lisst, innt loww, intt highh ) /在区间 low, high 以第一个个对象为基准准进行一次划划分,k返回回基准对象回回放位置。int k = low; Elemment ppivot = lisst.Vllow; /基准准对象for ( intt i = low+11; i = higgh; i+ ) /检检测整个序列列,进行划分分iff ( liist.Vi.geetKey ( ) pivoot.gettKey( ) & + k != i ) Swap ( lisst.Vkk, liist.Vi );/小小于基准的交交换到左侧去去Swwap ( list.Vloww, liist.Vk );/将基准对象象就位 reeturn k; /返回基准对对象位置 (1) 试画画出它的程序序流程图; (2) 试利利用路径覆盖盖方法为它设设计足够的测测试用例(循循环次数限定定为0次,11次和2次)。解:(1) (2)3设要对一个个自动饮料售售货机软件进进行黑盒测试试。该软件的的规格说明如如下: “有一个处理理单价为1元元5角钱的盒盒装饮料的自自动售货机软软件。若投入入1元5角硬硬币,按下“可乐”、“雪碧”或“红茶”按钮,相应应的饮料就送送出来。若投投入的是2元元硬币,在送送出饮料的同同时退还5角角硬币。” (1) 试试利用因果图图法,建立该该软件的因果果图; (2) 设计计测试该软件件的全部测试试用例。解:(1) (2)4如果对一个个长度为1000000条条指令的程序序进行集成测测试期间记录录下面的数据据:a. 7月111日:集成成测试开始,没没有发现错误误。b. 8月22日:总共改改正了1000个错误,此此时MTTFF=0.4hh。c. 9月11日:总共改改正了3000个错误,此此时MTTFF=2h。(1)估计程程序中的错误误总数。(2)为使MMTTF达到到10h,必必须测试和调调试这个程序序多长时间?解:(1)因为为:所以:得K=10000,ETT=350。所所以程序中的的错误总数约约为250个个。(2)设MTTTF=10则: 由可靠性累积曲曲线EC (t) = ET (11-e-K11 t ),得 100 = 3500 (1-ee-160KK1) 3000 = 3350 (11-e-3220K1) 因此,3-3*e-1160K1 = 1-ee-320KK1 2 = 3*ee-160KK1- e-320K11 设设 x = e-1600K1 有 x2 3x + 2 = 00解得 x11 = 2,xx2 = 11, K11 = lnn(x1)/(-1600) = - 0.6993/1600 =0.004433。因为ln(x2)/(-160) = 0,舍舍去代入:3440 = 3350 (11-e-K11 t ) = 3500(1-e-0.004433 t ) 3500e-0.000433 t = 110 t = (lnn(35)/0.000433= 821 (小时) 因此此求得为使MMTTF = 10,测测试和调试该该程序需要花花费821小小时。五软件工程心心得体会 (一)纸上得来来终觉浅,觉觉知此事要躬躬行理论知识用于指指导实践,亲亲身体验才能能领悟软件工工程的妙用。虽虽然软件工程程这门课程没没有安排实验验课时,课后后却要花费大大量的时间去去实践。我感感觉到学习这这门课花费了了大量的时间间思考,从而而换取了宝贵贵的经验。学学习软件工程程的过程是痛痛苦的,它已已经不单纯是是一种思想,而而是处世的态态度。开发软件必须严严谨求实,脉脉络清晰,还还需要那么一一点点敬业精精神,牺牲部部分休息娱乐乐的时间。运运用工程学的的思想开发软软件,就要跳跳出原本只注注重编程的狭狭隘圈子,从从宏观上把握握软件的生命命周期,强调调整体性与协协调性,不能能任意妄为。特特别是需求分分析、总体设设计和详细设设计阶段的工工作,更要做做到细致、准准确,为后期期工作做好铺铺垫。(二)吾生也也有涯,而知知也无涯学习永无止境,在在以后还需加加强的方面有有:1分工合作:起初,对软件工工程处于一知知半解的状态态,分工比较较混乱。在划划分模块后明明确了各自分分工,渐渐形形成良性循环环。团队合作十分重重要,争议固固然存在,但但通过讨论、协协商,群策群群力,在不断断磨合中能够够达成一致与与默契。团队队成员中能力力各有高下,互互相尊重,各各取所长,不不宜妄自菲薄薄。组长多加加协调,组员员积极配合,才才能合作愉快快。2学习能力:学习能力体现在在能尽快接受受新的知识,顺顺应变化,学学为所用。树立终身学习的的理念,摸索索有效的学习习方式。MSSDN的中文文网站就是我我学习的得力力助手,给予予我很多帮助助。此外,在在开小组讨论论会时,大家家各抒己见,也也开阔了我的的思路。3有关系统:文档不够详尽,导导致标准不统统一。模块集集成时,做出出来的半成品品与原本的设设计方案有出出入。调试时出现了一一些小问题,而而个别次要的的模块还未开开发。设计仍仍有不太合理理处,需要进进行完善性维维护。六软件工程的的三段论起源源及发展趋势势软件工程(Softwware EEngineeeringg,简称为SSE)是针对对软件这一具具有特殊性质质的产品的工工程化方法。软软件工程涵盖盖了软件生存存周期的所有有阶段,并提提供了一整套套工程化的方方法,来指导导软件人员的的工作。一、软件工工程定义“工程”是是科学和数学学的某种应用用,通过这一一应用,使自自然界的物质质和能源的特特性能够通过过各种结构、机机器、产品、系系统和过程,成成为对人类有有用的东西。因因而,“软件工程”就是科学和和数学的某种种应用,通过过这一应用,使使计算机设备备的能力借助助于计算机程程序、过程和和有关文档成成为对人类有有用的东西。 软件工程的的成果是为软软件设计和开开发人员提供供思想方法和和工具,而软软件开发是一一项需要良好好组织,严密密管理且各方方面人员配合合协作的复杂杂工作。软件件工程正是指指导这项工程程的一门科学学。软件工程程在过去一段段时间内已经经取得了长足足的进展,可可以说在软件件的开发和应应用中起到了了其应有的作作用。高质量的软软件工程可以以保证软件工工业中生产的的软件是高质质量的产品、用用户满意的产产品。但是,对对软件工程的的界定,总是是存在一定的的差异。软件件工程应该包包括哪些知识识?这里我们们引用 IEEEE在软件件工程知识体体系指南(SSEWBOKK:Guidde to the SSoftwaare Enngineeering Body of Knnowleddge 20004Verrsion)中的定义,它它是这样定义义软件工程的的:1)软件件开发、实施施、维护的系系统化、规范范化、质量化化的方法的应应用,也就是是软件的应用用工程2)对对上述方法的的研究。IEEE的的软件工程知知识体系指南南(SWEBBOK)中界界定了软件工工程的10个个知识领域(KAs:KKnowleedge AAreas)即软件需求求(Softtware requiiremennts)、软软件设计(SSoftwaare deesign)、软件构建建(Softtware consttructiion)、软软件测试(SSoftwaare teestingg)、软件维维护(Sofftwaree mainntenannce)、软软件配置管理理(Softtware confiigurattion mmanageement)、软件工程程管理(Sooftwarre enggineerring mmanageement)、软件工程程过程(Sooftwarre enggineerring pprocesss)、软件件工程工具和和方法(Sooftwarre enggineerring ttools and mmethodds)和软件件质量(Sooftwarre quaalITy)。这10个个知识领域的的每个知识领领域还包括很很多子领域。二、软件工工程起源的三三段论这里的三段段论是指从时时间角度看软软件工程起源源的三个阶段段。本世纪中中期软件产业业从零开始起起步,在短短短的50年的的时间里迅速速发展成为推推动人类社会会发展的龙头头产业。随着着信息产业的的发展,软件件对人类社会会性越来越重重要。软件发发展的五十年年历史中,人人们对软件的的认识经历了了一个由浅到到深的过程。第一个写软软件的人是AAda(Auugustaa Ada Lovellace),在18600年代他尝试试为Babbbage(CCharlees Babbbage)的机械式计计算机写软件件。尽管失败败了,但他将将永远载入了了计算机发展展的史册。11950年代代,软件伴随随着第一台电电子计算机的的问世诞生了了。以写软件件为职业的人人也开始出现现,他们多是是经过训练的的数学家和电电子工程师。11960年代代美国大学里里开始出现授授予计算机专专业的学位,教教人们写软件件。 软件发展的的历史可以大大致分为如下下的三个阶段段:第一个阶段段是19500年代到19960年代,是是程序设计阶阶段,基本是是个体手工劳劳动的生产方方式。这个时时期,一个程程序是为一个个特定的目的的而编制的,软软件的通用性性很有限的。软软件往往带有有强烈的个人人色彩。早期期的软件开发发没有什么系系统的方法可可以遵循,软软件设计是在在某个人的头头脑中完成的的一个隐藏的的过程。而且且,除了源代代码往往没有有软件说明书书等文档,因因此这个时期期尚无软件的的概念,基本本上只有程序序、程序设计计概念,不重重视程序设计计方法,主要要是用于科学学计算,规模模很小、采用用简单的工具具(基本上采采用低级语言言),硬件的的存储容量小小、运行可靠靠性差。 第二阶段是是1960年年代到19770年代,是是软件设计阶阶段,小组合合作生产方式式。在这一时时期软件开始始作为一种产产品被广泛使使用,出现了了“软件作坊”。这个阶段段,基本采用用高级语言开开发工 具,开开始提出结构构化方法。硬硬件的速度、容容量、工作可可靠性有明显显提高,而且且硬件的价格格降低。人们们开始使用产产品软件(可可购买),从从而建立了软软件的概念。程程序员数量猛猛增,但是开开发技术没有有新的突破 ,软件开发发的方法基本本上仍然沿用用早期的个体体化软件开发发方式,软件件需求日趋复复杂,维护的的难度越来越越大,开发成成本令人吃惊惊地高,开发发人员的开发发技术不适应应规模大、结结构复杂的软软件开发,失失败的项目越越来越多。第三个阶段段是从19770年代止今今,为软件工工程时代 ,是是工程化的生生产方式。这这个阶段的硬硬件向超高速速、大容量、微微型化以及网网络化方向发发展,第三、四四代语言出现现。数据库、开开发工具、开开发环境、网网络 、分布布式、面向对对象技术等工工具方法都得得到应用 。软软件开发技术术有很大进步步,但未能获获得突破性进进展,软件开开发技术的进进步一直未能能满足发展的的要求。软件件的数量急剧剧膨胀,一些些复杂的、大大型的软件开开发项目提出出来了,在那那个时代,很很多的软件最最后都得到了了一个悲惨的的结局。很多多的软件项目目开发时间大大大超出了规规划的时间表表,一些项目目导致了财产产的流失,甚甚至某些软件件导致了人员员伤亡。同时时软件开发人人员也发现软软件开发的难难度越来越大大,在软件开开发中遇到的的问题找不到到解决的办法法,使问题积积累起来,形形成了尖锐的的矛盾,失败败的软件开发发项目却屡见见不鲜,因而而导致了软件件危机。 软件危机指指的是在计算算机软件的开开发和维护过过程中所遇到到的一系列严严重问题。概概括来说,软软件危机包含含两方面问题题:一、如何何开发软件,以以满足不断增增长,日趋复复杂的需求;二、如何维维护数量不断断膨胀的软件件产品。落后后的软件生产产方式无法满满足迅速增长长的计算机软软件需求,从从而导致软件件开发与维护护过程中出现现一系列严重重问题的现象象。最为突出的的例子是美国国IBM公司司于19633年19666年开发的的IBM3660系列机的的操作系统。难难怪该项目的的负责人Frred Brrooks(F?D?希希罗克斯)在在总结该项目目时无比沉痛痛地说:“正像一只只逃亡的野兽兽落到泥潭中中作垂死挣扎扎,越是挣扎扎,陷得越深深,最后无法法逃脱灭顶的的灾难,程序设计工工作正像这样样一个泥潭一批批程程序员被迫在在泥潭中拼命命挣扎,谁也没有有料到问题竟竟会陷入这样样的困境。” IBM3360操作系系统的历史教教训已成为软软件开发项目目中的典型事事例被记入历历史史册。由由于软件危机机的产生,迫迫使人们不得得不研究、改改变软件开发发的技术手段段和管理方法法。从此软件件生产进入软软件工程时代代。1968年年北大西洋公公约组织的计计算机科学家家在联邦德国国召开的国际际学术会议上上第一次提出出了“软件危机”(softtware crisiis)这个名名词。同时,讨讨论和制定摆摆脱“软件危机”的对策。在在那次会议上上第一次提出出了软件工程程(softtware enginneerinng)这个概概念,从此一一门新兴的工工程学科-软件工程学学-为研究究和克服软件件危机应运而而生。“软件工程程”的概念是为为了有效的控控制软件危机机的发生而被被提出来的,它它的中心目标标就是把软件件作为一种物物理的工业产产品来开发,要要求“采用工程化化的原理与方方法对软件进进行计划、开开发和维护”。软件工程程是一门旨在在开发满足用用户需求、及及时交付、不不超过预算和和无故障的软软件的学科。软软件工程的主主要对象是大大型软件。它它的最终目的的是摆脱手工工生产软件的的状况,逐步步实现软件开开发和维护的的自动化。我们要求工工程目标能在在一定的时间间、一定的预预算之内完成成。软件工程程是针对软件件危机提出来来的。从微观观上看,软件件危机的特征征正是表现在在完工日期一一再拖后、经经费一再超支支,甚至工程程最终宣告失失败等方面。而而从宏观上看看,软件危机机的实质是软软件产品的供供应赶不上需需求的增长。自从软件工工程概念提出出以来,经过过几十多年的的研究与实践践,虽然“软件危机”没得到彻底底解决,但在在软件开发方方法和技术方方面已经有了了很大的进步步。尤其应该该指出的是,自自80年代中中期,美国工工业界和政府府部门开始认认识到,在软软件开发中,最最关键的问题题是软件开发发组织不能很很好地定义和和管理其软件件过程,从而而使一些好的的开发方法和和技术都起不不到所期望的的作用。也就就是说,在没没有很好定义义和管理软件件过程的软件件开发中,开开发组织不可可能在好的软软件方法和工工具中获益。三、软件工工程内容的三三段论这里的三段段论是指从内内容角度看软软件工程的三三段理论。软软件工程是为为克服软件危危机而提出的的一种概念,并并在实践中不不断地探索它它的原理,技技术和方法。在在此过程中,人人们研究和借借鉴了工程学学的某些原理理和方法,并并形成了软件件工程学。软软件工程的目目标是提高软软件的质量与与生产率,最最终实现软件件的工业化生生产。既然软软件工程是“工程”,那么我们们从工程的角角度看一下软软件项目的实实施过程,如如图1所示。客户的需求求起动了一个个软件项目,为为此我们需要要先规划这个个项目,即完完成项目计划划,然后根据据这个项目计计划实施项目目,项目实施施的依据是需需求,这个需需求类似工程程项目的图纸纸,开发人员员按照这个图图纸生产软件件即设计、编编码,在开发发生产线上,将将开发过程的的半成品,通通过配置管理理存储和管理理,然后进行行必要的集成成和测试,直直到最后提交交给客户。在整个开发发过程中需要要进行项目跟跟踪管理。软软件工程活动动是“生产一个最最终满足需求求且达到工程程目标的软件件产品所需要要的步骤”。这些活动动主要包括开开发类活动、管管理类活动和和过程类活动动,这里将它它定义为“软件工程的的三段论”,或者“软件工程的的三线索”。一段论是是“软件项目管管理论”,二段论是是“软件项目开开发论”,三段论是是“软件过程改改进论”。这个三段段论可以用一一个三角型表表示, 如图图2,它们类类似于相互支支撑的三角形形的三个边。我我们知道三角角形是最稳定定的,要保证证三角形的稳稳定性,三角角形的三个边边必不可少,而而且要保持一一定的相互关关系。其中:开发过程是是软件人员生生产软件的过过程,例如需需求分析、设设计、编码、测测试等,相当当于生产线上上的生产过程程。管理过程程是项目管理理者规划软件件开发、控制制软件开发的的过程,相当当于生产线上上的管理过程程,管理过程程是伴随开发发过程进行的的过程。过程程改进相当于于对软件开发发过程和软件件管理过程的的“工艺流程”进行管理和和改进,如果果没有好的工工艺生产不出出好的产品,它它包括对开发发过程和管理理过程的定义义和改进。为了保证软软件管理、软软件开发过程程的有效性,应应该保证这些些过程的高质质量和过程的的持续改进。为为此我在软件件工程的系列列教程书中分分三册,以案案例贯穿讲述述了软件项目目管理过程、软软件项目开发发过程、软件件过程改进。传统工业中中知名的生产产方式可算是是“手工作坊式式”生产方式。过过去的一段时时间里,甚至至到现在,中中国软件业中中还有一部分分公司的开发发方式与之类类似。公正地地说,以此方方式还是成就就了好多成功功的应用开发发项目,甚至至可以说此法法支撑起了软软件开发的初初期事业。但但是,在我们们的“作坊”里还有太多多的项目失败败,例如开发发周期的不可可控制、项目目结果为用户户所不认可、项项目最终的严严重亏损,这这种失败的惨惨痛出乎我们们的意料,以以至于我们无无所适从。再再加上技术人人员、资金严严重匮乏的困困扰,软件开开发管理举步步维艰。作坊式的软软件企业中,很很多方法、规规则都是装在在开发人员的的脑子里面的的,往往会因因为一两个开开发骨干走了了,就造成整整个公司的瘫瘫痪。赌注完完全押在这一一两个人的身身上,资本投投入风险很大大,如果研发发骨干另谋高高就,公司投投资就将全部部付之流水,作作坊式的运作作模式严重阻阻障了软件企企业的成长。让软件工程程成为真正的的工程,就需需要软件项目目的开发、管管理、过程等等方面规范化化、工程化,工工艺化,机械械化。软件开开发过程中脑脑力活动的“不可见性”大大增加了了过程管理上上的困难。因因此软件工程程管理中的一一项指导思想想就是千方百百计地使这些些过程变为“可见的”以及事后可可以检查的记记录。只有从从一开始就在在开发过程中中严格贯彻质质量管理,软软件产品的质质量才有保证证。否则,开开发工作一旦旦进行到后期期,无论怎样样通过测试和和补漏洞,都都会无济于事事。四、软件工程的的发展状况和和趋势软件工程的的研究热点是是随着软件技技术的发展而而不断变化的的。即便在软软件工程的领领域内,研究究热点也在不不断转移。以以往软件工程程一直不能像像其他产品一一样,做到标标准化,但是是,随着技术术条件的不断断成熟,相应应标准的出台台,软件人员员已经开始重重视这方面的的工作。实际际上可以将许许多软件工作作分成许多部部件去构造。很很有可能今后后的软件队伍伍会分为两个个部分,一部部分专门从事事评估,另一一部分专门从从事集成,集集成的对象是是软构件。软构件的开开发与运用刚刚刚开始。在在一些公共领领域,例如软软件的用户界界面,通用软软构件的使用已已经屡见不鲜鲜。然而,对对于各行各业业的专业领域域来说,领域域构件的开发和和使用还是基基本处于空白白状态。这一一工作的进行行,一方面意意味着各行各各业对本专业业领域内的知知识形态加以以归纳整理,然然后以最新的的软件形式表表达出来。如如果全面铺开开,就是一件件规模浩大的的社会工程,需需要各行各业业的领域专家家和软件专家家通力合作才才能完成。如如果软件生产产的“构件-集成”格格局的趋势成成为现实,各各种应用领域域里的构件的的设计与生产产将开辟出一一个十分广阔阔的新天地,产产生出巨大的的市场需求,而而且软构件的的使用可以渗渗透到符合软软构件标准规规范的所有系系统中,在软件开发发过程中人们们开始研制和和使用软件工工具,用以辅辅助进行软件件项目管理与技术生生产,人们还还将软件生命命周期各阶段段使用的软件件工具有机地地集合成为一一个整体,形形成能够连续续支持软件开开发与维护全全过程的集成成化软件支援援环境,以期期从管理和技术两两方面解决软软件危机问题题。此外,人工工智能与软件件工程的结合合成为80年年代末期活跃跃的研究领域域。基于程序序变换、自动动生成和可重重用软件等软软件新技术研研究也已取得得一定的进展展,把程序设设计自动化的的进程向前推推进一步。在在软件工程理理论的指导下下,发达国家家已经建立起起较为完备的的软件工业化化生产体系,形形成了强大的的软件生产能能力 。软件件标准化与可可重用性得到了了工业界的高高度重视,在在避免重用劳动,缓缓解软件危机机方面起到了了重要作用。五、结束语语在现代社会会中,软件应应用于多个方方面。同时,各各个行业几乎乎都有计算机机软件的应用用,比如工业业,农业,银银行,航空,政政府部门等。这这些应用促进进了经济和社社会的发展,使使得人们的工工作更加高效效,同时提高高了生活质量量。随着现代代信息技术的的飞速发展,软软件产品的规规模也越来越越庞大,而软软件开发规模模也导致开发发队伍的逐渐渐增大,如果果没有规则,每每个人都有自自己的一套方方式,甚至有有的人有几套套方式。这样样,当几个人人在一起开发发软件的时候候,最终的结结果就只能是是一片混乱。这这就意味着我我们迫切地需需要一种管理理规范来规范范每个软件人人员的工作,使使每个项目组组成员按照约约定的规则准准时完成自己己的工作。而而软件工程,就就是这样一套套用于软件的的团队开发、以以提高软件质质量和程序员员工作效率为为目的的规范范。首先,我们们要注意到,其其他工业领域域里的工程的的建设目标(比如建设一一座桥梁)以以及工程在整整个工期内所所处的环境是是相对固定的的。而软件工工程则不然。众众所周知,许许多软件项目目(例如MIIS)的用户户往往说不清清楚自己的需需要是什么。不不仅如此,由由于技术进步步,由于软件件的使用改变变了用户的工工作环境,由由于用户周围围环境的变迁迁,由于用户户自身对软件件的功能和使使用软件带来来益处的认识识的加深,软软件工程的建建设目标在工工程进行期间间就会不断地地变更。另外,传统统工业能够在在相当短的时时期内建立起起一套与供应应商无关的部部件分解体系系以及与之相相应的、受到到全社会承认认的工业标准准,从而形成成了严密而有有效的社会分分工体系。而而对于软件产产业来说,在在很长的时期期里,每一项项开发工作几几乎都要从头头做起。软件件部件的重复复利用处于很很低的水平。开开发者很少能能够“从不同同厂商采购软软部件,再加加上自己的东东西,迅速形形成一个系统统”。这种情情况只是到近近几年才开始始改变。很多国内搞搞计算机的专专家都认为:国内的软件件研发过程,个个人色彩比较较浓。过分地地依靠个人无无法形成产业业规模,而没没有规模就谈谈不上产业化化了。实际上上,不管有没没有软件工程程,不管是否否存在一个万万能的框架系系统,我们的的应用系统还是要做做,各种各样样的软件还是是要开发。说说到底,软件件系统是因为有有需求才存在在的。有了应应用域才有了了软件存在的的意义。很多多时候,我们们可以看到国国外有各种各各样的软件和和创新,而我我们没有,我我们还面临很很多的问题,我我们不能说,只只要解决软件件工程问题就就能推进软件件产业。
展开阅读全文