【系统分析师之路】系统分析师必知必会(系统设计基础篇)
系统设计基础篇
一. 架构模式
1. 架构模式,设计模式与惯用法
- 架构模式的选择是开发一个软件系统时的基本设计决策;
- 惯用法是最底层的模式,关注软件系统的设计和实现,描述了如何实现构件及构件之间的关系。
- 引用计数是C++管理动态资源时常用的一种惯用法。
2. 持久化技术框架
- JAVA 体系下,目前主流的持久化技术框架包括CMP、Hibernate、iBatis和JDO等。
- ORM:对象关系映射(Object Relational Mapping,简称ORM),目的是想像操作对象一样操作数据库。
- 因为数据库不是面向对象的,所以需要编程进行映射。
- 常见的ORM框架有hibernate,半自动ORM框架有mybatis,还有新的简单易用的bee框架。
- jpa只是想让所有的ORM框架都统一使用的标准接口; hibernate有实现jpa,但mybaits没有。
- 用hibernate和mybatis,每次操作一个表,都需要编写一次文件,感觉做些重复工,好枯燥无味。
3. Bee框架
- 一个十分钟即可学会的ORM框架。它不用每写一个就要编写一次代码,省时省力,开发效率极高,编码复杂度为O(1)
- 一个开发成本和开发速度都不比php差的java ORM框架。
4. J2EE模式
- Java2EE是Sun公司提出的关于分布式环境中多层应用系统的架构,是多种Java技术的混合体。
- 典型的Java EE应用程序具有三层结构:表现层、业务逻辑层和基础设施层。
- 为了使得开发人员更多地关注业务逻辑,Java2EE采用多种技术(容器等)屏蔽底层应用系统的差异。
- 在进行应用系统开发时,要严格区分业务逻辑层和表现层,尤其应该注意不要在表现层中混杂业务代码
JavaBean
- JavaBean是一种可重用的Java组件,它可以被Applet、Servlet、JSP等Java应用程序调用.也可以可视化地被Java开发工具使用。
- 它包含属性(Properties)、方法(Methods)、事件(Events)等特性。
- 通过合理的组织具有不同功能的JavaBean,可以快速的生成一个全新的应用程序
- 如果将这个应用程序比作一辆汽车,那么这些JavaBean就好比组成这辆汽车的不同零件。提高了J2EE的可维护性
二. 设计模式
1. 设计模式概念
- 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
- GoF的“设计模式”是第一次将设计模式提升到理论高度,并将之规范化,提出了许多指导性的设计原则。
2. 桥接模式
- 结构型模式。将抽象部分与现实部分分离,使得它们两部分可以独立地变化。
3. 观察者模式
- 观察者模式又称为发布-订阅模式、模型-视图模式、源-监听器模式或从属者(dependents)模式,是一种对象的行为型模式。
- 它定义了对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。
- 观察者模式的优点在于实现了表示层和数据层的分离,并定义了稳定的更新消息传递机制,类别清晰,抽象了更新接口,使得相同的数据层可以有各种不同的表示层。
4. 享元模式
- Flyweight模式通过运用共享技术,有效地支持大量细粒度的对象。
- 系统只使用少量的对象,而这些对象都很相似,状态变化很小,对象使用次数增多。
5. 访问者模式
- 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。
6. 适配器模式
- 想使用一个已经存在的类,而它的接口不符合用户需求
7. 命令模式
- 命令(Command)模式是一种对象的行为型模式,类似于传统程序设计方法中的回调机制,它将一个请求封装为一个对象,从而使得可用不同的请求对客户进行参数化
8. 装饰模式
- 装饰(Decorator)模式是一种对象结构型模式,可以动态地给一个对象增加一些额外的职责。
- 就增加对象功能来说,装饰模式比生成子类实现更为灵活。
9. 代理模式
- 代理(Proxy)模式可为某个对象提供一个代理,并由代理对象控制对原对象的引用。
- 代理模式能够协调调用者和被调用者,能够在一定程度上降低系统的耦合度。它是用于限制对象访问的设计模式。
10. 工厂模式
- 工厂方法(Factory Method)模式的意图是定义一个用于创建对象的接口,让子类决定实例化哪一个类。
- Factory Method使一个类的实例化延迟到其子类。
11. 类行为模式
- 创建型模式中的工厂方法;
- 结构型模式中的适配器模式;
- 行为型模式中的解释器模式与模板方法模式;
三. 面向功能的软件度量
- 面向功能的软件度量使用软件所提供的功能的测量作为规范化值。
- 因为功能不能直接测量,所以必须通过其他直接的测量来导出。
- 面向功能的度量是由Albrecht首先提出的,它的建议一种称为功能点的测量。
- 功能点是基于软件信息领域的可计算的(直接的)测量及软件复杂性评估而导出的。
- 信息域值按下面的方式定义。
1. 用户输入数
- 计算每个用户输入。它们向软件提供面向应用的数据
- 输入应该与查询分开来,分别计算。
2. 用户输出数
- 计算每个用户的输出。
- 他们向用户面向应用的信息,这里输出是指报表,屏幕和出错信息等,一个报表中的单个数据项不单独计算。
3. 用户查询数
- 一次查询被定义为一次联机输入。
- 它导致软件以连接输出的方式产生实际的响应,每一个不同的查询都要计算。
4. 文件数
- 计算每个逻辑主文件(如数据的一个逻辑组合,它可能是某个大型数据库的一部分或是一个独立的文件)。
5. 外部接口数
- 计算所有机器可读的接口(磁带或磁盘上数据文件),利用这些接口可以将信息从一个系统转送到另一个系统。
四. UML4+1视图
- UML使用系统视图描述系统的组织结构。
1)实现视图
- 对系统的物理代码的文件和构件进行建模。
2)部署视图
- 把构件部署到一组物理节点上,表示软件到硬件的映射和分布结构
3)进程视图
- 描述了并发与同步的结构。
- 是可执行线程和进行作为活动类的建模。
4)逻辑视图
- 设计模型中在框架方面具有重要意义的部分。
- 即类,子系统,包,和用例实现的子集。
5)用例视图
- 最基本的需求分析模型
五. 质量属性
- 软件的质量属性是衡量软件非功能性需求的重要因素。
- 可用性质量属性主要关注软件系统的故障和它所带来的后果。
- 可以采用Ping/Echo,心跳和异常等措施进行错误检测。所以能够提高系统的可用性。
- 软件可靠性是指在特定环境和特定时间内,计算机程序无故障运行的概率
- 与其他属性不同,软件可靠性能够通过历史数据和开发数据直接测量和估算出来。
- 在软件可靠性的讨论中,故障指软件行为与需求的不符,故障有等级之分。
六. SOA面向服务的架构
服务组件体系结构(Service Component Architecture,SCA
- 服务组件体系结构(Service Component Architecture,SCA)是基于面向服务体系结构(Service Oriented Architecture,SOA)的思想描述服务之间组合和协作的规范。
- SCA定义了语言中立的服务组合方式,能够进行跨语言的服务调用
- SCA解决的主要问题是加强组件的接口与传输协议的解耦
- SCA主要是为了满足软件集成的需要而创建的架构。
- 面向对象、基于构件、面向服务是三个递进的抽象层次。
面向服务的开发方法
- 面向服务的开发方法有三个主要的抽象级别:操作、服务和业务流程。
- 位于最底层的操作代表单个逻辑单元的事物,执行操作通常会导致读、写或修改一个或多个持久性数据。
- 服务的操作类似于对象的方法,它们都有特定的结构化接口,并且返回结构化的响应。
- 位于第二层的服务代表操作的逻辑分组;
- 最高层的业务流程则是为了实现特定业务目标而执行的一组长期运行的动作或活动,包括依据一组业务规则按照有序序列执行的一系列操作
位于第二层的服务代表操作的逻辑分组; - 最高层的业务流程则是为了实现特定业务目标而执行的一组长期运行的动作或活动,包括依据一组业务规则按照有序序列执行的一系列操作
七. 软件架构评估
- 软件架构评估可以只针对一个架构,也可以针对一组架构。
- 在架构评估中,评估人员主要关注系统的质量属性,并确定采用何种架构更为合适
- 敏感点是一个或多个构件的特性,权衡点是影响多个质量属性的特性,是多个质量属性的敏感点。
- 敏感点:输入或变化点很小,但对结果的影响很大的地方
- 权衡点:影响多个质量属性的特征。是多个质量属性的敏感点
- 风险点:架构设计中潜在的存在问题的一种风险隐患
- 非风险点:就是没有风险的位置
八. 面向对象
- 面向对象设计的基本思想包括抽象、封装和可扩展性,其可扩展性是通过对象继承和多态来实现。
- 对象持久化是将内存中的数据以数据库或物理文件的形式保存到可永久存储的设备中
- 面向对象的原则
- 开闭原则是指一个类应该对扩展开放,对修改关闭,从而实现系统行为的扩展。
- 里氏替换原则是指子类型必须能够替换掉它的父类型,可以避免在多态应用中出现隐蔽的错误。
- 依赖倒置原则是指高层模块不应该依赖于底层模块的实现,应针对底层模块的接口而非实现编程。
- 接口隔离原则是指针对不同的客户需求分离接口,避免接口的误用。
- 最小知识原则是指在设计系统时减少对象之间的交互,降低对象之间的耦合度和依赖关系,提高系统的可维护性
在面向对象设计中,开闭原则一般通过在原有模块中添加抽象层(例如接口或抽象类)来实现,它是其他OOD原则的基础,而其他原则是实现开闭原则的具体措施。
九. 虚拟化
- 虚拟化是指对一组类似资源提供一个通用的抽象接口集,从而隐藏属性和操作之间的差异,并允许通过一种通用的方式来看并维护资源。
- 虚拟化为数据、计算能力、存储资源以及其他资源提供了一个逻辑视图,而不是物理视图
十. 企业业务流程
- 企业业务流程包含3个要素,分别是实体、对象和活动。
- 企业业务流程建模是业务流程分析的重要步骤,常见的方法有标杆瞄准、IDEF、Petri网、DEMO和业务流程建模语言等
- 标杆瞄准是一个连续、系统化地对外部领先企业进行评价的过程,通过分析和评价,确定出代表最佳实践的经营过程和工作过程,以便合理地确定本企业的业务流程;
1. IDEF
- IDEF是一系列建模、分析和仿真方法的统称, 能够同时表达系统的活动与数据流,擅长表达业务流程的阶梯结构特征
- IDEF(IntegrationDEFinitionmethod,集成定义方法)是一系列建模、分析和仿真方法的统称,每套方法都是通过建模来获得某种特定类型的信息。
- IDEF0可以用来对业务流程进行建模
- IDEF1可以用来信息建模
- IDEF2可以用来进行仿真建模
- IDEF4可以用来对面向对象设计进行建模
- IDEF8可以用来用户界面的建模
2. DEMO方法
- 定义了信息系统中行为角色之间的通信方式,其基础理论是对话行为理论,适合表达多角色之间事务的因果和条件关系
3. Petri网
- 是一种图形化语言,擅长描述具有并行、异步、分布式和随机性等特征的信息系统
十一. 流程设计
- 流程设计的任务是设计出系统所有模块和它们之间的相互关系,并具体设计出每个模块内部的功能和处理过程。
1. 程序流程图
- 程序流程图(Program Flow Diagram, PFD)用一些图框表示各种操作,它独立于任何一种程序设计语言,比较直观、清晰,易于学习掌握。
- 任何复杂的程序流程图都应该由顺序、选择和循环结构组合或嵌套而成
2. IPO图
- IPO图是由IBM公司发起并逐步完善的一种流程描述工具。
- IPO图用来描述构成软件系统的每个模块的输入、输出和数据加工。
3. N-S图
- N-S图容易表示嵌套和层次关系,并具有强烈的结构化特征。
- 但是当问题很复杂时,N-S图可能很大。
4. 问题分析图(PAD)
- 问题分析图(PAD)由日立公司于1979年提出,也是一种支持结构化程序设计的图形工具。
- PAD具有清晰的逻辑结构、标准化的图形等优点,更重要的是,它引导设计人员使用结构化程序设计方法,从而提高程序的质量
十二. 模块设计
- 一个模块应具备以下四个要素:
- 输入和输出
模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那儿取得输入,进行加工后再把输出返回调用者。 - 处理功能
指模块把输入转换成输出所做的工作。 - 内部数据
指仅供该模块本身引用的数据。 - 程序代码
指用来实现模块功能的程序。
十三. 软件设计度量
- 软件设计度量考虑了高层次、构件层次和界面设计问题。
- 高层次设计度量考虑了设计模型的体系结构和结构方面,构件层次设计度量通过建立内聚、耦合和复杂度的间接度量提供了模块质量的指示。
- 界面设计度量给GUI的布局恰当性提供了指示。
- 构件级设计度量集中于软件构件的内部特性且包括“三个C”的测度:模块内聚、耦合和复杂度。这些测度可以帮助软件工程师判定一个构件级设计的质量。