第一篇:软件工程期末总结和心得体会
心得体会
通过这学期<软件工程>这门课程的学习,使我获益良多,作为一名计算机专业的学生, 觉得计算机方面的东西学的实在是太少了,专业知识的浅陋让我感到有点羞愧, 老师告诉我们,我们在做毕业设计时,要根据<软件工程>这门课程中的有关内容来进行文档的撰写,所以在老师让我们写需求分析报告,可行性研究报告以及总体设计报告中,我学到了很多,了解到如何来写毕业设计的有关文档.,然而也通过这门课程的学习, 让我更深一步了解到一个软件不仅仅就是编写程序这么简单,编写程序只不过是开发软件的一个小小部分而已, 以前一直误认为只要会写程序代码就可以了,现在看来是大错特错了,因为软件开发的前期工作是相当复杂而重要的,首先要了解客户的需求,了解开发的这个软件到底是干什么用的,有时甚至要到一个公司,一个部门里去”跟踪”一段时间, 了解开发的这个软件具体有哪些作用、功能,否则开发出来的软件将不能满足客户的要求;开发软件还要知道开发的这个软件底可不可行,要进行可行性研究,.还要分析它的成本,效益,最后还要进行一个总体上的设计,所以说在编写程序代码前还要做其大量的工作,并不是我们想象的那么简单.有时,老师在讲台上面”使劲儿”给我们讲授知识时,我们总是不认真听讲,或者听一会儿之后又走神儿了,虽然每次都想认真听课,都想学到更多的东西,可总是克服不了自己的惰性,我们都明白,作为一名大三的学生了,更应该有自律性与毅力,更应该努力,学习更多的知识,因为不久之后我们也将踏入社会面临就业的问题,如果没有多大本事,专业技能不强,的话,我们将很难找到一份较好的工作,再加上现在每年毕业生都那么多,就业压力是如此的大,所以我们一定要利用好在学校这宝贵的机会,学习更多的知识,不断的强化自己.,让自己变得更优秀!
在这门课程的第一章中呢,我们学习到了软件危机方面的有关知识,以及软件过程和软件生存周期,还了解到软件开发过程模型,那么有哪些模型呢,首先有种瀑布模型, 快速原型模型,然后就是螺旋模型,增量模型,喷泉模型等等,这些模型都有各自不同的特点.。我们还学习到软件开发的一些方法,比如结构化方法.面向数据结构的开发方法.面向对象的方法.和视觉化开发方法..对于第二章呢,我们重点学习了可行性研究,系统流程图,以及如何制定软件计划和成本/效益分析,首先,可行性研究是软件生命周期计划阶段中的重要组成部分,在可行性研究中,”问题定义”是相对重要的,不过问题定义阶段的持续时间一般很短,形成的报告文本也相对比较简单;可行性研究包括经济可行性、技术可行性、法律可行性和开发方案选择四个任务;可行性研究的步骤包括系统规模和目标的复查、认真研究现有系统、导出新系统的高层逻辑模型、重新定义问题、导出和评价供选择的方案、推荐方案和行动方针、草拟开发计划、提交文档这八个方面.然后就是系统流程图,我们要知道系统流程图的一些基本符号,了解它们各自的作用,会画系统流程图,最后就是如何来制定软件计划和进行成本的估算以及效益分析的方法.同时,第三章也是我们学习的重点,需求分析是在可行性研究的基础上进行的更细致的分析工作,是软件定义时期的最后一个阶段,是对软件目标及范围的求精和细化.需求分析的基本任务是准确回答”系统必须做什么”这个问题,它的具体任务是确定对系统的综合要求、分析系统的数据要求、导出目标系统的详细逻辑模型、修订系统开发计划、开发原型系统等这几个方面;了解需求分析的原则;以及会写需求规格说明书,需求规格说明书包括引言、任务概述、需求规定、运行环境规定.引言里面又包括编写目的,背景,定义,参考资料;任务概述里面包括目标,用户的特点,假定和约束,需求规定里又包括对功能.性能的规定,输入/输出的要求,数据管理能力、故障处理的要求,运行环境规定里面包括设备,支持软件,接口,控制这几点。还要知道获取需求的方法.第四、五章就是总体设计和详细设计了, 第四章主要了解了总体设计的任务及过程,总体设计的原理,以及总体设计的常用方法及工具.第五章了解了详细设计的 一些原则,和详细设计的方法及工具等等.最后我们还学习了软件测试的方法和软件测试的相关步骤.<软件工程>这门课程让我以前对软件片面的认识有了一个很大的提升,让我深刻了解到要做好一个软件方面的项目应该从哪些方面去着手,也让我以后想从事这方面的工作有了一个新的认识.
第二篇:软件工程-期末总结
软件工程期末总结
课程:姓名:学号:班级:xxxxx xxxxx xxxxxx xxxxxx
目录
1.软件工程学概述.........................................................1 1.1软件危机..........................................................1 1.2软件工程..........................................................1 1.3软件生命周期......................................................2 1.4软件过程..........................................................2 2.可行性研究:............................................................2 2.1可行性研究的任务..................................................2 2.2可行性研究的过程..................................................3 2.3数据流图..........................................................3 3.需求分析...............................................................3 4.形式化说明技术.........................................................4 5.模块设计...............................................................4 1.耦合:............................................................4 2.内聚..............................................................4 6.详细设计...............................................................5 6.1结构程序设计......................................................5 6.2人机界面设计......................................................5 7.软件测试...............................................................5 7.1软件测试的目标....................................................5 7.2软件侧试准则......................................................6 7.3测试方法..........................................................6 8.软件可靠性.............................................................7 8.1软件质量..........................................................7
1.软件工程学概述
1.1软件危机
1.1.1 软件危机的介绍:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。具体地说,软件危机主要有以下一些典型表现:1.对软件开发成本和进度的估计常常很不准确。2.用户对“已完成的”软件系统不满意的现象经常发生。3.软件产品的质量往往靠不住。4.软件常常是不可维护的。5.软件通常没有适当的文档资料。6.软件成本在计算机系统总成本中所占的比例逐年上升。7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。1.1.2产生软件危机的原因:在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。1.1.3消除软件危机的途径:
1、认识到软件是程序、数据及相关文档的完整集合。2.认识到软件是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目;
3、推广使用在实践中总结出来的开发软件的成功的技术和方法,探索更好更有效的技术和方法;
4、开发和使用更好的软件工具。总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。
1.2软件工程
1.2.1软件工程的介绍:软件工程是指导计算机软件开发和维护的一门工程学科。定义:采用工程的概念、原理和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。1.2.2软件工程的基本原理:
1、用分阶段的生命周期计划严格管理
2、坚持进行阶段评审
3、实行严格的产品控制
4、采用现代程序设计技术
5、结果应能清楚地审查
6、开发小组的人员应该少而精
7、承认不断改进软件工程实践的必要性 1.2.3 软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。软件工程方法学包含3个要素方法、工具和过程。目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学
1.3软件生命周期
软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。软件定义的3个阶段:问题定义、可行性研究、需求分析;软件开发的四个阶段:总、详(系统设计)、编、综(系统实现)软件生命周期每个阶段:1.问题定义2.可行性研究3.需求分析4.总体设计5.详细设计6.编码和单元测试7.综合测试8.软件维护
1.4软件过程
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
1.4瀑布模型瀑布模型
一直是唯一被广泛采用的生命周期模型,有下述的几个特点:1.阶段间具有顺序性和依赖性(1)必须等前一阶段的工作完成之后,才能开始后一阶段的工作(2)前一阶段的输出文档就是后一段的输入文档,因此,前一阶段的输出文档必须正确。2.推迟实现的观点;3.质量保证的观点(1)每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务,(2)每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题改正错误。
优点:可强迫开发人员采用规范的方法;严格地规定每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。缺点:瀑布模型是由文档驱动的
2.可行性研究: 可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
2.1可行性研究的任务
可行性研究的目的不是解决问题,而是确定问题是否值得去解决。可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。在澄清了问题定义之后,分析员应该导出系统的逻辑模型。然后从系统逻辑模型出发,探索若干种可供选择的主要解法(即系统实现方案)。对每种解法都应该仔细研究它的可行性,一般说来,至少应该从下述3个方面研究每种解法的可行性。
1)技术可行性 使用现有的技术能实现这个系统吗?
2)经济可行性 这个系统的经济效益能超过它的开发成本吗? 3)操作可行性 系统的操作方式在这个用户组织内行得通吗?
必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。可行性研究需要的时间长短取决于工程的规模。一般来说,可行性研究的成本只是预期的工程总成本的5%-10%。
2.2可行性研究的过程
步骤:1.复查系统规模和目标2.研究目前正在使用的系统3.导出新系统的高层逻辑模型4.进一步定义问题5.导出和评价供选择的解法6.推荐行动方针7.草拟开发计划8.书写文档提交审查
2.3数据流图
数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。数据流图有四种基本符号:
正方形(或立方体)表示数据的源点或终点; 圆角矩形(或圆形)代表变换数据的处理; 开口矩形(或两条平行横线)代表数据存储; 箭头表示数据流,即特地数据的流动方向。
在数据流图中应该描绘所有可能的数据流向,而不应该描绘出现某个数据流的条件。数据存储和数据流都是数据,仅仅所处的状态不同。数据存储是处于静止状态的数据,数据流是处于运动中的数据。数据流图的基本要点是描绘“做什么”,而不是“怎么做”。数据流图的4种成分:源点或终点,处理,数据存储,数据流数据流图的基本目的是利用它作为交流信息的工具,另一个主要用途是作为分析和设计的工具。
3.需求分析
3.1.1确定对系统的综合需求1.功能需求2.性能需求3.可靠性和可用性需求4.出错处理需求5.接口需求6.约束7.逆向需求8.将来可能提出的需求
4.形式化说明技术
PSL/PSA系统的主要优点是它改进了文档质量,能保证文档具有完整性、一致性和无二义性,从而可以减少管理和维护的费用。数据存放在数据库中,便于增加、删除和更改,这也是它的一个优点。
5.模块设计
模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。
1.耦合:
耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度因此,模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。公共环境耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显著增加。如果只有两个模块有公共环境,那么这种耦合有下面两种可能。1.一个模块往公共环境送数据,另一个模块从公共环境取数据。这是数据耦合的于一种形式,是比较松散的耦合。2.两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时可以利用公共环境耦合。最高程度的耦合是内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合。一个模块访问另一个模块的内部数据。一个模块不通过正常入口而转到另二个模块的内部。两个模块有一部分程序代码重叠(只可能出现在汇编程序中)。一个模块有多个入口(这意味着一个模块有几种功能)。应该坚决避免使用内容耦合。事实上许多高级程序设计语言已经设计成不允许在程序中出现任何形式的内容耦合。总之,耦合是影响软件复杂程度的一个重要因素。应该采取下述设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。
2.内聚
内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。内聚和耦合都一是进行模块化设计的有力工具,但是实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。低内聚:偶然内聚、时间内聚、逻辑内聚;中内聚主要有两类:过程内聚和通信内聚;高内聚也有两类:顺序内聚和功能内聚。功能内聚是最高程度的内聚。
6.详细设计
详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。详细设计阶段的任务还不是具体地编写程序,而是要设计出程序的“蓝图”,以后程序员将根据这个蓝图写出实际的程序代码。因此,详细设计的结果基本上决定了最终的程序代码的质量。考虑程序代码的质量时必须注意,程序的“读者”有两个,那就是计算机和人。在软件的生命周期中,设计测试方案、诊断程序错误、修改和改进程序等都必须首先读懂程序。实际上对于长期使用的软件系统而言,人读程序的时间可能比写程序的时间还要长得多。因此,衡量程序的质量不仅要看它的逻辑是否正确.性能是否满足要求,更主要的是要看它是否容易阅读和理解。详细设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能简明易懂。结构程序设计技术是实现上述目标的关键技术,因此是详细设计的逻辑基础。
6.1结构程序设计
如果一个程序的代码块仅仅通过顺序,选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称为程序的结构化。
6.2人机界面设计
人机界面设计是接口设计的一个重要的组成部分。在设计人机界面过程会遇到下面4个问题:系统响应时间,用户帮助设施,出错信息处理和命令交互。用户界面设计过程是一个迭代的过程,首先创建设计模型,再用原型实现这个设计模型,并由用户试用和评估,然后根据用户意见进行修改。为了支持上述迭代过程,各种用于界面设计和原型开发的软件工具产生。它们为简化窗口,菜单,设备交互,出错信息,命令及交互环境的许多其它元素的疮疖提供各种历程或对象。用户界面评估周期如下,完成初步设计之后就创建第一级原型,用户使用并评估该原型,直接向设计者表述对界面的评价,设计中根据用户意见修改设计并实现下一级原型。
7.软件测试
7.1软件测试的目标
1.测试是为了发现程序中的错误而执行程序的过程。2.好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。3.成功的测试是发现了至今为止尚未发现的错误的测试。从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。这和某些人通常想象的“测试是为了表明程序是正确的”,“成功的
测试是没有发现错误.的测试”等是完全相反的。正确认识测试的目标是十分重要的,测试目标决定了测试方案的设计。如果为了表明程序是正壑耍进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。由于测试的目标是暴露程序中的错误,从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试工作。此外,应该认识到测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有错误。关于这个结论下面还要讨论。
7.2软件侧试准则
怎样才能达到软件测试的目标呢?为了能设计出有效的测试方案,软件工程师必须深人理解并正确运用指导软件测试的基本准则。下面讲述主要的测试准则。1.所有测试都应该能追溯到用户需求。2.应该远在测试开始之前就制定出测试计划。3.把Paret原理应用到软件测试中。Pareto原理说明,测试发现的错误中的80%很可是由程序中20%的模块造成的。当然,问题是怎样找出这些可疑的模块并彻底地测试它们。4.应该从“小规模”测试开始,并逐步进行“大规模”测试。通常,首先重点测试单个程序模块,然后把测试重点转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。5.穷举测试是不可的。所谓穷举测试就是把程序所有可能的执行路径都检查一遍的测试。即使是一个中等规模的程序,其执行旋的排列数也十分庞大,由于受时间、人力以及其他资源的限制,在测试过程中不可能执行每个可能的路径。囚此,测试只能证明程序中有错误,不能证明程序中没有错误。但是,精心地设计测试方案,有可能充分覆盖程序逻辑并使程序达到所要求的可靠性。6.为了达到最佳的测试效果,应该由独立的第三方从事测试工作。所谓“最佳效果”是指有最大可能性发现错误的测试。由于前面已经讲过的原因,开发软件的软件工程师并不是完成全部测试工作的最佳人选(通常他们主要承担模块测试工作)。
7.3测试方法
测试任何产品都有两种方法:如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用琅口果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正乒进行。前一种方法称为黑盒测试,后一种方法称为白盒测试。对于软件测试而言,黑盒测试法把程序看作一个黑盒子,完全不考虑程序的内部结均和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序否能适当地接收输人数据并产生正确的输出信息,程序运行过程中能否保持外部信息(例如,数据库或文件)的完整性。黑盒测试又称为功能测试。白盒测试法与黑盒测试法相反,它的前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按测程序中的主要执行通路是否都能按预定要求正确工作。照程序内部的逻辑测试程序,白盒测试又称为结构测试。
8.软件可靠性
可靠性定义:软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功的运行的概率可用性定义:软件可用性是程序在给定的时间点,按照规格说明书的规定,成功的运行的概率基本假定 1.在测试之前每1000条指令中大约有5~20个错误 2.失效率正比于剩余的错误数,平均无故障时间MTTF与剩余错误数成反比3.为了简化讨论假设发现的每一个错误都立即正确地改正了。
8.1软件质量
概括地说,软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。上述定义强调了下述的6个要点: 1.正确性(它按我的需要工作吗?)系统满足规格说明用户目标的程度,即,在预定环境下能正确的完成预期功能的程度。
2.健壮性(对息外环境它能适当地响应吗?)在硬件发生故障、输入的数据无效或操作错误等意外环境下,系统能做出适当的响应程度。
3.效率〔完成预定功能时它需要的计算机资源多吗?)为了完成预定的功能,系统需要的计算资源的多少。
4.完整性(安全性)(它是安全的吗?)对未经授权的人使用软件或数据的企图,系统能够控制(禁止)的程度。
5.可用性(我能使用它吗?)系统在完成预定应该完成的功能时令人满意的程度。6.风险(能按预定计划完成它吗?)按预定的成本和进度把系统开发出来,并且为用户所满意的概率。
第三篇:软件工程期末复习总结
软件工程期末复习总结
第一章 软件工程学概述
1.软件危机:是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。包括如何开发软件,如何维护数量不断膨胀的已有软件。
2.软件生命周期的定义及划分
3.软件从定义、开发、使用和维护,直到最终废弃的过程称为生命周期
4.按照软件生命周期全过程应完成的任务性质,在概念上可以把软件生命周期划分成问题定义、可行性研究、需求分析(定义时期)、总体设计、详细设计(系统设计)、编码和单元测试、综合测试以及运行维护(系统实现)共8个阶段
5.最基本的测试是集成测试和验收测试
6.软件配置主要包括:程序+数据+文档
7.软件工程的定义软件工程是把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;并研究其中提到的途径。
8.软件工程的基本原理
1.用分阶段的生命周期计划严格管理
2.坚持进行阶段评审
3.实行严格的产品控制
4.采用现代程序设计技术
5.结果应能清楚地审查
6.开发小组的人员应该小而精
7.承认不断改进软件工程实践的必要性
9.软件工程方法学包含3要素:方法、工具和过程。
分成传统方法学和面向对象方法学,其中传统方法学采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务。
10.软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定各项任务的工作步骤(who,when,what,how)
11.软件过程模型有瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型
12.瀑布模型优点
1.阶段间具有顺序性和依赖性
2.推迟实现的观点
3.质量保证的观点
13.软件工程由方法、(工具)和过程三部分组成,称软件工程的三要素。
14.从工程管理的角度软件设计可分为概要设计和(详细)设计两大步骤。
15.基于计算机系统的软件要素中的软件由程序、数据和(文档)组成。
16.软件设计也可看作将需求规格说明逐步转换为软件源代码的过程。()
17.软件生存周期(名词解释)软件从定义、开发、使用和维护,直到最终废弃的过程称为生命周期
18.软件危机(名词解释)是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题 原型法模型一般适应哪些场合?
它适合于那些不能预先确切定义需求的软件系统的开发,更适合于那些项目组成员(包括分析员、设计员、程序员和用户)不能很好交流或通信有困难的情况。
瀑布模型一般适应哪些场合?
瀑布模型一般适用于功能、性能明确、完整、无重大变化的软件系统的开发。例如操作系统、编译系统、数据库管理系统等系统软件的开发。应用有一定的局限性。
第二章 可行性研究
1.可行性研究的目的,就是用最小的代价尽可能短的时间内确定问题是否能够解决
2.至少包含下述3个方面:
1.技术可行性
2.经济可行性
3.操作可行性
3.数据流图的用途
1.交流信息的工具
2.作为分析与设计的工具
4.数据字典的内容由4类元素组成1.数据流
2.数据流分量(即数据元素)
3.数据存储
4.处理
5..系统流程图是物理系统模型
数据流图和数据字典是系统逻辑模型
5.成本/效益分析的方法:1.货币的时间价值,2投资回收期3纯收入4投资回收率
6.数据字典:是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合.第三章 需求分析
1.需求分析是软件定义时期的最后一个阶段,它的基本任务是准备地回答“系统必须做什么”这个问题
2.需求分析的任务
1.确定对系统的综合要求
2.分析系统的数据要求
3.导出系统的逻辑模型
4.修正系统开发计划
3.需求分析的结果是软件需求规格说明书
4.需求分析的方法
1.访谈
2.面向数据流自顶向下求精
3.简易的应用规格说明技术
4.快速建立软件原型,5…实践表明,快速建立软件原型是最准确、最有效和最强大的需求分析技术
6需求分析建模的工具
1.E-R图
2.层次方框图,描绘数据的层次结构
3.Warnier图
4.IPO图
7.验证软件需求应该从下面4个方面验证
1.一致性
2.完整性
3.现实性
4.有效性
第五章 总体设计
1.总体设计的基本目的就是回答“概括地说,系统该如何实现?”
2.总体设计也称概要设计或初步设计
3.总体设计的重要任务
1.划分系统元素和边界
2.设计软件的结构,即系统的模块组成和模块间的关系。
4.总体设计通常由两个阶段组成:
系统设计阶段,确定系统的具体实现方案
结构设计阶段,确定软件结构
5.模块是构成程序的基本构件。
6.模块化就是把程序分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户需求
7.模块化的根据就是分解复杂的问题容易解决
8.软件设计原理
1.模块化
2.抽象
3.逐步求精
4.信息隐藏和局部化
5.模块独立
9.模块设计的原则是高内聚,低耦合耦合是衡量不同模块彼此间互相依赖的紧密程度
内聚是衡量一个模块内部各个元素彼此结合的紧密程度
10.耦合的类型及设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合内聚:使用功能内聚和顺序内聚
11.设计的启发式规则
1.提高独立性
2.模块适中
3.深度、宽度、扇入和扇出适当
4.模块作用域应该在控制域之内
5.降低模块接口的复杂度
6.设计单入口单出口的模块
7.模块功能可以预测
12.据流的设计方法的两种不同类型的设计:变换分析和事务分析
优化方法的格言:先使它能工作,然后再使它快起来
第六章 详细设计
设计阶段的根本目录是确定应该怎样具体地实质所要求的系统。
详细设计不是编码,而是设计出程序的“蓝图”
结构程序设计最早由Dijkstra提出
只要3种基本的控制结构就能实现任何单入口单出口的程序,这3种基本的控制结构是“顺序”、“选择”和“循环”
1.程序设计的经典定义:如果一个程序的代码块仅仅透过顺序、选择和循环这3中基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的结构程序设计是尽可能少用GOTO语句的程序设计方法,最好仅在检测出错误时才使用GOTO语句,而且应该总是使用前向GOTO语句
人机界面的设计质量,直接影响用户对软件产品的评价
设计人机界面总会遇到下述四个问题:
1.系统响应时间
2.用户帮助设备
3.出错信息处理
4.命令交互
人机界面设计指南:
1.置用户于控制之下
2.减少用户的记忆负担
3.保持界面一致
判定表可用作软件测试
Jackson图包含3类逻辑数据结构,顺序结构,选择结构,重复结构
第七章 实现
通常把编码和测试统称为实现
编码就是把软件设计结构翻译成某种程序设计语言书写的程序
测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误
软件测试的工作量往往占软件开发总工作量的40%以上
调试是测试阶段最困难的工作
G.Myers测试的目标或定义:
1.测试是为了发现程序中的错误而执行程序的过程
2.好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案
3.成功的测试是发现了至今为止尚未发现的错误的测试
软件测试准则
1.所有测试都应该能追溯到用户需求
2.应该远在测试开始之前就制定出测试计划
3.把Pareto原理应用到软件测试中
4.应该从“小规模”测试开始,并逐步进行“大规模”测试【(8020)测试发现的错误80%很可能是由程序中20%的模块造成的】
5.穷举测试是不可能的6.第三方测试(A编写,B测试)
V字型模型
测试分为白盒测试(结构测试)和黑盒测试(功能测试)
具体的测试方法{【(测试用例)()】【(覆盖条件)()】}
测试步骤:1.模块测试.2子系统测试 3.系统测试 4.验收测试 5.平行运行
软件可靠性:是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率
软件可用性:是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率
第八章 维护
软件工程的主要目的是提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本
所谓维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。
四类维护
1.改正性维护纠正使用过程中暴露出来的错误
2.适应性维护适应外部环境变化
3.完善性维护改进原有软件
4.预防性维护改进将来的可维护性和可靠性
软件维护的特点
1.结构化维护与非结构化维护差别巨大
2.维护的代价高昂
3.维护的问题很多
决定软件可维护性的因素
1.可理解性
2.可测试性
3.可修改性
4.可移植性
5.可重用性
文档是影响软件可维护性的决定因素
软件系统的文档可以分为用户文档和系统文档两类
1.用户文档主要描述系统功能和使用方法
2.系统文档指从问题定义,需求说明验收测试计划这样一系列实现有关的文档
Miller:“把今天的方法学应用到昨天的系统上,以支持明天的需求。”
第四篇:软件工程期末复习题
1、软件定义:问题定义、可行性研究,需求分析
2、软件开发:总体设计,详细设计,编码和单元测试,综合测试
3、软件维护:改正性维护、适应性维护、完善性维护、预防性维护
4、软件过程:瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型,Rational统一过程,敏捷过程与极限编程,微软过程
5、从3个方面研究每种解决的可行性:技术可行性、经济可行性、操作可行性
6、软件需求分析阶段的工作:可以分为以下4个方面:对问题的识别、分析与综合、编写需求分析文档以及需求分析评审
7、设计原理:模块化、抽象、逐步求精、信息隐藏和局部化、模块独立性(耦合、内聚)
8、决定软件可维护性的因素:可理解性、可测试性、可修改性、可移植性、可重用性
一、假设要求你开发一个软件,该软件的功能是把读入的浮点数开平方,所得到的结果应该精确到小数点后4位。一旦实现并测试完之后,该产品将被抛弃。你打算选用哪些软件生命周期模型?请说明你作出选择的理由。
答:对这个软件的需求很明确,实现开平方功能的算法也很成熟,因此,既无须通过原型来分析需求也无须用原型来验证设计方案。此外,一旦实现并测试完之后,该产品将被抛弃,因此也无须使用有助于提高软件可维护性的增量模型或螺旋模型来开发该软件。综上所述,为了开发这个简单的软件,使用大多数人所熟悉的瀑布模型就可以了
二、假设你被任命为一家软件公司的项目负责人,你的工作是管理该公司已被广泛应用的字处理软件的新版本开发。由于市场竞争激烈,公司规定了严格的完成期限并且已对外公布。你打算采用哪种软件生命周期模型?为什么?。
答:对这个项目的一个重要要求是,严格按照已对外公布了的日期完成产品开发工作,因此,选择生命周期模型时应该着重考虑哪些模型有助于加快产品开发的进度。使用增量模型开发软件时可以并行完成开发工作,因此能够加快开发进度。
这个项目是开发该公司已被广泛应用的字处理软件的新版本,从上述事实至少可以得出3点结论:第一,旧版本相当于一个原型,通过收集用户对旧版本的反映,较容易确定对新版本的需求,没必要再专门建立一个原型系统来分析用户的需求;第二,改公司的软件工程师对字处理软件很熟悉,有开发字处理软件的丰富经验,具有采用增量模型开发新版字处理软件所需要的技术水平;第三,该软件受到广大用户的喜爱,今后很可能还要开发更新的版本,因此,应该把该软件的体系结构设计成开放式的,以利于今后的改进和扩充。综上所述,采用增量模型来完成这个项目比较恰当。
三、考虑一个修改磁带上主文件的系统。文件管理员把修改信息穿孔在卡片上,系统读入穿孔卡片上的信息并按照记录号把修改信息顺序排列好。然后系统逐个读入主文件上的记录,根据记录上的校验码校核每个读入的记录,丢掉出错的记录,按照修改信息修改余下的记录,产生的新文件存储在磁盘上。最后,系统输出一份修改报告供文件管理员参阅。请分层次地画出上述主文件修改系统的数据流图。
答:本系统的数据源点和终点都是文件管理员,他既向系统提供修改信息,又接收系统生成的修改报告。系统功能主要有:接收修改信息,读主文件,校核记录,修改原始记录和产生报告。注意,问题陈述中所描述的“系统安装记录号把修改信息顺序排列好”,是具体的实现方法。在数据流图中无须描述具体实现方法,因此,在本系统的数据流图中不需要包含“排序”功能。类似地,“文件管理员把修改信息穿孔在卡片上,系统读入穿孔卡片上的信息”,是系统接收修改信息的具体方法。在数据流图中无须描绘这个具体的实现方案,因此,在本系统的数据流图中不需要包含“穿卡片”和“读卡片”的功能。
本系统包含的数据存储是:修改信息,主文件和修改后的主文件。图2.6是本系统的基本系统模型,图2.7是功能级数据流图。
四、用Jackson图描绘下述的一列火车的构成:
一列火车最多有两个火车头。只有一个火车头时则位于列车最前面,若还有第二个火车头时,则第二个火车头位于列车最后面。火车头既可能是内燃机车也可能是电气机车。车厢分为硬座车厢、硬卧车厢和软卧车厢等3种。硬座车厢在车内所有车厢的前面部分,软卧车厢在所有车厢的后面部分。此外,在硬卧车厢和软卧车厢之间还有一节餐车。
答:Jackson图善于描绘复杂事物的组成。用Jackson图描绘一列火车的构成的方法至少有两种,一种方法是把火车分为一个车头和两个车头两类,另一种方法是把后车头作为可选的。图3.29给出了描绘一列火车的构成的Jackson图。
解法1(b)解法2
五、为方便出乎,某银行拟开发计算机储蓄系统,储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户,如果是取款,系统计算利息并印出利息清单给储户。写出问题定义并分析系统的可行性。
答:技术上的可行性:开发系统的计算机硬件已经非常普及,完全没有问题;现在的计算机各方面的技术都非常成熟,相对来说开发此系统的技术也要求比较简单,因此在技术方面是可行的;同时银行还必须有一定量的系统管理和维护的专业人员,在这方面可以通过培训原来的技术人员成为新的需要的技术人员,也可以雇用所需这方面的专业技术员;若按计划,在规定的期限内,本系统的开发是可以完成的。
操作可行性:开发的系统操作要非常简单,以便适合大人小孩老人各类人们都可以很方便操作使用。还有,要有经过培训的专业人员在指导,以便当储户有什么疑难问题时能及时得到正确的答复 社会、政策允许的可行性:全部软件购买正版,机器设置通过正当途径购得
六、分析图3.1所示的层次图,确定每个模块的内聚类型。分析图3.2,确定模块之间的耦合类型
图3.1 计算多地点日平均温度的程序
答:从图3.1所示的层次图可以看出,这个程序的功能是计算若干个指定地点的每日平均温度。变量sum保存某地一天之内在指定的时间取样点的温度之和。程序运行时首先初始化变量sum并打开文件,然后读取地点、时间和温度等原始数据,创建用于保存这些数据的温度记录,接下来计算特定地点的日平均温度,存储温度记录。重复调用“读取地点、时间和温度”、“创建新的温度记录”、“计算特定地点的日平均温度”和“存储温度记录”等模块,直至计算出并保存好所有指定地点的日平均温度。最后,打印平均温度并关闭文件。
从上述叙述可知,“计算多个地点的日平均温度”、“读取地点、时间和温度”、“创建新的温度记录”、“计算特定地点的日平均温度”和“存储温度记录”等5个模块,每个都完成一个单一的功能,模块内所有元素都为完成同一个功能服务,彼此结合的十分紧密,因此,这5个模块的内聚类型都是功能内聚。
初看起来,由于初始化变量sum和打开文件这两个操作都是在程序运行的初始阶段完成的,“初始化变量sum和打开文件” 这个模块的内聚类型似乎是时间内聚。但是,初始化变量sum是本程序特有的操作,而打开文件是硬件要求的操作,是任何使用文件的程序都包含的一个操作,并非本程序特有的操作。当可以分配两个或更多个不同级别的内聚类型给一个模块时,规则是分配最低级别的内聚类型给该模块。因此,“初始化变量sum和打开文件”这个模块的内聚类型都是偶然内聚。同理,“关闭文件并打印平均温度” 这个模块的内聚类型也是偶然内聚。
分析图3.2,确定模块之间的耦合类型。
图3.2 一个程序的模块互连图 在图3.2中已经给模块之间的接口编了号码,表3.1描述了模块间的接口。表3.1 模块接口描述
综合分析图3.2和表3.1所提供的信息可知各个模块之间的耦合情况。例如,当模块p调用模块 q时(接口1),它传递一个参数----飞机类型。当模块q把控制返还给模块p时,它传回一个状态标志。
某些模块之间的耦合类型是明显的,例如,模块p和q之间(接口1)、模块r和t之间(接口5)及模块s和u之间(接口6)都是数据耦合,因为它们传递的都是一个简单变量。
如果两个模块中的一个模块给另一个模块传递控制元素,也就是说,如果一个模块明显地控制另一个模块的逻辑,则它们之间具有控制耦合。例如,当给具有逻辑内聚的模块传递功能代码时就传递了控制元素。另一个控制耦合的例子是把控制开关作为一个参数传递。图3.2中模块q调用模块r时(接口3)传递一个功能代码,因此,这两个模块之间是控制耦合。
图3.2右侧文字说明,模块p、t和u更新同一个数据库,因此,它们之间具有公共环境耦合。
当模块p调用模块s时(接口2),如果模块s使用或更新模块p传递给它的零件清单中的所有元素,则模块p和s之间的耦合是数据耦合;但是,如果模块s只访问该清单中的一部分元素,则模块p和s之间的耦合是特征耦合。模块q和s之间(接口4)的耦合情况与此类似。由于图3.2和表3.1中给出的信息尚不足以准确地描述各个模块的功能,所以不能确定这两对模块之间的耦合是数据耦合还是特征耦合。
第五篇:软件工程期末小结
第一章 软件工程概述
1.对“引入同一变动付出的代价随时间变化的趋势”:在软件开发的不同阶段进行修改需要付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;而在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”是再引入变动,当然需要付出更高的代价。根据美国一些软件公司的统计资料,在后期引入一个变动比在早期引入相同的变动所需付出的代价高2~3个数量级。
2.软件是程序、数据及相关文档的完整集合。程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。
3.为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。
4.软件工程是:(1)把系统的、规范的、可度量的途径尽快应用于软件开发、运行和维护过程,也就是把工程应用于软件;(2)研究(1)中提到的途径。
5.软件工程本质特性(理解,判断):软件工程关注与大型程序的构造,软件工程的中心课题是控制复杂性,软件经常变化,开发软件的效率非常重要,和谐地合作是开发软件的关键,软件必须有效地支持它的用户,在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。
6.软件工程方法学包含3个要素:方法、工具和过程。
7.软件生命周期由软件定义、软件开发和运行维护3个时期组成。软件定义时期的任务是:确定软件开发的工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又称为系统分析,有系统分析员负责完成。软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。这个时期产生的文档有可行性研究报告、需求规格说明书。开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。这个阶段需要的人员为高级技术人员和初级程序员。产生的文档有:软件结构图,软件说明书,数据库。维护时期的主要任务是使软件持久的满足用户的需要。
8.软件一个生命周期包括:问题定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试。
9.软件维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。通常有4类维护活动:改正性维护,也就是诊断和改正正在使用过程中发现的软件错误;适应性维护,即修改软件以适应环境的变化;完善性维护,即根据用户的要求改进或扩充软件使它更完善;预防性维护,即修改软件,为将来的维护活动预先做准备。
第二章 可行性研究
1.可行性研究包括以下:技术可行性、经济可行性、操作可行性、法律可行性。
2.系统流程图的概括地描绘物理系统的传统工具。
3.在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。数据流图是系统逻辑功能的图形表示。
4.数据字典有下列元素的定义组成:数据流、数据流分量(即数据元素)、数据存储。
5.成本估计技术有:代码行技术、任务分解技术、自动估计成本技术。