软件工程主要知识点串讲1软件工程主要知识点串讲第一讲概述1如何理解软件工程及其研究内容:软件工程:(1)将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件;(2)研究(1)中的方法。软件工程是一门旨在指导生产无缺陷软件的学科,既指导如何生产能够及时交付、成本不超预算并且满足用户需求的软件产品。软件工程研究内容包括两个方面:(1)要考虑专业软件开发所需要的理论、方法和工具----工程技术问题;(2)软件工程要考虑如何有效的在软件开发中利用有限的成本资源----工程管理的问题2软件的内涵:软件包括:①能够提供客户所需功能与性能的计算机程序;②能够使程序得以处理信息的数据结构;③用以描述程序开发过程及使用的文档。3软件产品的两种类型包括:通用软件和定制软件(多数),前者是为某一类通用的市场设计开发的,后者是为一个特定的用户设计开发。软件工程主要知识点串讲24一个成功软件项目的三个要素包括:按时交付,不超预算和满足用户要求。5软件过程与软件生命周期的相关概念:软件过程是指开发或制作软件产品的一系列活动及其成果.所有的软件过程中都包括四个基本活动:1.描述(Specification)-系统应该提供的功能及其开发约束;2.开发(Development)-软件产品的生产过程;3.有效性验证(Validation)-检验软件产品是否满足了客户的需要;4.进化(Evolution)-按照用户的变更要求不断的改进软件。软件生命周期是软件过程的另一种形象描述,通常包括需求定义、分析与描述、软件设计、实现、测试、维护与退役等活动。6优良软件的属性包括可维护性、可依赖性、有效性、可接受性。7CASE是一些用于支持软件过程活动的自动化、半自动化的软件系统。(计算机扶助软件工程)软件工程主要知识点串讲3第二讲软件过程1一个软件过程模型是软件过程的一种抽象表示,它通常是对软件过程某一特定方面的抽象描述。2瀑布模型的图形表示及其特点:1)这种模型把软件过程划分成几个顺序的阶段。阶段间具有依赖性,前一个阶段结束,后一个阶段才能开始;2)这种模型很难对用户变更做出调整,只适用于需求非常清楚和需求变更被严格限制的情况下。3进化式开发的基本思想、类型与特点:基本思想:通过开发系统原型和用户反复交互,以明确需求,使系统在不断调整与修改中得以进化成熟。又叫做原型式开发方法。软件工程主要知识点串讲4进化式开发有两种基本类型:探索式开发和抛弃式原型法。这种模型开发周期短、能够对变更做出快速反应,但其开发过程缺乏过程可见性,系统结构通常较差,而且需要一些特别的技术(如原型快速开发技术),这些技术通常与主流技术不兼容。所以它适用于中小规模的交互系统或生命周期较短的系统,也可以用于大型系统的局部开发(如系统界面),可以和瀑布模型混合使用。4增量式开发的图形表示及特点:软件工程主要知识点串讲5在这种开发方式中,系统不是作为一个整体交付,而是被分解成若干个增量,每个增量交付系统的部分功能。用户的需求按优先级排队,优先级最高的需求被放入最早交付的增量中。这样,优先级最高的系统功能就得到最多的测试,系统的可靠性较高。5螺旋模型的特点:这种模型用螺旋线表示软件过程,而不是采用一系列活动及活动间的反馈;螺旋中的每个回路表示软件过程中的一个阶段;这种模型充分考虑了软件开发所面临的风险,并贯穿软件过程始终。软件工程主要知识点串讲6第三讲需求工程1需求工程过程包括可行性研究、需求导出与分析、需求描述以及需求有效性验证等活动,如图:2可行性研究要决定被提议的系统是否值得去做,包括信息评估、信息汇总和书写报告三部分工作。3软件需求有两个不同层次的描述,即用户需求与系统需求:用户需求从客户的角度,采用自然语言配合以图表对目标系统应提供的服务以及系统操作要受到的约束进行的声明。系统需求系统需求是一种结构化文档,要运用一些专业的模型详细的描述系统的功能及其约束。系统需求文档有时也称为功能描述,应该是精确的,它可以成为双方之间合同的重要内容。软件工程主要知识点串讲74功能性需求、非功能性需求及领域需求的相关概念:功能需求:对系统应提供的功能,系统在特定的输入下做出的反应及特定条件下的行为的描述。某些情况下还要包括系统不应做什么。非功能需求:对系统提供服务或功能时收到的约束进行描述。如时间约束、开发过程约束和标准等。领域需求:这种需求来自于系统的应用领域,反映领域特征。可能是功能需求也可能是非功能需求。功能性需求与非功能性需求相比较,非功能需求往往更为关键,因为非功能需求表示的是系统的整体特征,而功能性需求描述的则是局部功能。(要求能够识别功能性需求与非功能性需求!!!看课件上例子)5书写用户需求的准则:设计一个标准格式,以帮助减少遗漏,避免不必要的细节描述;使用一致的语言,尤其强调区别强制性需求与希望性需求;使用文本加亮来突出关键性需求;尽量避免使用计算机专用术语。6用自然语言描述系统需求存在的问题及替代方法:用自然语言描述系统需求存在不明确、描述随意性大、不能进行模块化描述的缺点,可以使用结构化自然语言、设计描述语言、图形描述语言和数学描述方法来代替自然语言。软件工程主要知识点串讲87需求导出的过程活动包括:需求发现、需求的分类与组织、优先排序和冲突解决、需求文档化。8需求信息的来源包括已有的文件,系统的信息持有者(stakeholders)以及相近系统的规约描述。9场景的常用描述方法是自然语言和用例,描述内容一般包括:场景开始时系统初始状态的描述;一个标准事件流的描述;对可能出现的错误及解决方法的描述;其它并行事件流的描述;场景结束状态的描述。10结构化分析方法以及主要的结构化分析模型结构化分析方法是一种面向数据流的系统建模技术,它从数据加工的角度对系统进行规格描述;结构化分析模型主要包括数据词典、数据流图、实体-关系图、状态-迁移图。实体—关系图数据词典状态—迁移图数据流图数据对象描述控制规格说明加工规格说明软件工程主要知识点串讲911为什么要进行需求有效性验证?对需求文档的检查主要包括哪些方面?需求有效性验证的目的是检验需求描述是否正确地反映了客户的意愿,以期尽早的发现需求中存在的错误。好的需求对软件系统的开发效率及软件质量起着至关重要的作用。一个错误发现的越晚,修改它所付出的代价就越大。需求检查包括对有效性、一致性、完备性、现实性和可检查性的检查。第四讲软件设计1软件设计及其要解决的问题:设计是一个把问题转换成解决方案的创造性过程;软件设计要解决“软件系统如何实现”的问题;从工程管理的角度,软件设计可以分成概要设计(总体设计、系统设计)与细节设计(详细设计)2理解信息隐藏原理以及采用信息隐藏原理指导模块设计的好处信息隐藏原理是指模块应该设计得使其所含信息(过程和数据)对于那些不需要这些信息的模块来说不可访问;每个模块只完成一个相对独立的特定功能;模块之间仅交换那些为完成系统功能必须交换的信息,即模块应该功能独立的。信息隐藏的好处:1)它支持模块的并行开发;软件工程主要知识点串讲102)减少测试和后期维护的工作量。因为测试和维护阶段不可避免地要修改设计和代码,模块对大多数数据和过程处理细节的隐藏可以减少错误向外传播。3)整个系统扩充功能只需“插入”新模块,原有的多数模块无须改动。3模块独立性及其度量准则:模块独立性的概念是模块化、抽象和信息隐藏概念的直接产物,模块独立性是通过开发具有单一功能和与其他模块没有过多交互作用的模块来达到的。独立性好的模块对其它的模块依赖性小,修改时对其它模块的影响小,易于修改和扩充,因此有良好的可维护性。模块独立性可用两个定量准则来度量:耦合(coupling)和内聚(cohesion)。耦合性是对软件程序结构中各个模块之间相互关联程度的一种度量。内聚性是信息隐藏和局部化概念的自然扩展,它标志一个模块内部各成分彼此结合的紧密程度。模块的内聚性越强,耦合性越弱,独立性越强。4体系结构设计的任务:体系结构设计的任务是要识别出组成系统的子系统并建立子系统的控制和通信框架。体系结构设计是联系需求描述与其他设计活动的桥梁。5数据中心体系结构(容器模型)的基本特点:所有共享数据放到一个中央数据库(容器)中,所有子系统都能从中存取数据;6客户服务器模型的主要组成:一组为其它子系统提供服务的单机服务器;一组向服务器请求服务的客户机;连接客户机与服务器的网络。软件工程主要知识点串讲117分层(抽象机)体系结构的特点:这种模型把系统组织成一系列的层次(抽象机),每一层提供一组服务;这种模型支持增量式的开发,不同层次的服务可以单独交付;层与层之间以接口相联系,一个接口发生改变,只有毗邻的层会受到影响;8两种基本的控制模型:集中控制:一个子系统专门负责控制,控制其他子系统的启动与停止。基于事件的控制:不将控制信息集中在一个子系统内,每个子系统都能够接受来自系统外部的事件并作出响应。9用户界面设计过程模型如下:10TheoMandel提出的界面设计的三条“黄金规则”是:1)置于用户控制之下;2)减少用户的记忆负担;3)保持界面一致。软件工程主要知识点串讲1211对错误消息的设计要求:礼貌的、简明的、一致的、建设性的。12软件帮助系统不能是用户手册的简单复制,应该有一个合理的组织与结构,应该为用户提供不同的入口。第五讲面向对象的分析与设计1面向对象方法与结构化方法相比较有以下优势:符合人类自然思维方式,易于理解、描述和实现。对需求变化有较好的适应性:封装机制和消息传递机制将需求变化影响限制在对象内部。支持软件复用:封装性有助于实现复用;继承、实例化实现了对象复用;类库提供了大量公共代码。可维护性好:封装性和消息传递造成低耦合,错误定位和修改容易;继承与多态使得功能的扩展更加容易。开发过程衔接紧密:在软件生命周期各阶段可以使用同样的模型描述。2UML是一种标准的图形化建模语言,它为不同领域的人们提供一种统一的交流标准,这种标准使得系统构造者能够用标准的、易于理解的方式建立能表达出他们想象力的系统蓝图,并使客户、分析员、设计人员、程序员和系统其它涉及者能够相互理解和达成一致,从而能够有效地共享和交流设计结果。软件工程主要知识点串讲134了解面向对象的分析过程:要求掌握:1)用例图的画法;2)用例表(用例规约描述)的基本结构及描述方法;3)用CRC确定关键抽象的过程;4)用类模型表示关键抽象。分析用例场景发现更多细节在分析的基础上精化用例图用活动图验证用例用CRC分析法确定关键抽象表述域模型中关键抽象之间的关系使用从用例场景中得到的对象图来验证域模型SRSCRC软件工程主要知识点串讲145采用鲁棒性分析建立设计模型的过程(掌握建模方法):1)选择一个用例2)构造一个满足用例活动的协作图。a.识别支持用例活动的设计组件(边界组件、服务组件、实体组件)。b.画出这些组件间的关联c.用消息标记这些关联3)从另一个角度,把协作图转换成序列图(可选的)。软件工程主要知识点串讲15第六讲软件实现与有效性验证1测试和调试的区别:测试和调试是不同的过程,通常交叉进行。测试的目的是确定系统中存在缺陷;调试考虑的是定位和修改缺陷。2验证和有效性确认的区别:验证:Arewebuildingtheproductright”.检查软件是否符合它的规格描述。有效性确认:Arewebuildingtherightproduct”.检查软件是否满足客户的期待。3验证和有效性确认过程的两种基本方法:软件检查,通过对系统的各种静态成果,如需求文档、设计文档、源代码,进行检查和分析发现问题。软件测试,通过使用测试数据执行系统,检查运行结果来发现问题。4测试的目的是为了揭示程序中存在错误,而不是没有错误!软件工程主要知识点串讲165仔细的V&V规划能够使程序检查和测试的工作得到更多的回报。V&V过程的规划应该从开发过程的早期就开始。如图,不同阶段的测试计划应该来自前期分析与设计阶段。(不用画图)6软件测试