软件工程
软件开发方法:
结构化法 | 强调用户至上,严格区分工作阶段,每阶段都有任务和成果,强调开发过程的整体性和全局性,开发过程工程化,文档资料标准化,自顶向下逐步求精 |
原型法 | 适用需求不明确的开发,分为抛弃型原型和进化型原型 |
面向对象方法 | 更好的复用性,关键在于建立一个全面、合理、统一的模型 |
面向服务方法 | SO方法有三个主要的抽象级别;操作、服务、业务流程 SOAD分为三个层级:底层服务构件、服务接口与协议、服务流程编排 服务建模:分为服务发现、服务规约和服务实现三个部分 |
统一过程开发模型:
四个阶段:
1.初始: 确定项目范围和边界,识别关键用例、制订项目计划、展示候选架构、预估费用和时间、预估风险、阶段技术评审
2.细化;分析问题领域、制订构建阶段计划、确定基础架构、选择构件、淘汰最高风险元素、阶段技术评审
3.构建;开发构件、构件组装与测试、阶段技术评审
4.交付;进行β测试、制作发布版本、用户文档定稿、确认新系统,培训、调整产品、阶段技术评审
三个特点:用例驱动、以架构为中心、增量和迭代
优点:提高了团队生产力,为每个开发成员提供了必要的准则、模板和工具指导,建立了简洁和清晰的过程结构
缺点:不能快速适应需求的变化、缺少开发商的支持、仅仅包含了开发过程,并没有完全覆盖软件过程
敏捷开发:
XP(极限编程):适用于费用控制严格的公司
水晶方法:强调用最少纪律约束而仍能成功
开发式源码方法:开发人员地域分布广
FDD:将程序员分为首席程序员和”类“程序员
ASD:三个非核心的、重叠的开发阶段:猜疑、合作和学习
Scrum方法
逆向工程:
1.实现级:包括程序语法树、符号表、过程设计表示
2.结构级;包括程序分量之间的依赖关系,如结构图、程序和数据结构
3.功能级;包括程序段之间的关系,如数据和控制流模型
4.领域级;包括反映程序分量或程序诸实体与应用领域概念间的对应关系,如实体关系模型
净室软件工程:
使用盒结构规约(或形式化方法)进行分析与设计建模,强调正确性验证而不是测试,作为发现和消除错误的主要机制
实体类:映射需求中的每个实体,实体类保存需要存储在永久存储体中的信息
控制类:对一个或几个用例所特有的控制行为进行建模
边界类:封装在用例内、外流动的信息或数据流
UML分类:
静态图:构件图、包图、类图、对象图、部署图、制品图、组合结构图
动态图:用例图、顺序图、通信图(协作图)、状态图、活动图、交互概览图
UML 4+1视图:
逻辑视图:关注类与对象,关注人员:系统分析人员、系统设计人员
实现视图:关注物理代码文件和组件,关注人员:系统开发人员
部署视图:关注软件到硬件的映射,关注人员;系统和网络工程师
进程视图:关注线程、进程、并发,关注人员;系统集成人员
用例视图:关注需求分析模型,关注人员:最终用户
UML静态图:
构件图 | 构件图描述一个封装的类和它的接口、端口,以及由内嵌的构件和连接件构成的内部结构。构件图用于表示系统的静态设计实现视图。对于由小的部件构建大的系统来说,构件图是很重要的。构件图是类图的变体 |
包图 | 包图描述由模型本身分解而成的组织单元,以及它们之间的依赖关系。 |
类图 | 类图描述一组类、接口、协作和它们之间的关系。给出了系统的静态设计视图。 |
对象图 | 对象图描述一组对象及它们之间的关系,描述了在类图中所建立的事物实例的静态快照。 |
部署图 | 部署图描述对运行时的处理节点及在其中生存的构件的配置。部署图给出了架构的静态部署视图,通常一个节点包含一个或多个部署图。 |
制品图 | 制品图描述计算机中一个系统的物理结构。制品包括文件、数据库和类似的物理比特集合。制品图通常与部署图一起使用。制品也给出了它们实现的类和构件。 |
组合结构图 | 组合结构图描述结构化类(例如,构件或类)的内部结构,包括结构化类与系统其余部分的交互点。组合结构图用于画出结构化类的内部内容。 |
UML动态图:
用例图 | 用例图描述一组用例、参与者及它们之间的关系,也是系统的静态用例视图。 |
顺序图 | 顺序图是一种交互图,它强调对象之间消息的发送顺序,同时显示对象之间的交互 |
通信图(协作图) | 通信图也是一种交互图,它强调收发消息的对象或参与者的结构组织。顺序图和通信图表达了类似的基本概念,但它们所强调的概念不同,顺序图强调的是时序,通信图强调的是对象之间的组织结构(关系)。 |
状态图 | 状态图描述一个状态机,它由状态、转移、事件和活动组 成。状态图给出了对象的动态视图。它对于接口、类或协作的行为建模尤为重要,而且它强调事件导致的对象行为,这非常有助于对反应式系统建模。 |
活动图 | 活动图将进程或其他计算结构展示为计算内部一步步的控 制流和数据流。活动图专注于系统的动态视图。它对系统的功能建模和业务流程建模特别重要,并强调对象间的控制流程。 |
交互概览图 | 交互概览图是活动图和顺序图的混合物。 |
定时图 | 定时图也是一种交互图,它强调消息跨越不同对象 或参与者的实际时间,而不仅仅只是关心消息的相对顺序。 |
软件系统建模:
1.结构化建模方法是以过程为中心的技术,可用于分析一个现有系统以及定义新系统的业务需求。结构化建模方法所绘制的模型称为数据流图,对于流程较为稳定的系统可以考虑结构化建模方法
2.面向对象建模方法是将数据和过程集成到被成为”对象“的结构中,消除了数据和过程的认为分离现象
软件系统设计:
1.结构化设计:结构化设计包括架构设计、接口设计、数据设计和过程设计等任务。它是一种面向数据流的设计方法,是以结构化分析阶段所产生的成果为基础,进一步自顶而下、逐步求精和模块化的过程
2.面向对象设计:映射问题空间,将问题空间中的实例抽象为对象,用对象的结构反映问题空间的复杂实例和复杂关系,用属性和操作表示实例的特性和行为
面向对象设计原则:
1.单一职责:设计目的单一的类
2.开闭原则;对扩展开放,对修改关闭
3.里氏替换:子类可以替代父类
4.依赖倒置:要依赖于抽象,而不是实现。要针对接口编程,不要针对实现编程
5.接口隔离:使用多个专门的接口好过使用单一的总接口
6.组合重用:要尽量使用组合而不是继承来达到重用的目的
7.迪米特(最少知识法则):一个对象应当对其他对象有尽可能少的了解(封装)
设计模式:
架构模式是指软件架构的风格,这是软件设计中的高层决策。例如,C/S结构就属于架构模式,架构模式反映了开发软件系统过程中所作的基本设计决策。
设计模式主要关注软件系统的设计,与具体的实现语言无关。
惯用法则是实现时通过某种特定的程序设计语言来描述构件与构件之间的关系。每种编程语言都有自己特定的模式,即语言的惯用法
创建型模式主要用于创建对象,为设计类实例化新对象提供指南
结构型模式主要用于处理类或对象的组合,对类如何设计以形成更大的结构提供指南
行为型模式主要用于描述类或对象的交互以及职责的分配,对类之间交互以及分配责任的方式提供指南
创建型:
名称 | 定义 | 速记词 |
抽象工厂 | 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 | 生产成系列的对象 |
工厂方法 | 定义一个用于创建对象的接口,让子类决定将哪一个类实例化 | 动态生产对象 |
构建器 | 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 | 复杂对象的构建 |
原型 | 用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象 | 克隆对象 |
单例 | 保证一个类只有一个实例,并提供一个访问它的全局访问点 | 单实例 |
结构型:(适桥组装外享代)
名称 | 定义 | 速记词 |
适配器 | 将一个类的接口转换成用户希望的另外一个接口,从而使得原本不相容的接口可以协同工作 | 接口转换 |
桥接 | 将类的抽象部分和实现部分相分离,使它们可以独立的变化 | 继承树拆分 |
组合 | 将对象组合成树形结构以表示”整体-部分“的层次结构,使得客户对单个对象和复合对象的使用具有一致性 | 树形目录菜单 |
装饰 | 动态的给一个对象添加一些额外的职责,它比扩展子类更灵活 | 动态附加职责 |
外观 | 定义一个高层接口,为子系统中的一组接口提供一个一致的外观,从而简化该子系统的使用 | 对外统一接口 |
享元 | 提供支持大量细粒度对象共享的有效方法 | 汉字编码 |
代理 | 为对象提供一个代理,以控制对这个对象的直接访问 | 快捷方式 |
行为型:
名称 | 定义 | 速记词 |
责任链 | 为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直达有一个对象能处理它 | 传递职责 |
命令 | 将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作 | 日志记录,可撤销 |
解释器 | 给定一种语言,定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子 | 虚拟机机制 |
迭代器 | 提供一种方法来访问聚合对象中的各个元素,而不需要暴露该对象的内部表示 | 数据集 |
中介者 | 用一个中介对象来封装一系列的对象交互,它使各对象不需要显示的相互调用,从而达到低耦合,还可以独立的改变对象间的交互 | 不直接引用 |
备忘录 | 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将该对象恢复到原先保存的状态 | 游戏存档 |
观察者 | 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 | 联动 |
状态模式 | 允许一个对象在其内部状态改变时改变它的行为 | 状态变成类 |
策略模式 | 定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化 | 多方案切换 |
模板方法 | 定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤 | 框架 |
访问者 | 表示一个作用于某对象结构中各元素的操作,使得在不改变各元素的类的前提下定义作用于这些元素的新操作 | 数据与操作分离 |
遗留系统演化:
1.低水平低价值:淘汰
2.低水平高价值:继承
3.高水平低价值:集成
4.高水平高价值:改造
系统运维:
1.正确性维护:指改正在开发阶段已存在而系统测试阶段尚未发现的错误
2.适应性维护:指使应用软件适应信息技术变化和管理需求变化而进行的修改
3.完善性维护:指扩充功能和改善性能而进行的修改
4.预防性维护:为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新功能,以使系统可以适应各类变化而不被淘汰