软件工程辅导大纲1、熟练掌握软件工程的基本概念,了解软件生命周期各个阶段的任务和流程。2、理解不同软件过程模型的优缺点,了解敏捷开发的思想,熟悉RUP的基本概念和思想。3、深刻理解结构化开发方法的原理、过程,熟练掌握主要的图形工具的应用和绘制,包括数据流图、数据字典、软件结构图、程序流程图等,理解结构化程序设计的基本思想。4、深刻理解面向对象技术的基本概念,了解常用的面向对象开发方法,熟悉UML及其基本组成,能够用UML进行简单的系统建模分析与设计。大纲5、理解人机交互设计的基本原理。6、了解软件测试的目的和基本方法,熟练应用常用的白盒测试和黑盒测试方法设计测试用例,深刻理解软件测试的过程。7、掌握软件项目管理的基本任务和一般方法,对软件配置管理有深刻的理解。8、了解软件能力成熟度模型CMM,了解其不同级别的主要特征。题型题量40分:其中选择题10道:10分,简答题2道10分,综合题2道20分。《软件工程--理论与实践(第2版)》,许家珆、白忠建、吴磊编著,高等教育出版社。《软件工程导论》,张海藩,清华大学出版社。一、软件工程基本概念软件工程:应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。软件工程包括3个要素:方法、工具和过程软件工程过程模型:瀑布模型、增量模型、快速原型、螺旋模型、敏捷模型、RUP、微软过程一、软件工程基本概念软件生命周期:软件产品从提出、实现、使用维护到停止使用退役的过程。三个时期:软件定义、软件开发、运行维护,主要阶段:(1)可行性研究;(2)需求分析;(3)软件设计;(4)软件实现;(5)软件测试;(6)运行和维护。软件工程原则抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。一、软件工程基本概念瀑布模型顺序模型特点阶段间具有顺序性和依赖性必须等前一阶段的工作完成之后,才能开始后一阶段的工作;前一阶段的输出文档就是后一阶段的输入文档。推迟实现的观点清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现质量保证的观点每个阶段都必须完成规定的文档。每个阶段结束前都要对所完成的文档进行评审。81.4.1瀑布模型瀑布模型优点:可强迫开发人员采用规范的方法(如结构化技术);严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。缺点:由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。开发周期长。前期不能出错。一、软件工程基本概念RUP10一、软件工程基本概念敏捷过程敏捷一词来源于2001年初美国犹他州雪鸟滑雪胜地的一次敏捷方法发起者和实践者(他们发起组成了敏捷联盟)的聚会(17人)。雪鸟会议共同起草了敏捷软件开发宣言。其中最重要的部分就是对一些与会者一致同意的软件开发价值观的表述:人和交互重于过程和工具。可以工作的软件重于求全责备的文档。客户协作重于合同谈判。随时应对变化重于循规蹈矩。11一、软件工程基本概念极限编程(续)五个准则(续):沟通通过最简洁的文档,最直接的面对面沟通获得对任务环境的理解。简单鼓励从最简单的解决方式入手,只关注于对当前的需求,再通过不断重构达到更好的结果。反馈来自系统的反馈:通过编写单元测试,程序员能够很直观的得到经过修改后系统的状态。来自客户的反馈:功能性测试是由客户还有测试人员来编写的。这样的评审一般计划2、3个礼拜进行一次,这样客户可以非常容易的了解、掌控开发的进度。来自小组的反馈:当客户带着新需求来参加项目计划会议时,小组可以直接对于实现新需求所需要的时间进行评估然后反馈给客户。12一、软件工程基本概念极限编程(续)五个准则:勇气其中之一就是“只为今天的需求设计以及编码,不要考虑明天”这条戒律。另一个勇气的例子是了解什么时候应该完全丢弃现有的代码。尊重(最新添加的价值)尊重的价值在极限编程中,团队成员间的互相尊重体现在每个人保证提交的任何改变不会导致编译无法通过、或者导致现有的测试case失败、或者以其他方式导致工作延期。团队成员对于他们工作的尊重体现在他们总是坚持追求高质量,坚持通过重构的手段来为手头的工作找到最好的解决设计方案。二、结构化分析方法1、需求分析的任务2、结构化分析方法;面向数据流自顶向下,逐层分解,建立系统的处理流程以数据流图和数据字典为主要工具,建立系统的逻辑模型。二、结构化开发方法3、结构化分析的常用工具(1)数据流图:描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统功能建模。数据流图的基本图形元素:数据流、加工(处理)、文件(数据存储)、数据池(数据源或终点)二、结构化分析方法二、结构化分析方法4、结构化分析的常用工具(2)数据字典:数据流、数据项、文件、加工。存折=户名+所号+帐号+开户日+性质+(印密)+1{存取行}50二、结构化分析方法4、结构化分析的常用工具(3)判定树:从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出判定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树。二、结构化分析方法4、结构化分析的常用工具(4)判定表:与判定树相似,当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由于某一组条件取值的组合而引发的,使用判定表描述比较适宜。二、结构化分析方法5、软件需求规格说明书任务:软件做什么特点:(1)正确性;(2)无岐义性;(3)完整性;(4)可验证性;(5)一致性;(6)可理解性;(7)可追踪性。作用:设计依据、验收依据、共同理解三、结构化设计方法1、从技术观点来看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。(1)结构设计:定义软件系统各主要部件之间的关系。(2)数据设计:将分析时创建的模型转化为数据结构的定义。(3)接口设计:描述软件内部、软件和协作系统之间以及软件与人之间如何通信。(4)过程设计:把系统结构部件转换成软件的过程描述。三、结构化设计方法2、结构化设计(StructuredDesign,SD)分为两个阶段:总体设计(又称概要设计)通过仔细分析软件规格说明,适当地对软件进行功能分解,从而把软件划分为模块,并且设计出完成预定功能的模块结构。详细设计详细设计阶段详细地设计每个模块,确定完成每个模块功能所需要的算法和数据结构。三、结构化设计方法3、软件概要设计的基本任务是:(1)设计软件系统结构;(2)数据结构及数据库设计;(3)编写概要设计文档;(4)概要设计文档评审。4、详细设计的任务确定每个模块的算法。确定每一个模块的数据组织。为每个模块设计一组测试用例。编写详细设计说明书。三、结构化设计方法5、结构化设计原则模块化、抽象、逐步求精、信息隐藏6、模块的独立性可以由两个定性标准度量:耦合用于衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚用于衡量一个模块内部各个元素间彼此结合的紧密程度。在程序结构中各模块的内聚性越强,则耦合性越弱。优秀软件应高内聚,低耦合。三、结构化设计方法三、结构化设计方法7、结构图:方框代表一个模块,框内为模块的名字或功能;方框之间的箭头表模块间的调用关系带注释的箭头表示模块之间传递的信息。空心圆表示数据。实心圆表示控制信息。三、结构化设计方法8、典型的数据流类型有两种:变换型和事务型。(1)变换型系统结构图由输入、中心变换、输出三部分组成。(2)事务型数据流的特点是:接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。三、结构化设计方法9、详细设计:是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。详细设计的任务确定每个模块的算法。确定每一个模块的数据组织。为每个模块设计一组测试用例。编写详细设计说明书。三、结构化设计方法10、常见的过程设计工具有:图形工具(程序流程图、PAD、N-S)、PDL语言表格工具(判定表)、语言工具(PDL)。三、结构化设计方法PROCEDUREspellcheckISBEGINsplitdocumentintosinglewordsloodupwordsindictionarydisplaywordswhicharenotindictionarycreateanewdictionaryENDspellcheck四、面向对象技术1、面向对象分析的方法。面向对象以UML为标准建模语言2、面向对象基本概念类对象继承封装多态四、面向对象技术3、OMT三个模型对象、动态、功能4、UML名词:统一建模语言UnifiedModelingLanguage组成:UML1.x和2.0区别新增加和改变的图三种对象:边界、实体、控制四、面向对象技术5、基本关系关联(association)泛化(generalization)实现(realization)依赖(dependency)四、面向对象技术图名功能备注类图描述类、类的特性以及类之间的关系UML1原有对象图描述一个时间点上系统中各个对象的一个快照UML1非正式图复合结构图描述类的运行时刻的分解UML2.0新增构件图描述构件的结构与连接UML1原有部署图描述在各个节点上的部署UML1原有包图描述编译时的层次结构UML中非正式图用例图描述用户与系统如何交互UML1原有活动图描述过程行为与并行行为UML1原有状态机图描述事件如何改变对象生命周期UML1原有顺序图描述对象之间的交互,重点在强调顺序UML1原有通信图描述对象之间的交互,重点在于连接UML1中的协作图定时图描述对象之间的交互,重点在于定时UML2.0新增交互纵览图是一种顺序图与活动图的混合UML2.0新增用例图(usecasediagram)客户本行转账银行职员单独用例跨行转账银行存款取款转账职员维护账户登录职员从外部视角描述系统做什么(并非怎样做),包含了所有的场景(scenario)。类图(classdiagram)描述类间关系2019/8/12CopyrightX.Shi,DHU36对象图(objectdiagram)用具体实例描述类间关系,通常用来描述某些复杂的关系。polo:carfrontleft:wheelfrontright:wheelbackleft:wheelbackright:wheelcarwheeln11n2019/8/12CopyrightX.Shi,DHU37顺序图(sequencediagram)交互图的一种,强调对象间消息的时间顺序。2019/8/12CopyrightX.Shi,DHU38通信图(CommunicationDiagram)原1.x中协作图,交互图的一种,强调对象的作用,而非消息的时间顺序。:Student:RegisterForCoursesForm:RegistrationController:CourseCatalogSystem5:displaycourseofferings()6:displayblankschedule():CourseCatalog1:createschedule()2:getcourseofferings()3:getcourseofferings(forSemester)4:getcourseofferings()LinksMessages2019/8/12CopyrightX.Shi,DHU39活动图(Activitydiagram)描述某个过程的活动流程。2019/8/12CopyrightX.Shi,DHU40状态机图(StateMachineDiagram)描述对象可能的状态及其转换,关心对象在某过程中的经历。2019/8/12CopyrightX.Shi,DHU41构件图(componentdiagram)描述系统构件间的关系,关注软件的配置信息。2019/8/12CopyrightX.Shi,DHU42部署图(deploymentdiagram)描述系