软件工程 资料整理
- 格式:pdf
- 大小:551.66 KB
- 文档页数:2
软件:与计算机系统操作有关的程序,数据以及相关文档的集合。软件的特点:软件是逻辑产品而不是物理产品,制造及拷贝,不会磨损或老化,为拜托手工方式,软件移植需要,复杂,维护困难,可复用。软件危机的表现:软件开发成本和进度失控,维护代价高,用户不满意,软件质量不可靠,软件不可维护,无文档资料,计算机系统中软件成本比重加大,软件开发生产率提高不能满足要求。软件危机的原因:软件的规模和复杂性,人类智力的局限性,协同工作的困难性,缺乏方法学和工具,用户描述不
精确,二义、遗漏,双方理解有偏差。克服软件危机:1)组织管理、协同配合放工程2)软件工程的理论模型、技术方法3)软件工具。软件设计精髓:自顶向下逐步求精。
软件开发最基本原则:模块化原则。软件工程的定义:是用工程、科学和数学的原则和方法研制、维护计算机软件的有关技术及管理方法,由方法、工具和过程三部分组成。
软件工程的目标:在给定成本、进度的前提下,开发出可修改性(容许对系统进行修改而不增加原系统的复杂性)、有效性(有效利用计算机的时间和空间资源)、可靠性(能
防止各方面不完善造成的软件系统失效)、可理解性(具有清晰的结构,直接反应需求)、可维护性(能进行修改,改进,使软件适应变化)、可重用性(相对独立模块多种场合下应用的程度)、可适应性(在不同的约束下满足客户需求的难易程度)、可移植性(软件变化计算机系统或换机的难易程度)、可追踪性(软件需求对软件设计,程序
进行正向跟踪或程序,软件设计进行你想跟踪的能力)和可互相操作性(多个软件元素相互通信并协同完成任务的能力)并满足用户需要的产品。软件工程的原则:抽象:抽取事物最基本的特性和行为,忽略非基本的细节,采用分层抽象的办法可以控制软件开发过程的复杂性。信息隐藏:将模块中的软件设计决策封装起来的技术。模块化:模块是程序中逻辑上相对独立的成分,它是一个独立的变成单位,应有良好的接口定义。局部化:从物理上和逻辑两个方面保证系统中模块之间具有松散的耦合关系,而在模块内部有较强的内聚性。一致性:整个软件系统和开发过程使用统一符号。完整性:不丢失任何中药成分,软件实现所需功能。可验证性:软件系统易于检查,测试和
评审。软件的可行性研究:任务是了解用户的要求和现实环境,从技术、经济和社会等方面研究并论证软件系统的可行性。可行性论证包括技术可行性、操作可行性和经济
可行性。需求分析:1)任务2)重要性和困难3)需求分析过程4)软件需求规格说明。软件开发:(可行性研究,需求分析)(概要设计,详细设计,实现,组装测试,确
认测试)(适用于维护,退役)(定义,开发,维护三部分)。
可行性研究:了解用户要求的现实环境,从技术、经济、市场等方面研究并论证开发该软件系统的可行性 产品:可行性论证报告、初步的项目开发计划。需求分析:确定
用户对软件系统的功能需求、性能需求和运行环境约束 产品:SRS、初步的用户手册、确认测试计划。概要设计:根据SRS建立系统总体结构,设计数据库和全局数据结构,
确定涉及约束,制定集成测试计划 产品:概要设计规格说明书,数据库/结构设计说明书,集成测试计划。详细设计:细化概要设计生成的各模块,详细描述内部细节,制
定单元测试计划 产品:详细设计规格说明书,单元测试计划。实现:编写源代码并调试,单元测试,验证程序与文档一致性 产品:源代码,单元测试报告。集成测试:根
据概要设计规格说明书将经过单元测试的模块进行集成和测试 产品:满足概要设计要求的可运行的源程序、集成测试报告。确认测试:根据SRS测试系统是否满足用户需
求 产品:可供用户使用的软件产品(文档,源程序),确认测试报告。 /*经济可行性,技术可行性,法律可行性,开发方案可行性*/
瀑布模型:也称软件周期模型,适用于功能和性能需求明确的软件项目的开发和维护,如编译,数据库管理和操作系统等。软件开发过程与软件生命周期是一致的,相邻两
阶段有因果关系、紧密联系,上一阶段的变换结果是下一阶段的输入,需对阶段性产品进行评审,如果评审不合格需返工1)优点:使用时间最长、应用面比较广泛,是其
他模型的基础,提供了软件开发的基本框架,利于大型软件开发过程中人员的组织管理,有利于软件开发方法和工具的研究和使用,从而提高了大型软件项目开发的质量和
效率2)缺点:○1在软件开发的初始阶段指明软件系统的全部需求是困难的,有时甚至不显示,瀑布模型在需求分析阶段要求客户和系统分析员必须做到这一点才能开展后
续阶段工作。○2需求确定后,用户和软件负责人要等相当长的时间才能得到一份软件的最初版本,如果用户对这个软件提出比较大的修改意见,那么整个软件项目将会蒙受
巨大的人力财力和时间方面的损失。原型模型:适用于需求动态变化的场合1)优点:支持需求的动态变化,有助于获取用户需求,便于用户对需求的理解,尽早发现软件
中的错误2)缺点:不支持风险分析初步需求,不宜利用原型模型作为最终产品,除少数简单的事务系统除外,大多数原型可能都会被废弃,仅把建立原型的过程当作帮助
定义软件需求的一种手段,因此,原型模型的快速特点对最终系统是不适用的,且对最终产品像原型一样快速修改可能会比较困难。螺旋模型:适用于大型软件项目的开发,
是生存周期模型和原型模型的结合,不仅体现了两个模型的优点,还增加了风险分析。由需求定义,风险分析,工程实现,评审组成。1)优点:支持需求动态变化,有助
于获取用户需求、便于用户对需求的理解,尽早发现软件中的错误,支持风险分析、可降低或尽早消除软件开发的风险,适合于动态变化、开发风险较大的系统。喷泉模型:
适用于以形式化开发为基础(面向对象)的软件开发过程。软件复用与生命周期中多项开发活动集成;主要支持面向对象的开发方法1)优点:软件系统可维护性较好;各
阶段相互重叠,表明了面向对象开发方法各阶段间的交叉和无缝过渡;整个模型是一个迭代的过程,包括一个阶段内部的迭代和跨阶段的迭代;模型具有增量开发特性,即
能做到“分析一点、设计一点、实现一点,测试一点”,使相关功能随之加入到演化的系统;模型由对象驱动,对象是各阶段活动的主体,也是项目管理的基本内容;该模
型很自然地支持软部件重用。
需求说明:准确性、一致性、清晰性、无二义性、直观、易读易修改。需求说明的方法:采取自上而下、由粗到细、多次循环、逐步完善的方法(自顶向下,逐步求精)。
即,先在最高层次上表达系统的总体需求,然后,逐步分层次向下进行细化和完善。面向对象的方法:包括1)对象,是现实世界中个体或事物的抽象表示,是其属性和相
关操作的封装2)类,是某些对象的共同特征的表示3)继承,类之间的继承关系是现实世界中遗传关系的直接模拟4)聚集,除遗传关系外,现实世界中还普遍存在着部分
---整体关系5)消息,消息传递是对象与外部世界相互关联的唯一途径。面向对象方法和结构化方法对比:1)结构化方法爱用了许多符合人类思维习惯的原则和策略2)面
向对象方法更强调运用人类在日常逻辑思维中经常采用的思想方法和原则3)oo建模更顺畅4)oo可以更好地更改5)oo结构更稳定6)oo模块化,利于信息隐藏。UML
语言机制:UML定义了10种图1)用例图,从外部用户的角度描述系统的功能2)静态图,包括类图、对象图和包图。类图描述系统的静态结构,类图的节点表示系统中的
类及其属性和操作,类图的边表示类之间的联系,包括继承、关联、依赖、聚合3)行为图,包括交互图、状态图和活动图,他们从不同侧面刻画系统的动态行为。交互图
描述对象之间的消息传递,它又分为顺序图与和作图两种形式4)实现图,包括构件图与部署图,它们描述软件实现系统的组成和分布情况。构件图描述软件实现系统中各
组成部件以及他们之间的依赖关系。数据字典:数据流条目 数据流名称 别名 来源 去向 组成
抽象与逐步求精:1)一级抽象,问题的解决问题域本身的术语描述2)二级抽象给出所有主要的子任务3)三级抽象给出初步的过程性表述,所有术语面向软件,并且模块
结构开始明朗。抽象:在某个层次上认识和表示事物,抽取事物的某些特性和行为。有助于控制问题的复杂度;作为软件开发依序推进的重要手段;有助于获取和分析问题
本身所固有的一般--特殊关系。模块化与信息隐藏:1)模块:将一个软件划分为一组具有相对独立功能的部件,每一个部件称为一个功能的部件,每个部件称为一个模块2)
信息隐藏:模块所含信息对于那些不需要这些信息的模块不可访问,每个模块只完成一个相对独立的特定功能,模块之间仅仅交换那些为完成系统功能必须交换的信息 优
点:○1不仅支持模块的秉性开发,还可减少测试和后期维护的工作量○2独立性好○3便于系统功能的扩充和便于测试和维护,减少修改影响向外传播的范围。问题分解:将大
/ 复杂的问题分解为数个小 / 简单的问题,通过对小问题的解决来实现大问题的整体解决;问题分解应遵循高内聚/低耦合原则、自然性原则 意义:有助于降低解决问题的
复杂度;作为复杂问题求解的重要手段;获取和分析问题本身所固有的整体/部分关系。“自底向上”:从一个局部开始,逐渐扩展到整个系统的设计方法 (特点:易于修改
和扩展;整体测试交易通过;需要进行详细的可行性论证)。“自顶向下,逐步求精”:从顶层开始逐层向下分解,直至系统的所有模块都小到易于掌握为止(特点:可能导
致较大的重新设计;整体测试中可能在模块接口间发现不一致;如果在可行性上出现问题,可以较早发现)。模块独立性:是指软件系统中每个模块只涉及软件要求的具体
的子功能,而和软件系统中其它的模块的接口是简单。两个衡量标准:耦合,内聚。内聚:偶然性内聚(程序员在写程序时发现一组不同语句分别在多个子程序中出现于是
将这组语句单独组成一个模块这样的模块便是偶然内聚模块),逻辑性内聚(一个模块完成所有与类型无关的输出根据输入的控制信息,或从文件中读入一个记录或向文件
写出一个记录),时间性内聚(初始化模块和终止模块例FORTRAN中提供的BLOCK DATA子程序是初始化模块),过程性内聚(在用程序流程图设计模块时若将程序流程图中
的一部分单独组成模块便形成过程内聚例将循环部分组成模块),通信性内聚(打印检验结果模块计算A模块计算B模块都要从同一个文件中读信息作为输入),顺序性内聚
(模块进行许多操作每个都有各自的入口点每个操作的代码相对独立而且所有操作都在相同的数据结构上完成),功能性内聚(模块内所有成分形成一个整体完成单个功能
如求三角形的面积的模块)。应该提高模块内聚度。耦合:非直接性耦合(AB之间没有必然联系就是非直接耦合),数据耦合(一个求三角形面积的函数fun(intaintbintc)参
数abc是三角形的三条边主函数求三角形面积时传递三角形的三条边),特征耦合(如果在函数或过程调用时传递的参数是结构变量如记录名数组名文件名等但被调用模块
只操作参数中的一部分数据例C语言中参数传递结构体变量名),控制耦合(一个函数fun(intaintbintcintflag)实现两个功能一个是求三角形面积一个是求一元二次方程的根根
据主函数传递的flag的值决定实现哪一个功能),外部环境耦合(C语言程序中各个模块都访问被说明成extern类型的外部变量),公共数据耦合(两个模块可以访问同一个
数据库并且读写同一条记录),内容耦合(一个模块使用另一模块内部的数据或控制信息)。一般尽量使用数据耦合,减少控制耦合,限制外部环境耦合和公共数据耦合杜绝