1.什么是软件工程?1968年,在德国召开的北大西洋公约组织会议上首次提出“软件工程”概念,希望用工程化的原则和方法来克服软件危机。2.软件危机的表现(5方面)(1)对软件开发的成本估计不正确(2)对软件开发的进度估计不准确(3)软件产品质量不可靠(4)软件可维护性差,软件的文档资料不完整和不合格(5)软件开发生产率不高,不能满足软件生产的需要3.常见的软件生命周期模型(4种)瀑布生命周期模型,迭代与递增模型,快速原型开发生命周期模型,螺旋生命周期模型4瀑布模型的各个阶段(6个阶段)软件计划,需求分析和定义,软件设计,软件实现,软件测试,软件运行和维护各个阶段的作用:分析阶段:弄清楚软件系统需要做什么,有哪些功能设计阶段:对软件系统的体系结构,数据,构件,各模块的实现算法进行设计。编码阶段:使用程序设计语言,编写程序实现各模块测试阶段:验证各模块功能是否正确,模块间接口是否正确,软件硬件是否能协同工作,各项功能,性能是否符合需求。5.瀑布模型是什么驱动的?分析和设计两个阶段的成果是什么?答:瀑布模型是文档驱动的,成果是:需求说明书(需求规约),设计说明书6.软件开发流程:需求-分析-设计-实现7.软件工程是通过科学知识和过程的实际应用,进行软件开发,运行,维护和停用的严格的系统化方法。8.各生命周期模型的优点和缺点生命周期模型优点缺点瀑布生命周期模型纪律性强制方法,文档驱动交付的产品可能不符合客户要求迭代与增量模型与现实世界软件开发最接近的模型,蕴含统一过程方法自始至终开发者和客户纠缠在一起,直到完全版出来螺旋模型风险驱动适合较小规模的开发项目敏捷开发模型迭代开发,更快得到用户/客户的反馈对开发团队人员的综合素质要求高9.生命周期模型是对构建一个软件产品时的应完成的步骤的描述。10.面向对象的三大特征:封装性,继承性,多态性封装是指把相关数据(属性)和这些数据的操作结合在一起,组成一个独立的对象。什么是多态?多态性是指同一个消息被不同的对象接收时,可产生不同的动作或执行结果。11.UML统一建模语言RUP统一过程USDP统一软件开发过程RUP的三个基本特征(1)用例和风险驱动(2)以构架为中心(3)迭代和增量统一过程是需求驱动的12.软件生命周期模型各个阶段的时间比例开发阶段:分析30%设计25%编码30%测试15%维护阶段:五年-十年13.统一过程的5个核心工作流:需求流,分析流,设计流,实现流,测试流;统一过程的4个阶段:开始阶段,细化阶段,构建阶段,转换阶段。14.软件测试的阶段:单元测试,集成测试,系统测试,验收测试15.什么是UML?UML是一种对面向对象系统进行可视化,详述,构造和文档化的统一建模语言,是一种直观化,明确化,构建和文档化软件系统产物的通用可视化建模语言。16.4+1模型观五个视角:用例视图,逻辑视图,构件视图,进程视图,配置视图17.UML的四种关系逻辑视图构件视图进程视图配置视图用例视图关联,泛化,实现,依赖(“实”“依”“关”“泛”)18.类图中,一个类包含哪三个部分?类名,属性,操作19.类与类之间的关系有:20.关联/泛化/依赖/实现,其中有一种特殊的表示整体部分关联,是聚合与组合。21.聚合与组合有什么区别?聚合关系中的整体与部分,不具有相同的生命周期,例如班级与学生,组合关系中的整体和部分,具有相同生命周期,例如人与人的各部分。22.用例图中的用例之间,有哪几种关系?(1)泛化:如付款用例与现金付款子用例指向父用例(2)包含:用图书馆信息管理用例包含新图书信息,修改图书信息用例(3)扩展:还书用例扩展出交罚款用例23.用例描述(使用模板)AB父ABinclude还书交罚款extends用例名称表明用户的意图或用例的用途标识符[可选]惟一标识符,便于引用该用例用例描述概述用例的几句话参与者与此用例相关的参与者前置条件一个条件列表,这些条件必须在访问用例前得到满足后置条件一个条件列表,这些条件必须在用例完成之后得到满足基本操作流程描述用例中各项工作都顺利进行时用例的工作方式可选操作流程描述变异工作方式、出现异常或发生错误的情况下的路径24.顺序图有几个元素?对象,时间线,控制焦点(激活条),消息25.UML中,交互图包括哪两种?顺序图,协作图都能表示对象间的交互关系26.在面向对象软件开发的业务建模,分析,设计,编码,测试5个阶段中是如何使用UML图的?(1)业务建模:用对象图和类图表示目标软件系统所基于的应用领域中的概念与概念之间的关系;用活动图刻画领域中的工作流。(2)分析:用活动图描述用例;用用例图表示参与者与用例之间,用例与用例之间的关系;用顺序图图形描述参与者和系统之间的系统事件。(3)设计:用包图设计软件体系结构;用协作图或顺序图寻找参与用例实现的类及其职责;用类图描述这些类及其关系;状态图描述那些具有复杂生命周期行为的类;用活动图描述复杂的算法过程和有多个对象参与的业务处理过程;用部署图描述硬件的拓扑结构以及软件和硬件的映射问题。(4)实现:把设计得到的类转换成代码(5)测试:单元测试使用类图和类的规格说明;集成测试使用构件图和协作图,用用例图和用例文本描述来确认系统的行为是否符合这些图中的定义。27.类图:画出某个用例(功能)的设计类图,要求能体现软件架构28.顺序图:能画出某个用例(功能)的顺序图,根据类图,能体现软件体系架构29.衡量模块独立性的两个指标:内聚度,耦合度好的模块独立性:高内聚,低耦合30.复用的两种方式:继承,组合,优先使用组合31.五大设计原则,以及各原则的内涵(1)单一职责原则职责单一不要存在多于一个导致变更的原因,即一个类只负责一个职责(2)封闭原则开闭原则是指类、模块、方法是可以扩展的,但不可以修改(3)里氏替换原则不要破坏继承体系子类可以实现父类的抽象方法,但不可以覆盖(4)依赖倒置原则要面向接口编程高层模式不应该依赖底层模块,两者都应该依赖抽象,(5)接口隔离原则设计接口时要精简单一客户端不应该依赖他不需要的原则,一个类对另一个类的依赖应该建立在最小接口上32.讲过的设计模式(1)单例模式定义:它保证一个类有且仅有一个实例,并提供一个访问它的全局访问点。适用场合:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时;当这个唯一的实例是通过子类化可扩展的,并且客户无须更改代码就能使用一个扩展的实例。类图:代码:publicclassSingletonClass{privatestaticSingletonClassinstance=null;publicstaticsynchronizedSingletonClassgetInstance(){if(instance==null){instance=newSingletonClass();}returninstance;}privateSingletonClass(){}}(2)适配器模式定义:将一个类的接口转换成客户希望的另一个接口适用场合:1、已经存在的类的接口不符合我们的需求;2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。类图:类适配器模式对象适配器模式代码:类适配器://已存在的、具有特殊功能、但不符合我们既有的标准接口的类classAdaptee{publicvoidspecificRequest(){System.out.println(被适配类具有特殊功能...);}}//目标接口,或称为标准接口interfaceTarget{publicvoidrequest();}//具体目标类,只提供普通功能classConcreteTargetimplementsTarget{publicvoidrequest(){System.out.println(普通类具有普通功能...);}}//适配器类,继承了被适配类,同时实现标准接口classAdapterextendsAdapteeimplementsTarget{publicvoidrequest(){super.specificRequest();}}//测试类publicclassClient{publicstaticvoidmain(String[]args){//使用普通功能类TargetconcreteTarget=newConcreteTarget();concreteTarget.request();//使用特殊功能类,即适配类Targetadapter=newAdapter();adapter.request();}}对象适配器://适配器类,直接关联被适配类,同时实现标准接口classAdapterimplementsTarget{//直接关联被适配类privateAdapteeadaptee;//可以通过构造函数传入具体需要适配的被适配类对象publicAdapter(Adapteeadaptee){this.adaptee=adaptee;}publicvoidrequest(){//这里是使用委托的方式完成特殊功能this.adaptee.specificRequest();}}//测试类publicclassClient{publicstaticvoidmain(String[]args){//使用普通功能类TargetconcreteTarget=newConcreteTarget();concreteTarget.request();//使用特殊功能类,即适配类,//需要先创建一个被适配类的对象作为参数Targetadapter=newAdapter(newAdaptee());adapter.request();}}(3)工厂模式:定义:创建实例,代替new方法进行实例化;封装实例的创建过程。三种形式:简单工厂,工厂方法,抽象工厂适用场合:1.类不知道自己要创建哪一个对象2.类用它的子类来指定创建哪个对象3.客户需要清楚创建了哪一个对象(4)观察者模式定义:定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。适用场合:1、对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。2、对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。类图:(5)策略模式定义:定义了一系列算法,把他们一个个封装起来,并使他们可以相互替换适用场合:1、多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。2、需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。3、对客户隐藏具体策略(算法)的实现细节,彼此完全独立。类图:(6)装饰者模式定义:动态的给一个对象添加一些额外的职责,这种添加不是通过继承实现的,而是通过组合。适用场合:为了软件新增新的功能操作类图:33.设计模式重用的是设计经验,而不是代码34.CMM能力成熟度模型(5个等级)初始级:最低级别,有效的管理方法在本质上没有获得使用。可重复性级:建立管理软件项目的方针以及贯彻执行这些方针的措施。已定义级:将管理和工程活动两个方面的软件过程文档化,标准化,并综合该组织的标准软件过程。已管理级:收集软件过程和产品质量的详细度量优化级:组织通过预防缺陷,技术更新和更改过程等多种方式,不断提高项目的过程性能以持续改善组织软件过程能力35.用户需求和系统需求有什么区别?用户需求就是用户关于软件的外界特征的规格表述,系统需求是比用户需求更具有技术特征的需求陈述,是提供给开发者或用户方技术人员阅读的,并将作为软件开发人员设计系统的起点与基本依据。36.分别解释耦合,内聚内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。耦合(Coupling)是模块之间依赖程度的度量。