软件工程期末总结课程: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个问题:系统响应时间,用户帮助设施,出错信息处理和命令交互。
用户界面设计过程是一个迭代的过程,首先创建设计模型,再用原型实现这个设计模型,并由用户试用和评估,然后根据用户意见进行修改。
为了支持上述迭代过程,各种用于界面设计和原型开发的软件工具产生。
它们为简化窗口,菜单,设备交互,出错信息,命令及交互环境的许多其它元素的疮疖提供各种历程或对象。
用户界面评估周期如下,完成初步设计之后就创建第一级原型,用户使用并评估该原型,直接向设计者表述对界面的评价,设计中根据用户意见修改设计并实现下一级原型。