024864-极限编程(XP)的研究及在软件工程中的引用实践-郭强

024864-极限编程(XP)的研究及在软件工程中的引用实践-郭强
024864-极限编程(XP)的研究及在软件工程中的引用实践-郭强

极限编程(XP)的研究及在软件工程中的应用

计研53 郭强024864

【摘要】极限编程是以开发符合变化的客户需求的软件为目标而产生的一种方法,它的成功得益于它对客户满意度的特别强调,XP 使开发者能够更有效的响应客户的需求变化,哪怕在软件生命周期的后期。极限编程是一种经历过很多实践考验的软件开发方法. 已经被成功的应用在许多大型的公司。本文还将结合实际项目中问题以及实际开发的经验,阐述极限编程的运用。极限编程带来了不少新的思想,值得学习和借鉴,在阐述的过程中,本文还要讨论如何能够结合我国软件工程实践的现状,更好的利用这些思想,并指出某些做法的利弊,以供参考。

【关键词】极限编程结对编程迭代协作简单化

一、极限编程的简介

a、什么是极限编程

极限编程(XP) 是一个周密而严谨的软件开发流程。引入了迭代的概念,减少了开发中的瓶颈,风险也随着降低,但核心问题是项目计划。还有一个潜在的因素就是每个项目成员尝试不同的角色,减少项目由于人员流失而带来的周期失控。可是这样做也很有可能使某一个周期迭代的结果发散而不是收敛,无论如何,总比整个项目失控好.

XP对客户满意度的重视是它成功的一个因素。开发满足客户需要且确实是客户需要的软件,这是XP的初衷。XP使得你的开发人员能够自信地面对客户需求的变化,即使是在开发周期的后期。

XP强调团队合作。经理、客户和开发人员都是团队中的一员,他们都应该为了开发出高质的软件而努力。对于这种团体形式的开发,XP采用了一种简单但有效的方式。

XP中许多部分其实都来自于业已存在的那些优秀的开发实践。"XP中没有一个想法是全新的。大多数想法产生的时间实际上和编程一样古老",尽管XP所用的实践方式不是全新的,但是概念的建立以及它们如何融合在一起极大地增强了这些"老"的实践。可以从XP 中提炼出四个关键的思想:交流,简易,反馈和勇气。

XP程序员同客户交流,同他们的同事交流;他们的设计简单而干净;他们通过测试来得到反馈;他们根据变化修改代码,并争取尽可能早地将软件交付给客户。在此基础上,XP程序员能够勇于面对需求和技术上的变化。

XP对生产力也有要求。从已有的报告中,在相同条件下,所有采取XP的项目组都无一例外地比其它项目组的生产力高。但这从来不是XP的目的。XP的真正目的在于按时交付客户需要的软件。如果这对于你的项目而言很重要,你就可以尝试一下XP。

要有充分的培训、要有每个人的提升空间、制定报酬要根据对企业的贡献大小,而不是职位的高低,允许下属比上级薪酬更高,薪酬的高低取决于绩效评定,同时绩效评定要尽可能量化。并且推行淘汰制。同时有有效的招聘制度。有强有力的后勤保障制度和轻松的企业文化。

b、极限编程的应用范围

极限编程(XP)适用于需求经常发生变化的项目。你的客户对系统应该做什么可能没有一个固定的想法;一个系统每隔几个月其功能就要求进行一定的改变。大多数软件项目的需求都处于这样的动态变化之中。与其它的方法相比,XP能够更好地适应这种情况。在我国,电脑化还处于初级阶段,很多客户对于自己的需求在开始的时候很模糊,这样随着项目

的推进,这种情况往往是不可避免的。

XP适用于高风险的项目。如果客户需要一个新的系统,而且要求在某天前完成,这里的风险就比较高;如果你的开发组没有做过类似的系统,风险就更高了;如果该系统对整个软件业来说都是一个新的挑战,那这风险就可想而知。使用XP可以降低风险和增加成功的可能性。

XP适用于小规模的项目组,一般在2到10人之间。使用XP不需要拥有博士头衔的开发人员,一般的开发人员就可以。但不能在一个大型的项目组中采用XP。我们注意到,对于一个需求动态变化和高风险的项目而言,一小组XP开发人员要比大的开发组更加有效。XP对项目组的组成人员有要求。组内不仅包括开发人员,还包括经理和客户,所有人员肩并肩地战斗在一起。软件开发中问题的讨论,项目范围和进度的协商,以及功能测试的创建仅靠开发人员是不够的。

XP对可测试性有要求。你必须建立自动的单元测试和功能测试。虽然在某些情况下这个要求不能满足,但事实上你会惊讶地看到通过某种方式仍然可以达到这个要求。比如可以通过修改系统的设计以使之已于测试。记住,只要你愿意就可以找到一种测试的方式。

对于针对小型项目以及编程而言,在XP(至少是Beck的书中)里对管理的欠缺是可以理解的,。就如Beck写的,"对于教练(coach)来说,或许最重要的工作就是获得玩具同食物"(指导是Beck的管理战略中的一个组成部分)

同许多的程序员一样,他们推荐的管理策略像是:躲避。下面的假定呢?躲避会建立一个协作的环境,在传统的基于任务的管理里,这个假定是有效的。然而,根据我的经验,创造并维持一个协作的环境会挑战管理远离编制任务列表以及检查。

Beck从他的早期的著作开始,就不断向那些软件工程中的一些"古训"发出挑战。从19世纪70年代中期的结构化方法,以至后来的那些更复杂的方法,他们都基于如图1所示的那个"事实",在整个80年代,我必须了解、使用、讨论、实施这些方法。

figure 1 history lifecycle change cost

Beck却给我们提了一个问题,那些在70年代和80年代也许还能起到效果的方法,他们的经费开销状况(如图1)现在已经发生了变化(如图2),也就是说,维护的成本(也可以等价为不断发生的变化)降低了,而不是越来越高。实际上,图2所示的开销情况在当今是否是事实其实并不重要,重要的是我们必须认识到,如果图1的现象还在继续重演的话,我们只有死路一条,因为当今时代变化实在太快了(也就是说维护的成本将是一个天价)。

Figure 2 -- Contemporary lifecycle change costs.

图1中的y轴通常用来表示在开发周期的后期发现错误后需要花费的改错成本。可是,这正验证了一个假设,即后期所有需要做的开动均来自前期的一个错误,比方说一个设计缺陷。从这一点来看,传统方法太依赖于在软件生命周期的早期"不出错"。但是在当今瞬息万变的环境中,我们不能完全预防住那些我们预测不到的东西--即由应用需求不断增长而带来的变化,并且这种变化在早期不可能遇见并加以预防。因此,虽然我们要尽可能在早期做出某些应付变化的预防措施,但是更重要的是我们要减少后期改变所带来的开销。正如Alistai Cockburn 所指出的,需要高成本的图1所示的那种改正缺陷方法,正好从节省开支的角度给了一些实用的方法(如配对编程)一个好的理由。

二、极限编程在软件工程中的实际应用

a、国内的现状

目前在国内,大部分的软件开发都是以模块为单位的,一个项目确定后,项目负责任依据功能将项目划分几大模块,根据工作量的大小,进行任务划分,每个项目开发人员负责一个模块的编写。项目中很大一部分是应用项目,局限性很大,这个应用结束之后,可能相应的软件就没有多大的应用价值了。

即使是一些比较大的公司,其系统调研也更依靠系统分析员的经验,因为客户很少又在项目初期就对自己的需求了解的很清楚,而且即使客户有了解,我们的程序员不一定可以很深入的了解道,并实施道项目当中去!如果项目负责人是一个有着丰富经验的高级系统分析员,以前从事过这样的项目,根据以前的经验,可以很好的总结,并指导项目组按照一定的方向实施,可能会达到比较满意的结果。可是一方面项目有各种各样的不同,另一方面,一个人的经验往往可能无法跟上变化,这个时候有可能导致很周密的先期分析、调研可能导致的是完全不合需求的产物。而且,对于任何一个项目,在项目的开始就有很完善的设计,几乎是不可能的事情,随着项目的进行,总会发现没有考虑到的东西越来越多的出现,有可能是在开始的完全错误的设计。已经完成的模块,完全不是符合用户需求的产品。造成极不好的影响!一方面拖延了项目的工期,加大了项目的成本,另一方面,降低了用户的信任度,不利于项目的进一步实施!对于这种情况,有几种解决办法,第一就是在项目的初期,保证对项目的理解正确地情况下,和用户签订协议,把项目的目标集中在核心的模块上,当需求发生变化时,可以尽可能的忽略,根据计划继续进行下去,如果这种缺陷可能是无法回避的,

可以同客户签订备忘录,对项目进行调整,尽量减少项目的风险和成本。第二种就是限编程方法。

在国内,很多项目要求可以看到明显的进度,这样有阶段性的成果,对下一步项目的实施以及客户的满意都有很重要的影响,客户会采取更主动的态度,有利于软件的开发,而这个时候,采取极限编程往往可以得到比较好的结果,极限编程就是强调小型的发布,迭代的开发。

b、极限编程的应用

应记住的一件事情就是我们应倾向于在小型的, 局部的团队中运用XP。除了代码与测试用例外, 尽量减少有限的影响。XP的实践既有正面的表现,也有负面的。在某些方面看来,他们听起来就像一堆规则,要做这个,不要做那个。对此Beck解释道, 与规则相比, XP更像是指导方针,一个灵活的依赖于具体环境的开发方针。但是诸如"每周工作40小时"等看起来可能会感觉罗嗦。Jeffries使得实践也会互相作用的,平衡,互相加强。以至于挑选使用的同丢弃的都是棘手的事情。

交流,应该保持开发队伍的交流。这样才能保持队伍的活性。在一个开发队伍当中,程序员的素质是不一样的,有经验非常丰富的高级程序员,也有代码量很少的程序员。这样就造成了开发上的难度,不能保证每个人对制订的标准和开发的规范是完全理解的,而理解伤得偏差反应在程序里就会造成借口的不统一,模块独立性的下降。这样只有通过加强程序员之间的交流

小型发布以及迭代式的开发,就如同备考一样。参加高考,需要参加许多的模拟考试,这样才能保持状态,不断的检验自己的盲区和不足,适时的弥补缺陷。项目开发也是一样的道理,只有保持明确的短期目的,才会保持团队的目标,避免在项目开发过程中迷失方向。需要不断的修正前进的方向,以保证不会偏离轨道或太远。

站立会议,要求项目组全体参加,而不是某几个人。这种形势有利于团队之间进行沟通,每个成员随时了解整个项目的动态,以对自己的工作做出调整,避免出现,软件开发了大部分,却不合要求的情况。站立开会要求更高的效率,任何人的迟到都可能引起大家的不满,而且要求会议的内容尽可能的精简和重要。

简单化:不要增加没有列入到进度中的功能。有些功能听起来确实恨诱人,但实施的时候却可能成倍的增加项目的难度,而且可能并不适用。据调查,仅有10%的预留功能在将来发挥了作用,其他全是无用功,为什么不等到明确提出这种需求的时候再去实现呢?尽可能的针对当前这个项目,有利于项目的实施,和集中精力完成核心功能。注意力太过分散,只会得不偿失。例如,有两个做医院MIS的公司,一个公司在开始的时候实力稍强(以下简称A),签了一家比较大的市级医院作为试点,如果这个项目成功,则意味着该市的医院都将成为潜在的市场,甚至可能全国的医院。而另外一家公司开始的规模并不大(以后简称B),开始的规模仅为一间办公室,10个左右的开发人员,其中只有一名资深程序员。在开始的时候,仅利用低廉的价格争取了一家郊区的医院作为试点。而可能正是起点的不同导致了结果的不同。A在开始就把目光放在了医院整体软件上面,其方案非常庞大,希望开发出旗舰级的软件,认为医院的核心就是医疗器械,认为这是医院的特色,甚至想涉足医院的医疗成像等专用设备,希望通过电脑联网,实现网上诊断。预留了非常多得接口,软件非常庞大。如果可以实现的话,将是非常成功的软件。但是由于医疗方面的好多软件涉及到图形学、医疗知识等许多领域,并没有相应的成形软件,即使有的话,由于知识产权的缘故,并没有提供相应的借口。结果可想而知,软件迟迟不能发布,客户信心逐渐丧失。而B在开始的时候,就把精力集中在几个核心的领域,他们认为医院作为一个企业,关心的是他的经济利益,所以重点放在了住院,药方,门诊,库房等领域。还有目前在医院已经用电脑化的部分,参考已有的软件进行设计,由于有现有的软件参考,实现起来比较容易。最后的结果是项目

按期交付,大大降低了医院员工的劳动强度,实现了医院管理的透明化,因为医院最关心得还在于账目的管理,而不在一些以前并未涉足的图形图像领域,赢得了客户的好评,客户配合非常积极。而且在这期工程实现后,医院意识到了自己的需求,主动要求增加二期工程,这样不仅占领了市场,而且赢得了时间。现在去这个市,市里的医院大部分都在使用该公司的软件,而这个市是一个直辖市,市场可谓很大。所以,要在开始的时候集中精力,作一些客户最关心的东西,让客户可以感觉到实现自动化所带来的好处,这样才可能更大的挖掘客户的潜能,有利于吸引客户。不管是从开发的角度,还是从市场的角度来说都是非常好的。一定要脚踏实地,不要头脑发热。程序员都有希望得到他人认可的冲动,往往希望通过一鸣惊人来达到这种目的,希望可以推出尽善尽美得软件。但是往往是得不偿失,到后期往往是一方面不能得到客户的认可,另一方面由于精力放在了多余的方面,继续投入精力觉得浪费,不投入精力有无法完成功能模块,结果越走越远。所以随时随地对自己做过的东西毫不留情地简化,将设计、编码简单化,简单得足够容易理解、修改和扩展,这才是编程应遵守得法则。

测试,也是非常重要的。单元测试是XP方法中的小界石,但与传统的单元测试略有不同

1、要创建或下载一些单元测试工具以便能够自动生成测试数据

2、测试系统中所有的类

3、单元测试应与其所测试的代码一起发布

4、没有单元测试的代码不能发布

5、若发现没有进行单元测试,则立即开始进行

一家软件公司客户引用一个内部研究结果,表明在测试阶段发现一个缺陷需15小时,在Inspection阶段发现一个缺陷则需2-3小时,而在Inspection之前发现缺陷只需15分钟。后面的数据来自于产生于常规审查的持续的团队学习。"对于编程而言,乐观主义是一种冒险。而反馈则是相应的解决良药。无论是用反复的构建或者频繁的用户功能测试,XP都能不断地接收到反馈。虽然每次对软件开发策略进行研讨时,我们都会说及反馈--即使是非常有害的瀑布模型--不同的是XP的实践者认为反馈比起前馈(feedforward)来更为重要。无论是对测试失败的代码进行修改或者是对用户拒收的软件从新返工,开发环境的快速变化要求开发人员对反馈有更好的认识。在我们ddb的工程中,我负责的模块先期测试做得很少,想当然的认为没有什么问题,认为即使有问题,也不是什么大问题,结果代码累计越来越多,当上千行之后,测试就成了一个麻烦。最终在联调的时候,出现了许多预想不到的错误,需要一个一个函数,一个一个模块检查过去,甚至整晚都在排除一个错误,导致了时间上的严重浪费。有一些问题,甚至就是初期设计上的严重不足,属于先天的不足,属于架构上的错误,但是由于编程只停留在编码的阶段,只是编译通过,并没有实际进行运行和黑箱测试。最后导致了灾难性的后果,一大块代码必须废除,根本没有办法融入到整体当中,留下了惨痛的教训。

在极限编程当中强调配对编程,"配对编程是两个人试图同时编程和理解如何更好编程的一种对话",让两个人同时坐在一台终端前面(一个人敲代码或测试用例,一个人审查和思考)产生一种持续的、动态的交流。Williams在犹他大学进行的博士论文研究证明了配对编程不仅仅是一种美好的想法而且确有实效。可是在我国的环境下,配对编程不一定是一个好的想法,由于我国的人才培养制度和工作环境,我国的软件开发人员大都习惯于独立开发,而且这被证明是非常高效的制度,三个和尚的故事我觉得还是有一定的道理。但是可以采纳配对编程的想法,编程的过程中进行交叉测试,交叉排错。这样既可以提高开发的效率,又可以增加程序的鲁棒性,增加程序员之间的交流,更有效的开展整个项目。

客户是非常重要的资源。一方面,没有客户的好的配合,工作的开展将是非常的困难,几乎就是不可能完成的任务,先期的调研到后期的实现,必须有客户的配合;另一方面,客户的反馈是非常重要的,如果最后得不到客户的认可,这个项目就是失败的。在给一个企业做MIS的时候,在开发的前期,根据已有的调研进行项目的开发,经常会遇到不知道应该怎么办的情况,因为好多情况,不是仅凭调研就可以想象到的,一些具体细节和流程是我们所不熟悉的。结果在现场调试的时候,客户提出了很多疑问,很多地方是完全不符合要求的,鉴于这种情况,我们当时采取现场开发的办法,这样可以随时向客户咨询,每当我们完成了一个功能模块,我们就让客户进行检验,随时获得反馈,这样取得了意想不到的好的效果,工程进度大大提高,主要原因是少走了很多弯路,可以直接的把客户的应用转化成为我们的需求,从而满足用户的要求。

另一方面,我觉得在极限编程的许多介绍回避了很重要的一点,那就是把客户当成你的开发伙伴,贯穿于整个周期中,但客户的主要功能是在实际的使用中给开发者提供有效的反馈信息,开发人员可以做到及时分析客户的反馈以调整程序,但是大量的运行数据已经发生(客户的业务数据),调整程序必然会引起数据的规范,这个工作量伴随着整个开发周期,而且不容忽视。举个例子,在你的初期模型运行了两个月后,你突然发现设计中存在很大的漏洞,导致系统查询的速度非常的慢,因为在主要使用的表中存在着大量的低概率使用数据,这个时候你要重新考虑设计,也许会将经常使用的数据和不常使用的数据进行分离,那么在第二个周期,又一个很重要的工作就是数据分离,如果在第三个周期,突然发现又一种现象你的程序无法处理,这个时候也许你需要一个标志位什么的进行区别,那么以前的数据是不是要根据具体情况划分到不同的情况中去(设置标志位),这些工作必须是建立在数据完整和规范的基础上,否则你的下一个周期就无法得到正确的结果。

另外,让我们进一步做个简化,即假定软件的用户需求已经确定。我们的目标是既能快速不断的发布新功能,同时又要让软件的设计易于更改。即使是在快速发布这个目标下,仍然需要在"快速发布但Bug丛生"和"面面俱到但旷日持久"之间进行取舍。因此,让我再简化一下我们要讨论的问题,我们假定我们已经在设计、编码和测试这三者之间取得了合理的平衡。

在上面这些简化的基础上,还留有一个尾巴:我们在设计时对于未知的未来要看多远?现在的设计已经实现了我们现在想到的一些功能。具有预见性的设计可以使未来的需求更快的获得实现,也就是说预见性设计方法在以现在的时间换取未来的时间,如果一点点现在的时间可以换来未来节约大量时间,当然是划算的。但是这种建设怎么才能成为现实呢?也许未来出了问题就整个重新设计一遍也不慢,那又何必现在瞎猜呢?

这就是我们为什么要提出重构的原因。重构,Martin Fowler说过,是不改变软件对外表现但是重整内务的一种改进。XP方法的支持者在变化的环境中实践了连续的、增量式的重构方法。如果变化是不断演化的,那就不可能存在什么一步到位的设计方法。说白了,如果变化不可预测--正如当今社会的情况--过多的在设计时考虑以后可能的变化,完全是一种浪费。

我认为图3给出的是互联网时代到来之前的情况。由于变化的速度慢(图中由天平的支点比较靠左来表示),早期的预测多一些是合理的。但是在图4中,由于变化速度变快了,设计时预测太多是得不偿失的,这种情况正是现在许多系统所面临的。

Figure 3 -- Balancing design and refactoring, pre-internet

Figure 4 -- Balancing design and refactoring today.

在一个长期项目中,检验一个设计是否具有很好的灵活性是通过变化需求,同时看看原设计能否很容易的实现新变化的需求。这种传统的"先设计,再维护"策略的最大问题在于软件系统存在非常大的熵(极易变化,没有规律)。一个系统随着时间的推移,维护、改错、打补丁、增强功能等工作会使系统的熵越来越大。现在由于外部环境变化加快,情况正越来越糟。不过,现在的重构技术也不是第一个试图解决这个问题的方法。早在所谓的"黑暗时期"(circa 1986),Dave Higgins指出了由于随着时间的推移变化的累计影响不断增大,维护所需要的开销也将越来说庞大,Higgins 提出了一种新的设计方法(the Warnier/Orr Approach)用于阻止系统的熵增大所带来的负面影响,该方法的思想是在维护过程中有系统的对程序进行重新设计。

Higgins 的方法首先为程序改如何设计设定一种模式(虽然那时还没有模式这个提法),然后在细致的代码设计与"好"的模式之间建立一种映射,程序员即根据这种映射关系来理解系统并修改程序,使修改的结果更接近于那个模式。使用Higgins 这个方法可以通过维护抵消系统谁时间而熵增大的趋势。Higgins 说:"该方法的目标并不是重写整个系统,而只是重写那些根据需要必须增强的部分。"

虽然这种原始的"重构"技术并没有被广泛的实践检验,其思想与现在的重构还是相通的,只不过现在的需求变化更快、更大。不过有两个东西驱动、提高了现代的重构技术:一是更好的程序设计语言和开发工具;二是更快的变化需求。

在早期的RAD(快速原型开发)方法中还有另一种应付变化的办法:代码抛弃思想。这个思想认为环境和需求变化太快,因此我们唯一的办法只能是快速编写新代码,并且也快速的抛弃老代码。我们认为这不是长久之计。

重构,设计模式,对单元测试的充分理解,配对编程----这些都不是黑客们的工具。它们是开发者们为了解决产品快速发布,同时又能保持较少的缺陷和灵活性时探索出的新方法。关于质量,Beck说,"只有两种情况下是有价值的:'优秀'或者'极其优秀',这取决于其对软件产品生存的影响程度",以及"执行测试直到它们通过(100%正确)"。你也许可以指责XP的实践者是受到了蒙蔽,但是他们决不是那种不重视质量的黑客。

三、总结

对于传统方法的支持者来说,缩短发布时间是质量的敌人。然而,我看过一些开发速度很慢而且质量非常差的软件,就象我看过的另一些开发速度很快但质量低下的软件一样。虽然在时间和质量间存在一些明显的联系,但我认为这个联系比我们一般所想象的要的复杂的多。.

传统方法可用于开发那些变化程度不大并可预期最终结果的软件。然而,商业世界却是变化莫测的,并且传统开发方法已无法满现在的快速变化软件需求的要求。轻量级软件开发实践的创始人Bob Charette认为"由于软件工程研究所(SEI)这样组织的官僚化、顽固性,以及诸如CMM的实践,使得他们日益脱离当今的软件开发。.

XP中的各个独立实践,都是从著名的,经过很好的测试的传统实践中抽取出来的。这些原则驱动着实践的使用,与一个特别的实践最小集自然的一体化在一起,使得XP成为一个解决现代软件开发问题的新方案。

但是所有的这些新实践都没有很长的历史,它们没有被加以研究和度量。然而我坚信,我们混乱复杂的电子商务经济需要我们重新审视如何开发和管理软件发布。这些方法虽然很新,但它们提供了有价值的另一条思路。

【参考文献】

1、《Extreme Programming Examined》,Person Education,(加)Giancarlo Succi,(美)Michele Marchesi著

2、《Planning Extreme Programming》,Pearson Education,Kent Beck,Martin Fowler著

3、《解析极限编程——拥抱变化》,人民邮电出版社,Kent Beck 著

软件工程与实践

软件工程与实践 ————— 任务二:Microsoft Visio2013应用 /软件可行性分析报告 姓名: 学号: 专业班级: 指导老师: 日期:

Microsoft Visio2013应用 一、实验目的 本实验主要通过实际操作,掌握相关的常用绘图功能。 (1)熟悉Visio的工作环境及组成 (2)掌握用Visio软件绘制图表的基本操作 (3)能熟练运用Visio软件绘制各种较复杂的专业图表 (4)掌握各种图表文档创建方法 二、实验要求 要求能够熟练运用Visio 2013软件所提供的菜单、工具、模型等制作图形或图表;能用Visio软件所提供专业图形模板,来自行绘制出专业化、高质量的图形或图表。

三、实验内容及步骤 应用Microsoft Visio 2013设计一个基本流程图模型。为了便于快速掌握利用Microsoft Visio 2013 绘制流程图的有关用法,先介绍主界面及相关功能,逐一进行常用菜单栏和工具栏等各项功能和操作方法。 四、实验总结 通过对Microsoft Visio 2013的使用,我们掌握了基本的制图技巧和功能,由此为将来的软件设计流程图打好基础。

软件可行性分析报告 一、实验目的 (1)熟悉业务应用系统的分析方法,加深对软件工程概念的理解。 (2)掌握“软件可行性分析报告”的内容、书写格式和注意事项,明确可行性分析的任务和具体过程。 (3)掌握软件项目可行性分析中成本-效益分析的常用方法。 二、实验任务及要求 (1)针对“学籍管理系统”(或分组自选专题)具体实际业务应用的调查研究,进行具体的可行性分析。 (2)掌握可行性分析报告编写的方法和步骤,明确可行性分析报告的内容和具体格式,从技术、经济、运行等方面进行可行性论证,撰写出“可行性分析报告”。 三、实验内容及步骤 结合“学籍管理系统”(或分组自选专题)的实际业务应用,进行调研分析,并编写出“软件可行性分析研究报告(FAR)”。 由此针对我们小组自选的专题——图书馆管理系统来制定相应的调研分析,内容如下所示:

软件工程专业实习报告3篇

软件工程专业实习报告 软件工程专业实习报告(一) 1 企业概述 1.1 企业发展简史 开封天一软件科技有限公司(原河南省开封市王子科技公司)是经国家工商管理机构注册批准的一家专门从事企业软件开发与办公信息化建设的高科技企业,公司拥有一批经验丰富、技术精湛的系统设计、实施及售后服务人员;公司拥有雄厚的技术实力和核心自主知识产权,能为企业提供从技术咨询到解决方案;从电脑设备供应到软件产品定制;从软件操作培训到售后维护服务等全过程的高层次优质服务。公司自主研发的软件产品涵盖了企业办公、财务管理、互联网应用、服务器出租、服务器托管、进销存管理、工业控制,仪表数据采集与测控,人工智能等多种商业领域。公司本着“采用先进技术和平台,提供高效、稳定的软件系统”的产品质量方针和“一切以用户为中心”的企业服务理念,与您共同推动我国企业的信息化建设。 1.2 企业现状 一个没有优秀民族文化的民族,不能自强于世界民族之林;同样,一

个没有优秀企业文化的企业也不能自强于市场竞争之中。天一软件科技有限公司将禀承“用户至上、用心服务”的服务理念,创建独具特色的国际化IT企业文化,借鉴中外软件企业的成功经验,与国内外友商精诚合作,紧趋世界信息技术发展潮流,致力于民族软件业的腾飞,向着成为中国一流的国际化IT企业的目标迈进!为了实现“让客户尽情享受信息新生活”的企业使命,天一软件着力进行业务与服务创新,持续不断地向广大客户推出科学、适用的业务,较好地打造了业务品牌形象和优质服务形象,理念先进、功能完善的天一综合短信系统系列产品,天一商务领航平台、天一统一充值平台等系统逐渐深入客户的实际应用,提升客户感知的进程没有终点,福富软件以创新的精神推出业务、服务客户的追求永无止境。 天一软件强调以人为本,认为对员工的投资是最重要的投资,通过对员工的培训提高员工的技术能力,并在平时通过多个方面让员工随时随刻感受到盛鸿这个大家庭的温馨、友爱。 创新是一种积累。不积跬步,无以至千里;不积小流,无以成江海。我们的邻国日本战后一片狼籍,但是凭着“每天PDCA,每天进步1%”的精神,一点一滴的创新,终于成就了一个科技和经济强国。创新不是海市蜃楼,她就在我们身边,伟大的创新也许当初只是一个看似很傻的念头,但如果当初没有人插上翅膀想飞却飞不起来,有怎么会有今天的飞机呢公司将创新理念运用在公司的发展,项目的开发当中。天一当前的创新重点在于业务创新、技术创新、管理创新,提倡大胆创新,不怕失败,“莫以

软件工程实践者的研究方法(中文版第七版)课后习题答案

作业答案。 2.1 a.设计者对于用户要问的问题: 项目的目标是什么?做到什么程度就成功了?谁会对项目的成功做最后的评判?项目的使用者包括那些? b. 用户对设计者应该问的问题: 目前问题有哪些解决方案,项目完成有哪些难点,在时间范围内能否完成? c. 软件问题用户自问? 还有其他解决方案吗?哪些功能是必须的?乙方资质和能力够吗? d. 软件过程问题自问? 用敏捷还是用瀑布?质量检查点分别有哪些?有几个MileStone? 2.2 为沟通活动设计一系列动作,选定其一并设计任务集。 (批作业的时候,以合理为目标,不一定要一样) 需求获取、需求规范说明(建模)、需求协商、需求确认等。 例如,书上page 23。 2.7 详细描述三个适合用于瀑布模型的软件项目。 (要求学生不仅仅列出项目的名称,而要说明为什么适合) 瀑布模型适合于项目开发而不是产品开发。信息管理系统一般适合于用瀑布模型。因为这类系统业务功能较为明确,架构比较单一,技术难点较少。图书馆系统、销售管理系统都是。 3.11 重构:已经写好的正确的代码,不断修正,使得代码更加精简并易读。 结对编程:两个人同时编写一段代码,一般一个人负责实现,一个人负责检查代码质量。 3.16 利用FDD,为“Web浏览器”定义一系列特征集合与特征。 特征集合模板: an 如:出售一件商品 特征定义模板: the a(n) 特征集合:展示Web页面内容。 特征: 1)本地解析HTML页面 2)展示HTML页面 3)从网络上下载页面相关图片 4)在浏览器上展示图片 附加:统一过程模型的图。 (要求有图有说明)

软件工程专业实习报告

软件工程专业实习报告 软件工程专业>实习报告(一) 1 企业概述 1.1 企业发展简史 开封天一软件科技有限公司(原河南省开封市王子科技公司)是经国家>工商管理机构注册批准的一家专门从事企业软件开发与办公信息化建设的高科技企业,公司拥有一批经验丰富、技术精湛的系统设计、实施及售后服务人员;公司拥有雄厚的技术实力和核心自主知识产权,能为企业提供从技术咨询到解决方案;从电脑设备供应到软件产品定制;从软件操作>培训到售后维护服务等全过程的高层次优质服务。公司自主研发的软件产品涵盖了企业办公、>财务管理、互联网应用、服务器出租、服务器托管、进销存管理、工业控制,仪表数据采集与测控,人工智能等多种商业领域。公司本着“采用先进技术和平台,提供高效、稳定的软件系统”的产品质量方针和“一切以用户为中心”的企业服务理念,与您共同推动我国企业的信息化建设。 1.2 企业现状 一个没有优秀民族文化的民族,不能自强于世界民族之林;同样,一个没有优秀>企业文化的企业也不能自强于市场竞争之中。天一软件科技有限公司将禀承“用户至上、用心服务”的服务理念,创建独具特色的国际化IT企业文化,借鉴中外软件企业的成功经验,与国内外友商精诚合作,紧趋世界信息技术发展潮流,致力于民族软件业的腾飞,向着成为中国一流的国际化IT企业的目标迈进!为了实现“让客户尽情享受信息新生活”的企业使命,天一软件着力进行业务与服务创新,持续不断地向广大客户推出科学、适用的业务,较好地打造了业务品牌形象和优质服务形象,理念先进、功能完善的天一综合短信系统系列产品,天一商务领航平台、天一统一充值平台等系统逐渐深入客户的实际应用,提升客户感知的进程没有终点,福富软件以创新的精神推出业务、服务客户的追求永无止境。 天一软件强调以人为本,认为对员工的>投资是最重要的投资,通过对员工的培训提高员工的技术能力,并在平时通过多个方面让员工随时随刻感受到盛鸿这个大家庭的温馨、友爱。 创新是一种积累。不积跬步,无以至千里;不积小流,无以成江海。我们的邻国日本战后一片狼籍,但是凭着“每天PDCA,每天进步1%”的精神,一点一滴的创新,终于成就了一个科技和经济强国。创新不是海市蜃楼,她就在我们身边,伟大的创新也许当初只是一个看似很傻的念头,但如果当初没有人插上翅膀想飞却飞不起来,有怎么会有今天的飞机呢公司将创新理念运用在公司的发展,项目的开发当中。天一当前的创新重点在于业务创新、技术创新、管理创新,提倡大胆创新,不怕失败,“莫以善小而不为”,从工作中的每个细节入手,从一点一滴做起,让创新逐渐成为习惯。

软件工程与实践课程设计

《软件工程与实践》课程设计方案 本课程属专业必修课,是一门实践性较强的计算机类课程,授课对象为计算机专业及相关专业的本科生。本课程是对软件工程课程所述内容的进一步深化与具体应用,通过启发式教学和大量实例的练习,引导学生完成不同类型系统的分析与设计工作,培养学生关于软件工程理论的实际运用能力、软件开发实践动手与文档编写及组织管理能力,同时培养和提高学生在软件开发过程中的团队协作精神。 在课程设计过程中必须完成以下一些环节: 1、任务布置与说明,备有多个题目供学生选择。 2、学生自主分组,并展开软件项目的选题与论证,要求提交分组项目选题和组织分工。 3、进行可行性研究,编写可行性分析报告和项目开发计划,并进行审查。 4、获取需求,编写软件需求规格说明书,并进行审查。 5、进行系统分析和设计,编写软件分析设计报告,并进行审查。 6、通过实现系统主要界面来模拟软件实现,并进行审查。 7、编写软件测试计划,编写软件测试分析报告,并进行审查。 8、编写用户使用说明书,并进行审查。 可供选择的课程设计方案: 1、图书馆图书预定系统的设计与实现 功能如下:(1)由供书部门提供书目给订购组;(2)订书组从各单位取得要订的书目;(3)根据供书目录和订书书目产生订书文档留底;(4)将订书信息(包括数目,数量等)反馈给供书单位;(5)将未订书目通知订书者;(6)对于重复订购的书目由系统自动检查,并把结果反馈给订书者。 2、网络考试系统的设计与实现 要求基于B/S模式来构建整个网络考试系统,整个系统拟由试题库管理子系统、学籍管理子系统、成绩管理子系统、网络考场四大模块组成。系统用户端划分为学生端、教师端和管理员端,通过数据库操作权限设定等机制来保证系统及相关数据的安全性。 3、网上购物系统的设计与实现 着重研究、设计与实现用户管理、目录管理、信息录入管理、定单管理、浏览和查找、购物结帐等功能。 (1)会员注册、登录与管理模块,包括新会员注册、会员身份验证、会员身份注销和预定制商品。 (2)商品陈列上架模块,实现商店所有商品的分类上架,供用户浏览选择。 (3)为客户提供各个商品信息细节展示模块。 (4)为客户提供所选择商品的浏览、退货等管理模块。 (5)购物车模块,需要完成用户选购商品,购物订单生成功能。 4、病员监护系统的设计与实现

软件工程实践者的研究方法-背诵知识点

软件的定义:软件是:1)指令的集合,通过执行这些指令可以满足预期的特征、功能和性能需求;2)数据结构,使得程序可以充分利用信息;3)软件描述信息,以硬拷贝和虚拟形式存在,描述程序操作和使用。 软件与硬件的区别:软件是设计开发的;软件不会磨损;大多数软件是按需求定制的。 IEEE定义:(1)将系统化、规范化、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件;(2) 在(1)中所述方法的研究。 软件工程的层次:软件工程的根基在于质量关注点。软件工程的基础是过程层。过程将各个技术层次结合在一起,使得合理地、及时地开发计算机软件成为可能。方法为构建软件提供技术上的解决方法("如何做")。工具为过程和方法提供自动化或半自动化的支持。 通用过程模型的5种框架活动:沟通、策划、建模、构建、部署 8个典型的普适性活动:软件项目跟踪与控制;风险管理;软件质量保证;技术评审;测量;软件配置管理;可复用管理;工作产品的准备和生产 软件神化:关于软件及其开发过程被人们盲目相信的一些说法,它实际上误导了人们对软件开发的态度。 螺旋模型:?一种风险驱动型的过程模型,一种演进式软件过程模型。它结合了原型的迭代性质和瀑布模型的系统性和可控性特点。具有快速开发越来越完善软件版本的潜力。 统一过程(UP):以用例为驱动、以系统架构为核心,迭代式增量式开发过程。RUP包括起始、细化、构建、转换和生产5个阶段。五个UP阶段并不是顺序地进行,而是阶段性地并发进行。 成熟度级别:第0级:不完全级、1已执行级、2已管理级、3已定义级、4已定量管理级、5优化级软件生命周期:软件计划与可行性研究、需求分析、软件设计、编码、软件测试、运行与维护 瀑布模型:一个系统的、顺序的软件开发方法。缺点:实际项目开发中很少遵守瀑布模型提出的顺序;客户难以清楚的描述所有的需求;客户要等到开发周期的晚期才能得到可执行的程序;在线性过程的开始和结束,容易发生“阻塞状态”。 敏捷团队成员特点:基本能力、共同目标、精诚合作、决策能力、模糊问题解决能力、相互信任和尊重、自我组织 极限编程过程包含4个框架活动:策划、设计、编码、测试设计原则:KIS 重构:以不改变代码外部行为而改进其内部结构的方式来修改软件系统的过程 结对编程:两个人面对同一台计算机共同为一个故事开发代码。 优点:结对的两人完成其工作,他们所开的代码将与其他人的工作集成。这种集成作为集成团队的日常工作实施。还有一些情况下,结对者自己负责集成,这种“连续集成”策略有助于避免兼容

软件工程实习报告范文

软件工程实习报告范文 光阴荏苒,时光飞逝,转眼间到了实习结束的日子。从进公司实习到现在,我已经到公司近6个月了,感受 颇多,收获颇多。期间,通过公司领导的关心和帮助, 同事的指导,使我能够很快地了解公司的管理与运作程序,我了解了公司的发展概况,熟悉了公司的流程和行 业的基础知识,使我逐步学会如何从一个刚出校门不久 的实习生转变成一个职员。以下是我这一阶段的工作总结。 学习无止境,职业生涯只是学生生涯的一种延续。 对于一个实习的学生,初踏入职场,进入专业的软件公司,对开发软件没有一点经验。不论在人生的哪个阶段,学习的脚步都不能停歇,要把工作视为学习的殿堂。所 以在这几个月当中,我一边学习,一边从最基础的事情 做起,这样的好处在于能够在工作的过程中,了解项目 的整体布局,了解项目中的业务逻辑,了解项目中尚未 完成的工作并以此作为下个阶段的工作目标。在这几个 月的工作中,我的主要任务是对客户使用的map系统进 行测试,并且做相应的文档记录和一些简单的配置修改。几个月里,我工作勤勤恳恳,并按时完成安排的任务。 尽最大的努力解决客户在工作中遇到的问题,从中我也

学到了在学校里学不到的东西,也明白了很多道理,我 相信对我以后的工作都将大有裨益。其它方面,我全力 协助公司的工作,在公司人手较忙的时候,为公司分担 事务,圆满地完成公司委派的任务。在这几个月的工作中,最初我会遇到一些我解决不了的问题,我会咨询公 司另两位同事王鹏、孙距均。在他俩的指导和帮助下, 我的技术技能不断提升,对整个MAP系统和配置工具的 使用逐步熟练,思维方式和工作方法也不断提升,直至 到目前我基本能解决客户在使用MAP系统过程中遇到一 般问题的问题。 在近6个月的工作过程中,我在领导和同事们的帮 助和支持下取得了一定的进步,但我深知自己还存在很 多缺点和不足,与工作需要还有一定的差距。在工作中 未能考虑的各种因素还有很多,比如:对整个MAP系统 的掌握还不够熟练、工作的灵活性还不够、服务意识还 有待提升等等,这都有待于在今后的工作中改进。虽然 我目前的工作只是做基础方面,希望在下一年度公司能 够委派我做一些其它工作,使我在工作中不断提升自己,同时也为公司分担一些事务,使我逐步做一名合格的项 目实施人员。做软件的人必须要随时充电,在今后的工 作中,我要积累经验教训,不断调整自己的思维方式和 工作方法,在实践中磨练自己,我将以饱满的热情和进

软件工程实习报告范文4篇

软件工程实习报告范文4篇 一、关于实习公司 我所实习的南京xx软件有限公司简称xx公司,公司成立于XX 年,主营软件开发和信息系统集成,专门从事工程建设项目管理信息系统开发和实施,具有自主知识产权的项目管理软件产品xx项目管理系列软件(包括xx投资控制合同管理软件、xx进度控制计划管理软件、xx质量控制安全管理软件、xx项目管理门户、xx城建项目管理平台等),并已经在全世界第一大桥苏通长江大桥、国内最大的开发区苏州工业园区以及南水北调工程实施和应用,目前正与南京城建集团合作,开发城建项目管理平台。 二、实习的内容 今年xx月xx日开始,我正式走进xx开始了实习工作,并被调到了江苏省建筑质量检测中心,参加正在进行的一个检测项目。由于我才大三,本身对企业的经营方式等都很陌生,公司让我们的王工带我学习,以师傅带徒弟的方式,指导我的日常实习。在王工的热心指导下,我依次对此次项目的业务流程和大概框架进行了了解,并积极参与相关工作,注意把书本上学到的理论知识对照实际工作,用理论知识加深对实际工作的认识,用实践验证大学所学确实有用。以双重身份完成了学习与工作两重任务。跟公司同事一样上下班,协助同事完成部门工作;又以学生身份虚心学习,努力汲取实践知识。我心里明白我要以良好的工作态度以及较强的工作能力和勤奋好学来适应公司的工作,完成公司的任务。

三、实习的提高与收获 实习收获,主要有四个方面: 一是通过直接参与企业的运作过程,学到了实践知识,同时进一步加深了对理论知识的理解,使理论与实践知识都有所提高,圆满地完成了本科教学的实践任务。 二是提高了实际工作能力,为就业和将来的工作取得了一些宝贵的实践经验。 三是一些学生在实习单位受到认可并促成就业。 四是为毕业后的正式工作做好了准备。 四、结语 到公司实习并没有我想象中的难以融入,通过慢慢的学习,发现在公司用的到得知识在我们的学校学习中都会遇到。至暑期结束,从不懂到渐渐的做了几个检测项目。学到不少的东西。实习生活还没结束,开学了我还是会继续留在公司我的学习和探索。 光阴荏苒,时光飞逝,转眼间到了实习结束的日子。从进公司实习到现在,我已经到公司近6个月了,感受颇多,收获颇多。期间,通过公司领导的关心和帮助,同事的指导,使我能够很快地了解公司的管理与运作程序,我了解了公司的发展概况,熟悉了公司的流程和行业的基础知识,使我逐步学会如何从一个刚出校门不久的实习生转变成一个职员。以下是我这一阶段的工作总结。 学习无止境,职业生涯只是学生生涯的一种延续。对于一个实习的学生,初踏入职场,进入专业的软件公司,对开发软件没有一点

软件工程理论与实践习题答案

习题答案 习题一答案 一、选择题 1. 软件的主要特性是(A B C)。 A) 无形 B) 高成本 C) 包括程序和文档D) 可独立构成计算机系统 2. 软件工程三要素是(C D)。 A) 技术、方法和工具B) 方法、工具和过程 C) 方法、对象和类D) 过程、模型、方法 3. 包含风险分析的软件工程模型是(A)。 A) 螺旋模型 B) 瀑布模型C) 增量模型 D) 喷泉模型 4. 软件工程的主要目标是(C)。 A) 软件需求B) 软件设计C) 风险分析D) 软件实现 5. 下列属于面向对象开发方法的是(A B C D)。 A) Booch B) UML C) Coad D) OMT 6. 软件危机的主要表现是(B D)。 A) 软件成本太高B) 软件产品的质量低劣 C) 软件开发人员明显不足D) 软件生产率低下 7. 软件开发方法的主要工作模型有(A B C) A) 螺旋模型B) 循环模型C) 瀑布模型D) 专家模型 8. 软件工程的目标有(A B C)。 A) 易于维护B) 低的开发成本 C) 高性能D) 短的开发期 9. 软件工程学的目的和意义是( )。 A) 应用科学的方法和工程化的规范管理来指导软件开发 B) 克服软件危机 C) 作好软件开发的培训工作 D) 以较低的成本开发出高质量的软件 二、判断题 1. 软件就是程序,编写软件就是编写程序。(×) 2. 瀑布模型的最大优点是将软件开发的各个阶段划分得十分清晰。(×) 3. 结构化方法的工作模型是使用螺旋模型进行开发。(×) 4. 结构化方法和JSP方法都不适合于大型软件的开发。(√) 5. 原型化开发方法包括生成原型和实现原型两个步骤。(×) 6. 面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。( √) 7. 软件危机的主要表现是软件的需求量迅速增加,软件价格上升。(×) 8. 软件工具的作用是为了延长软件产品的寿命。(×) 9. 软件工程过程应该以软件设计为中心,关键是编写程序。(×)

外文翻译--《软件工程-实践者的研究方法》

附录 Software Engineering-A PRACTITIONER’S APPROACH Written by Roger S. Pressman, Ph.D. (P.340-P.343) 13.3DESIGN PRINCIPLES Software design is both a process and a model. The design process is a sequence ofsteps that enable the designer to describe all aspects of the software to be built. It is important to note, however, that the design process is not simply a cookbook. Creative skill, past experience, a sense of what makes “good” software, and an overallcommitment to quality are critical success factors for a competent design. The design model is the equivalent of an architect’s plans for a house. It begins by representing the totality of the thing to be built (e.g., a three-dimensional renderingof the house) and slowly refines the thing to provide guidance for constructing eachdetail (e.g., the plumbing layout). Similarly, the design model that is created for softwareprovides a variety of different views of the computer software. Basic design principles enable the software engineer to navigate the design process.Davis suggests a setof principles for software design, which have beenadapted and extended in the following list: ? The design process should not suffer from “tunnel vision.” A gooddesigner should consider alternative approaches, judging each based on therequirements of the the resources available to do the job, and thedesign concepts presented in Section ? The design should be traceable to the analysis model. Because a singleelement of the design model often traces to multiple requirements, it is necessaryto have a means for tracking how requirements have been satisfied bythe design model. ? The design should not reinvent the wheel. Systems are constructed usinga set of design patterns, many of which have likely been encountered before.These patterns should always be chosen as an alternative to reinvention.Time is short and resources are limited! Design time should be invested inrepresenting truly new ideas and integrating those patterns that already exist. ? The design should “minimize the intellectual distance” between the software and the problem as it exists in the real world.That is, the structure of the software design should (whenever possible)mimic the structure of the problem domain.

软件工程社会实践报告模板

软件工程社会实践报告模板实习是一种实践,是理论联系实际,应用和巩固所学专业知识的一项重要环节,是培养我们能力和技能的一个重要手段。以下是由XX为大家整理的相关内容,仅供参考阅读。 软件工程社会实践报告模板 时间过的很快,转眼间已经实习将近一个月,其中有半个月是属于完全被流放的。 最先在内部系统组参与内部管理系统开发(struts+mysql+spring+hibernate),之后是去做网络交换机软件的脚本测试。现在又回归内部系统,虽然在脚本组期间,编码能力被别人甩在后头,但至少具有了一些测试经验。 至少自己做的东西,是真正交付到了客户手上,到也稍微有些成就感。 1 浅谈测试 一直以来,我都认为测试是脱离了软件工程范围的工作,不以为屑。但在实际情况中,测试是既重要且难以精湛的.其真正的压力,在于找不到bug,责任在你,而不在于编码人员。一般的测试人员不懂编码,他们靠的是日以累计的经验总结和想象力。而要做到高级测试工程师,则一定要懂编码,因为这是你完全掌握整个系统的方方面面具体运作的前提。但占主导地位的,还是大型系统的集成测试经验。实际项目中,编码时间一般只占30%左右,真正耗费时间的是

IT阶段的找bug与对应bug,此阶段基本评定了coder的编码质量。 2 程序员的困惑 有些人,以为教学视频和代码看多,自己就懂的多,实际做起来,却不知从何下手,问题在那?如何定位?如何解决?通通跟一样能力有关,debug追踪能力,也称调试。在项目组工作不愁源码资源,但问题是蛋糕摆在面前,你如何去消化? 有位同事告诉我:代码看几遍都没用,要去抄,例如一个查询模块,在此基础上去做具体记录的历史记录查询模块,你可能会觉得很简单,但实际情况却往往报一堆异常,配置问题涉及到方方面面,以及数据库字段,传值问题等等,一大堆对于新人来说很郁闷的问题。但不用怕,只要学会调试,一个个问题去追踪,一个个去解决,自然而然,那段“源码”才真正属于你。 3 如何调试追踪? 如果你能在短短的时间内就看到问题点在那,放下断点去追踪,出去找工作,绝对没问题。出现问题的时候,不要光看代码,要用实际行动去追踪运行期间的具体值,那是最好途径。eclipse是个很爽的ide,这点做的很好。例如页面内容显示不是自己想要的数据,我们要先从数据库查询语句去下手,设置断点,一步一步step over,让sql字段(存

软件工程—理论与实践-课后答案(许家怡-白忠建-吴磊-著)-高等教...

习题一答案 一、选择题 1. 软件的主要特性是(A B C)。 A) 无形 B) 高成本 C) 包括程序和文档 D) 可独立构成计算机系统 2. 软件工程三要素是(B)。 A) 技术、方法和工具 B) 方法、工具和过程 C) 方法、对象和类 D) 过程、模型、方法 3. 包含风险分析的软件工程模型是(A)。 A) 螺旋模型B) 瀑布模型 C) 增量模型 D) 喷泉模型 4. 软件工程的主要目标是(C)。 A) 软件需求 B) 软件设计 C) 风险分析 D) 软件实现 5. 下列属于面向对象开发方法的是(A B C D)。 A) Booch B) UML C) Coad D) OMT 6. 软件危机的主要表现是(B D)。 A) 软件成本太高 B) 软件产品的质量低劣 C) 软件开发人员明显不足 D) 软件生产率低下 7. 软件开发方法的主要工作模型有(A B C) A) 螺旋模型 B) 循环模型 C) 瀑布模型 D) 专家模型 8. 软件工程的目标有(A B C)。 A) 易于维护 B) 低的开发成本 C) 高性能 D) 短的开发期 9. 软件工程学的目的和意义是(A D)。 A) 应用科学的方法和工程化的规 范管理来指导软件开发 B) 克服软件危机 C) 作好软件开发的培训工作 D) 以较低的成本开发出高质量的 软件 二、判断题 1. 软件就是程序,编写软件就是编写程 序。(×) 2. 瀑布模型的最大优点是将软件开发的 各个阶段划分得十分清晰。(×) 3. 结构化方法的工作模型是使用螺旋模 型进行开发。(×) 4. 结构化方法和OO方法都是一种面向 过程的软件开发方法。(×) 5. 原型化开发方法包括生成原型和实现 原型两个步骤。(×) 6. 面向对象的开发方法包括面向对象的 分析、面向对象的设计和面向对象的程序 设计。( √) 7. 软件危机的主要表现是软件的需求量 迅速增加,软件价格上升。(×) 8. 软件工具的作用是为了延长软件产品 的寿命。(×) 9. 软件工程过程应该以软件设计为中 心,关键是编写程序。(×) 10. RCP法与RSP法的主要区别是前者采 用循环渐进的开发方式,原型将成为最终 的产品,而后者原型将被废弃。(√) 三、简答题 1. 软件产品的特性是什么? 答:●软件是一种逻辑产品,具有无形性; ●软件产品的生产主要是研制;主要 是脑力劳动; ●软件不存在磨损和老化问题,但存 在退化问题; ●软件产品的成本非常昂贵,其开发 方式目前尚未完全摆脱手工生产方式; ● 软件具有“复杂性”,其开发和运 行常受到计算机系统的限制。 2. 软件发展有几个阶段?各有何特 征? 答:①程序设计阶段。 硬件特征:价格贵、存储容量小、运行可靠性差。 软件特征:只有程序、程序设计概念,不重视程序设计方法。 ②程序系统阶段。 硬件特征:速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长。 软件特征:程序员数量猛增,开发人员素质低。 ③软件工程阶段。 硬件特征:向超高速、大容量、微型化及网络化方向发展。 软件特征:开发技术有很大进步,但未获得突破性进展,软件价格不断上升,未完全摆脱软件危机。 3. 什么是软件危机?其产生的原因是什么? 答:“软件危机”(Software Crisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力、财力,而在开发过程中就夭折。软件危机主要表现在两个方面: (1) 软件产品质量低劣,甚至开发过程就夭折。 (2) 软件生产率低,不能满足需要。 4. 什么是软件过程?有哪些主要的软件过程模型?它们各有哪些特点? 答:软件过程是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。软件过程模型是对软件开发实际过程的抽象和简 1

软件工程--理论与实践

前言 理论研究与实践的桥梁 自从年会议首次提出“软件工程”概念以来,它经历了一条漫长的道路。在几十年前,“软件”这个概念本身还不能被多数人接受。因而软件工程理论研究和实践必须建立一个坚固的统一标准使得人们懂得在我们现今生活中如何建立良好软件和怎样评价软件的风险、概率。本文融合了当前两种软件工程的潮流:从实践者角度,实践者的焦点在于建立高质量的软件产品,提供实用的功能;从研究者角度,侧重于寻找提高质量途径,提高实践者的生产效率。 本书用于研究生软件工程教材,描绘了实用的软件工程理论和实践概况,由于学生的经历有限,本书中所举的例子可能是超出我们的经验,但这些例子足以清楚地阐述大型软件项目从设计到实现的整个开发过程。 此书还可作为本科生软件工程概念和实践的入门教材,或用于软件开发人员扩充该领域知识。本书中涵盖的各种样例:大型项目,小型项目,面向对象和面向过程,实时处理,事务处理,开发案例,维护,适合各种读者群。章、章和章提供的材料用于激励学生启发思想,培养研究兴趣。 核心特征 与其他书相比本书具有如下特征: ●本书将许多评价标准综合运用于软件工程,测量标准是软件工程策略的完整部分,不能孤立看待。这种综合看待软件工程 测量标准的办法可以使学生学会如何将定量分析,定量改进运用到日常活动中。可以评价在个人方面、团体以及项目基础上的进步。 ●本书将许多概念,如:重用、风险管理、质量工程融于软件工程中,而非分裂处理。 ●每章用两个实例说明该章中的主要概念,两个例子均来源于实际的项目。信息系统实例描述了一个软 件系统怎样确定一家英国大型电视公司广告时间价格,实时系统实例给出火箭控制软件;在这些实例的问题报告中,我们还可以探索软件工程中的技术怎样定位问题所在及如何解决、避免这些问题。学生可以从这些实例中学到如何把软件工程技术运用到实际的系统中。 ●每章末尾,给出该章主要内容对于小组开发的意义、个人开发意义、研究意义。学生可以选择阅读,查找相关部分。 ●本书给出相关的网址,文献,网上相关的工具,方法和学习指南。从网上学生可获得许多实际的需求文档、设计、代码、 测试计划等相关信息。一些声誉较好的网站上还有进一步深入的信息。 ●本书包含许多实例和文献中的样例。其中的简略例子详细内容可在相关网页上查询。从中可了解理论概念是怎样运用于实 践的 ●每章末尾给出启发式问题,这些问题涉及到软件工程的合法与伦理等方面。学生可以从社会、政治环境出发考虑这些问题。 和其他科学一样,必须从他给人们生活带来的后果角度看待软件工程决策。 ●面向过程和面向对象两种思想方法在每章中都有体现。此外将有一章专门阐述面向对象的发展过程,面向对象的开发过程。 此处使用描述通用概念。面向对象开发的每一步均有实例说明。 ●本书给出注解文献的出处,网址,讨论小组以及专业领域如:软件可靠性、容错、计算机安全等的相关联接。 ●本书给出解决方案手册,可以在得到,格式。 ●每章介绍一个项目,比如抵押处理软件系统开发,老师可以针对这些项目介绍,项目变体作为课堂作业。 ●每章后给出概念索引。 内容与组织 本书分为三部分:第一部分(第一章至第三章)启发读者阐述软件工程知识对于实践者和研究人员的重要性,讨论了问题

软件工程的实践报告

软件工程的实践报告 软件工程的实践报告 一、实习目的 这次实习的目的是为了提高我的专业技能、实践能力、 以及让我了解一些实际的工作情况。对我在正式工作前有很 重要的意义,不论是专业技能,还是综合素质,以及实际中 的人际关系都有了更加深刻的体会,让我在正式工作前有了 一笔很珍贵的经验。 这次实习的主要任务就是在了解整个软件的制作过程, 以及各个环节中的细节,当学会了这些环节后,再用学到的 知识来完成一个公司给我们安排的一个项目。我分到的项目 名称是《诊所管理系统》,这个项目我们将以小组的形式共 同将其完成,以模拟实际软件制作的过程,尽最大程度的将 我们所学到的知识转化成实际的能力。为真正的项目做好充 分的准备,让我们可以在实习过后的正式工作中,有准备的 去面对。 公司的最终目的就是希望我们能了解实际项目的制作, 并初步的理解各个环节的意义。而让我们用项目进行实际制 作就是为了让我们能更好的理解项目制作中各个流程的意 义以及项目制作过程中的团队是如何合作的。 二、实习单位及岗位 我所实习的单位是校企合作埃森哲信息技术(大连)有

限公司的软件开发部。这个部门的主要职能就是外包服务工作,按照客户的需求制作成相应的软件,所以我们需要对整个软件开发的过程都较熟悉,这样才能应对客户们各种各样的问题,才能制作出更好的软件以满足客户们的需求。 因为刚实习的原因,所以我的职位是软件助理工程师,时间的具体安排是实际项目制作以及专业知识的学习,实习时间为8个星期。本来实习的地点是在公司的,后来因为公司的内部原因,将我们的实习地点改为学校内部实习,每天的时间和正式上班相同。早8晚5,每周六周日休息。 整个实习的实际流程前面已经说过,八周的实际项目制作以及专业知识的学习。具体的每周任务、实际工作内容、以及专业知识与专业技能的实际应用会根据不同的环节也 有所不同。但总体的目标就是让我们了解实际工作中软件的制作流程,以及各个流程中所需要的技术和注意点,并用实际的项目让我们进行练习。 三、实习过程 上面已经介绍了个整个实习的任务以及目的,下面将详细介绍整个实习的流程,并对每个流程的细节加以详细说明。 具体的时间安排如下: 第一周:将对该项目所需要的知识进行集体巩固复习。将一些已经生疏的知识巩固巩固,以备项目中的不时之需。在实习的第一天企业的经理就详细的给我们讲解了软件工

软件工程案例教程软件项目开发实践第一章练习题

第一章练习题: 一、填空题 1.软件工程是一门综合性的交叉学科,它涉及计算机学科、工程学科、管理学科和 数学学科。 2.软件工程研究的主要内容是方法、过程和工具三个方面。 3.由于软件产生的复杂性和高成本,使大型软件产生出现出现了很多问题,即出 现软件危机,软件工程正是为了克服它而提出的一种概念及相关方法和技术。 4.SWEBOK V3中,软件工程知识体细分为教育需求和工程实践两大类。 5.增量式模型假设需求可以分段,成为一系列增量产品,每一增量可以分别开发。 6.喷泉模型比较适用于面向对象的开发方法。 7.软件工程是用工程科学的知识和技术原理来定义、开发和维护软件的一门学科。 二、判断题 1.SWEBOK V3分两大类,共有15个知识域。(√) 2.软件工程的提出起源于软件危机,其目的是最终解决软件的生产工程化。(√) 3.软件工程学一般包含软件开发技术和软件工程管理两个方面的内容,软件开发 方法学和软件工程环境属于软件开发技术的内容,软件工程经济学属于软件工 程管理。(对) 4.软件开发中的最大的问题不是管理问题,而是技术问题。(×) 5.XP(eXtreme Programming,极限编程)是由Kent Beck提出的一套针对业务需求和 软件开发实践的规则,包括13个核心实践。(√) 三、选择题 1.下列所述不是敏捷生存期模型的是(C)。 A.Scrum 模型UP 2.软件工程的出现主要是由于(C)。 A.程序设计方法学的影响 B.其他工程科学的影响 C.软件危机的出现 D.计算 机的发展 3.以下(C)不是软件危机的表现形式。 A.开发的软件不满足用户的需要 B.开发的软件可维护性差 C.开发的软件价 格便宜 D.开发的软件可靠性差 4.以下不是SWEBOK V3的软件工程实践中的知识域的是(B)。 A.软件需求 B.工程基础 C.软件构造 D.软件设计 5.下列所述不是软件组成的是(C)。 A.程序 B.数据 C.界面 D.文档 6.下列对“计算机软件”描述正确的是(A) A.是计算机系统的组成部分 B.不能作为商品参与交易 C.是在计算机硬件设备 生产过程中产生出来的 D.只存在于计算机系统工作时

软件工程实习报告5篇

2020软件工程实习报告5篇 2020软件工程实习报告5 时间过得真快,转眼间,在山大实习 生活就结束了。 四周的时间能够和山大的同学一起工作、学习、生活我感到非常 的荣幸,同时也感觉到很大的压力,作为电子商务专业的学生从事 软件开发感觉还是有一定的困难,特别是我们还是和山大大三的学 生一起,在初来时自己就有一些不自信,但随着项目的进展,我慢 慢的找到了自己的位置,找到自己的目标,虽然自己与好的同学还 有差距,这也给了我很大压力,但是我相信没有压力就没有动力,所以整个实训过程中我都在不断地努力。 实训期间让我学到很多东西,不仅在理论上让我对it 领域有了全新的认识,在实践能力上也得到了很大的提高,真正的学到了学 以致用,更学到很多做人的道理,对我来说受益匪浅。 特别是利用周六上午的时间山大为我们安排的讲座让我们了解it 领域一些新的发展动态以及一些的技术,让我意识到自己知识的缺少,这激励我在以后的学习、工作、生活中要不断了解信息技术发展 动态以及信息发展中出现的新的技术。 除此之外,我还学到了如何与人相处,如何和人跟好的交流,我们组成一个团队大家一起开发一个项目,大家的交流沟通显得尤为 重要,如何将自己的想法清楚明白的告诉队友,如何提出自己想法

的同时又不伤害其他的队友的面子,这些在我的实训生活中都有一些体会。 可是说,第一次亲身体会理论与实际相结合,让我大开眼界。 也是对以前学习的一个初审吧,相信这次实训多我以后的学习、工作也将会有很很大的影响,在短短的二十几天里这些宝贵的经验将会成为我以后工作的基石。 作为大二的学生,经过两年的在校学习,对程序设计有了一些基本的理性的认识和理解。 在校期间一直忙于理论的学习,没有机会也没有经验来参与我们项目的开发,所以在实习之前软件按开发对我来说是非常抽象的,一个完整的项目要怎么来分工以及完成该项目所需要的基本步骤也不明确,经过这次实训让我明白一个完整项目的完成必须团队分工合作,并在每个阶段进行必要的总结和检查。 在我们项目的开发过程中我们项目的步骤: 详细设计、详细设计review、编码、编码review、单体测试。 在项目开发过程中我也深刻的体会到详细设计对一个项目开发有明确的指引作用,它可以使开发人员对这个项目所要实现的功能在总体上有具体的认识,并能减少在开发过程中出现不必要的脱节。 经过二十多天的obbligato 信息安全管理的java 开发,是我对java 软件开发平台有了更深一步的了解,也对nec 公司的

相关文档
最新文档