Visual Studio Team System 建模策略与 FAQ
适用于:
Microsoft Visual Studio Team System
摘要:客户和合作伙伴迫切希望了解 Microsoft 对于模型驱动开发的策略,及其对 Visual Studio Team System 的支持。当向他们解释我们的策略时,他们经常表现出对某些相同主题的兴趣,并引出一些相同的关注点。本文,我们讲述模型驱动开发的策略,以及开发人员通常会涉及到的一系列问题与解答。首先的五个问题涉及到我们策略的主要结构,我们将对其进行详细的回答与解释。其他的常见问题均集中于最后一部分的常规 FAQ 部分中。
本页内容
为什么建模?
如何在模型驱动的开发中使用 DSL?
UML 如何?
MDA 如何?
软件工厂是什么?
其他常见问题
为什么建模?
客户曾经告诉我们,他们在 80 年代和 90 年代初所购买的多数 CASE 工具不能为开发过程增加足够的价值。由购买的工具带来的利益并未实现,甚至好的产品也会被过度夸耀的技术承诺所掩盖。
如果工具支持的模型不能反应代码以及其他的实现产品,那么这些工具很快就会被摒弃。如果工具支持的模型用于生成代码,那么当开发人员根据生成的代码增添其他代码时,工具通常不能与之同步。尽管这些工具为生成的代码提供了很好的"往返行程",但最终开发人员还是身陷于解决此类问题的错综复杂的情况中。因为 CASE 工具试图以超高级别的抽象(与底层实现平台相对)进行 *** 作,所以这些问题经常变得更糟。这会导致生成大量代码,由于混合了手写代码和生成的代码,因此要解决这些问题更加困难。
尽管存在这些问题,但是与某些软件开发过程有关的一个观点是 - 应用建模可以让开发更轻松。我们的目标是改变开发人员看待建模价值的方式。要将他们的观点(建模是一个在真正开始开发之前不太重要的有用活动)改变为承认建模是一个重要的、主要的开发任务,并且不是主要集中于文档的活动。当将模型视为首要的开发产品时,由于可以使用更强大的应用程序抽象,因此开发人员会编写更少的常规代码。模型驱动的开发也因此顺理成章地更加高效和灵活。此外,其他涉及到的开发人员(从业务分析师、架构师、设计师到网络的用户以及系统管理专业人员)会发现建模对其所负责的任务会产生增值。当模型以这种方式横跨开发和运行时活动时,人员之间的交流可以得到优化,且可跟踪性使得能够跨越生命周期的任何阶段。我们坚信,以这种方式确立建模的主要位置,最终可以改变软件开发的经济性,并且保证软件系统能够满足业务的需要。该模型驱动开发的方法由 Microsoft 首创,是名为软件工厂 的产品的一部分。
注 软件工厂的深入说明,请参阅“Software Factories: Assembling Applications with Patterns, Models, Frameworks and Tools”,作者为 Jack Greenfield 和 Keith Short,以及 Steve Cook 和 Stuart Kent。
返回页首
如何在模型驱动的开发中使用 DSL?
Microsoft 已经从过去的行业经验中有所收获,并且避免了 CASE 的缺陷,这是通过采纳基于下列想法的模型驱动开发实现的:
模型应该是项目中首要的产品 - 不仅仅是一些快过时的文档。模型有精确的语法,通常利用图形化工具易于进行编辑和浏览,并且包含确定模型中特定于域的概念如何映射到其他实现产品的语义,这些实现产品包括代码、项目结构和配置文件等。按照这种方法,模型非常类似于源代码文件,而且它与其他实现产品同步的机制非常类似于编译器。
模型表示一组抽象,它以定义完善的开发内容为开发人员提供支持。例如,考虑这样一个任务:生成一个通过 Web 服务与组件进行连接的、面向服务的应用程序。要构建这样一个应用程序,假设给定开发人员必须关注的所有其他任务,在这种情况下,根据服务合同和开发人员之间交流的信息,该开发人员可以只关注定义整个应用程序连接性。为软件架构师的应用程序设计器提供的 Visual Studio Team Edition 完全支持开发的个各个方面,并管理应用程序连接性模型和所有其他产品(WSDL 文件、项目文件、代码文件、配置文件等)之间的关系。必须开发这些产品以实现由模型定义的互联。按照这种方式设计作为源产品的模型,具有额外的好处 - 提供对其他分散细节的整体视角,并且能够让不同团队(包括设计、构建和部署复杂、现代化应用程序)之间的沟通更加顺畅。
由于模型能够提炼并聚合大量产品中的信息,因此它们能够更轻松地支持一致性检查和其他形式的分析。例如,一个应用程序连接模型可以支持协定协议验证、安全性分析或性能分析。
通过一个与编辑类似的过程可以实现模型,在该过程中,由编译器生成的代码、配置文件和其他实现产品均不能进行手工编辑。然而,较普遍的情况是,模型可以由生成产品和手工编辑产品的组合实现。在这种情况下,非常重要的一点是,仔细管理使生成和手工编辑产品相互适应的方法。如上所述,不能有效做到这一点是 CASE 产品的一个主要不足之处。我们已经使用了一些技术来确保生成的产品和手工编辑产品保持独立,并且当生成工具需要套用代码时,决不会与由开发人员添加的代码发生冲突。这些技术包括,使用类委托和继承,特别是使用"部分类" - 它是 Visual Studio 中 NET 语言的一个新特性,利用成形的任务已经进行了特别定义。
我们将以这些方式定义的建模语言称为 Domain Specific Languages 或 DSL。可以将 DSL 想象为一种用来解决一些清晰确认问题的小规模、高集中化的语言。这里所说的问题是分析师、架构师、开发人员、测试人员或系统管理员必须要处理的问题。开发人员已经熟知的 DSL 示例是:用于数据 *** 作的 SQL 和用于 XML 文档结构定义的 XSD,等等。另一个来自 Visual Studio Team Edition for Software Architects 的示例是,用于对数据中心硬件和宿主软件配置的逻辑结构进行建模的 DSL。该 DSL 及其相关的图形设计器可以用于设计时(配置应用程序以与其部署目标相匹配)的验证,在问题可以更容易地解决时向开发人员发出警告。
找到备选 DSL 的好办法是明确开发人员使用的模式,然后将其封装到建模语言中,或将软件框架中的概念作为建模语言中的抽象表层化,然后能够生成可扩展整个框架的少量代码。这些技术允许我们控制生成代码的数量和复杂度,从而为开发人员提供真正意义的价值,而无需争论对 CASE 产品的刻画。
最近,Microsoft 发布了 DSL 工具 - 使客户和合作伙伴能够通过 Visual Studio 中的相同的技术构建 DSL,这些技术用于构建与 Visual Studio Team Edition for Software Architects 一起发行的建模工具。可以将该技术认为是"构建工具的工具",简化了定义 DSL 的任务,并降低了为工具构建图形化编辑器和编译器的代价和技能
返回页首
UML 如何?
多数理解我们就模型驱动开发这一观点的人员,把我们假想为将重点放在 DSL 上,这一假设将我们置于一个与 UML 对立的位置。我们希望对这一不正确的想法予以澄清。在 UML 之前,各种各样的建模方法缺乏生产效益,这些方法最终形成 UML 10,这是在软件开发中使用模型方面向前迈进的重要一步。
但是不管是出于什么原因,UML 和基于 UML 工具的存在没有显著改变开发人员构建应用程序的方式。或者说,没有为开发人员生产效率提供明显的帮助。自从 Microsoft 提供了一个最可用的 UML 工具(基于 Visio 的工具)- 最先与 Visual Studio Enterprise Architect 一起提供,我们对该工具的使用进行了开发人员的(不仅限于我们的客户)匿名调查。我们发现,只有很少数人声明其任务支持 UML 工具,大部分使用者仅使用类图表。当我们训练这部分声明使用类图表的人员时,实际使用它们生成代码的数量很少。
除了在 Visual Studio Team Edition for Software Architects 中的模型驱动的开发工具之外,这是驱动因素之一。我们真正想要进行的是开发人员和架构师很难发现的任务,并找出建模工具可能为其增值并提供帮助的办法。我们强烈支持 UML 符号和图表。在 Microsoft 中任意的开发人员办公地点走走,就会发现白板上密布着 UML 类图表以及序列图表。我们不仅在规范文档中、在很多其他为演示准备的图表中使用 UML 符号,甚至还会将 UML 符号记录在自助餐厅的餐巾纸上。要支持客户的这些需要以生成文档和概念化草图,我们将继续在 Visual Studio 中提供 UML 工具集。事实上,通常在 Microsoft 内,我们使用 UML 的目的很多(例如用于文档或概念共享),但几乎从未 有任何一个是出于以下目的,这些文档是软件开发的实际产物。
办公室和走廊里相同的白板也布满了随意写下的代码。但在这里再次声明这都是草稿。这些代码很少能正确指示程序源代码编译。这对开发人员而言是重大的区别。任意一种有助于实际软件开发的产品必须能够进行数字化 *** 作。源代码有定义完善的语法,易于理解的语义(通常由编译器的转换以较低级的代码或中间语言定义),并且能够由编译器、调试器和重构程序进行一致性 *** 作。要有益于开发人员,模型必须 有与源代码相同的状态。模型还必须有精确的语法、易于理解的语义,以及定义完善的到源代码或其他定义完善模型的映射。它必须不仅 限于文档。
例如,采用 Visual Studio Team Edition for Software Architects' Application Designer。它不仅仅是文档,虽然它以该目的进行使用。它更希望使开发人员(或架构师)能够将注意力集中于系统的某一部分;而不是面向服务的体系结构中服务间的连接。她可以在构建项目、WSDL 文件、代码和架构之前设计系统的该部分,或要求工具文档化服务间的连接(如果这些产品已经存在)。由于连接信息分散于众多开发产品之中,因此整体视图(如图表)提供了基本的使用,尽管所有传递的信息可能因对实施产品的仔细检查而减少。应用程序设计器有定义完善的语法(它的 DSL 元模型)和可预知的、始终同步的到各种实施产品的映射。基础设计器框架承担应用程序设计器图表编译器的作用,非常类似于与源代码文件相关的传统编译器的作用。
但是,为什么我们不能只将这种新的服务连接"语言"构建为对 UML 的扩展呢?特别是对 UML 20 的改进呢?
当然,当我们看出采取 UML 20 规范的趋势时,我们意识到,它依旧不能成为文档之外其他事物的基础是有原因的。由于更加复杂的子语言,UML 20 规范已经增加了标准的复杂性,但是它依旧不能以一种自然的方式解决现代应用程序开发的关键问题,例如,数据库设计、测试、部署、面向服务、基于组件的开发以及用户界面结构。由于没有自然的 UML 子语言满足服务连接的需求,因此我们必须利用现有 UML 子语言中的构造型和标记来重新描述我们的应用程序设计 DSL。这会导致在已由业界众多膨胀、复杂的规范描述的设计中极其复杂的模型。利用标准的 UML 符号(其中,对应于任何已经扩展的子语言中现有的形状都可以重用),对于图表的可读性和清晰度而言是一种折中方案。最后,我们会纠缠于规范中关键内容缺乏精确度以及 UML 中固有的类型系统不匹配(较之于 Net 和 XML 语言)之中。
由于这些原因,我们选择利用一个为特定目的构建的元模型来定义应用程序设计 DSL,该模型本身作为相关元模型家族中的一员进行定义。这为服务连接提供了自然且精确的基础,以及到基础实施产品(当然包括一些代码)的高保真映射。对于其他关注的开发任务,我们已经得到了相同的结论,并因此产生了与其他白皮书中所述相似的类设计器和逻辑数据中心设计器的 DSL。对可扩展 DSL 的支持,构建为一系列具有定义完善的 DSL 与其他开发产品间的映射,最终成为 Microsoft 模型驱动开发策略的基础。
综上所述,我们推荐在以下情况下使用 UML 和基于 UML 的工具:
草图。
白板。
餐巾纸。
文档。
不直接与代码相关的概念性绘图。
我们推荐在以下情况中使用恰当定义的 DSL 和基于 DSL 的工具:
从中生成代码的精确抽象。
映射到框架和组件中变化点的精确抽象。
DSL 之间的精确映射。
具有到其他 DSL 或代码产品的精确指明映射的概念性绘图。
我们不推荐将上述几点用于详细编程逻辑的可视化编程(或至少在近几年之内)。
返回页首
MDA 如何?
MDA 是 OMG 的一个授权品牌,它基于利用模型驱动开发的 UML。它重点强调与平台无关的模型以及衍生出的技术。根据 OMG FAQ,
"MDA 是编写规范和开发应用程序的一种新方式,它基于平台无关的模型 (PIM)。完整的 MDA 规范包括,一个基于 UML 模型的确定无关平台、一个或更多特定于平台的模型 (PSM) 以及接口定义集,它们分别描述基本模型如何在不同的中间件平台上实现。完整的 MDA 应用程序包括,一个确定的 PIM、一个或更多的 PSM 以及完整的实施,应用程序开发人员决定支持的每个平台均对应一个 PSM。"
MDA 由 OMG 定义,仅解决实际问题的一个小子集,这些问题必须用于驱动有效的模型驱动的开发。一个有效的模型驱动开发方法必须能够解决编程问题,例如:
可以开发哪些类型的系统?由于不同系统之间存在着明显的差异,因此模型驱动开发方法必须能够辨别这些差异。要有效实现,首先描述要解决的问题,然后标识可以解决问题的特定技术,显示适合解决方案的每一种技术,各种技术如何协调工作以完成解决方案。
给定类型系统的体系结构是什么?这个问题的答案不仅仅是考虑可以使用的技术,而且还涉及识别这些技术的特性(对设计系统的每个部分都很重要),以及配置每种技术的用法。这是软件体系结构的主题,已被公认为软件生命周期中最重要的定律之一。软件体系结构定义了为系统提供其结构以及定义其质量属性的高级设计决策。由于模型最初用于描述系统重要部件的体系结构,因此模型应该更紧密地与软件体系结构开发相集成。
需要为给定类型的系统继续哪方面的建模?由于不同系统的体系结构有非常大的差异 ,因此没有单独的模型集能够有效描述所有可能的系统。因此,这个问题的答案将因系统类型而异。我们的观点是:每个目标平台上单个的 PIM 和单个的 PSM,所有的开发均利用一个由 MDA 指定的常规目的建模语言,足以支持由模型驱动开发承诺的非常高级别的自动化。软件生命周期中丰富的自动化需要大量其他类型的模型,例如以下这些模型:
捕获、分析和管理需求;标识需求之间的跟踪关系,体系结构设计和实现结构,能够进行需求已实施的验证,以及在需求变更时支持对产生影响的分析。
以下列方式定义软件体系结构:支持安全性、性能和可靠性分析以及其他格式的评估;能够从组件启用预知的系统程序集,以及有效、可逆地逐步从需求和部署进行转换。
定义可执行的系统组件如何打包,标识部署环境中每个组件都需要的资源类型,以及将组件绑定到这些资源类型的特定实例。
定义测试用例、测试数据集、测试工具和其他产品,更易于评估利用模型开发的软件的质量,以管理和显示测试结果。
标识模型和其他产品间的跟踪关系,更易于在系统宕机时支持对业务影响的分析,将系统配置为满足需求,并加强系统配置期间的约束。
定义用于构建可执行文件的源产品的配置,更易于版本化这些配置,以与缺陷报告和具有特定版本的特性变更需求相关联。
模型驱动的技术如何与代码为主的开发技术集成?模型用于辅助开发人员实现任务,例如查询和导航代码基、调试、分析、覆盖分析、模式化应用程序和重构,并且可以紧密集成到面向文件的开发环境。
此外,除了上述说明的原因,强调利用发布的 UML 元模型是我们的问题所在。最后,尽管强调平台无关是某些客户所关注的,但是我们了解到更多的是他们有关对生产率、可预见性、安全性、管理以及部署和管理应用程序的有效方式的需求。然而,我们绝对赞同有关构建应用程序而使用的模型是 MDA 的中心,且重要的是模型间定义完善的映射,我们识别以下值,模型可为其提供构建跨具有互 *** 作组件的平台的应用程序。
某些进行模型驱动开发的组织接受对术语 MDA 更广泛的解释,而不是由 OMG 描述的解释;的确,如我们所述,他们必须这样做才能获得成功。使用任意的 OMG 规范以实现模型驱动的开发,是 MDA 典型的应用,无论是否包含 PIM 和 PSM。例如,某些组织发现 OMG 的 MOF 规范是 MDA 的关键。该观点取决于用 MOF 定义的新的建模语言,而不是在 UML 中预定义的建模语言,且该观点与我们的方法极其相似。我们将支持与其他平台上普遍采用的 UML 和 MOF 工具进行交互,通过 XMI 或是通过本机格式,帮助客户成功利用它们进行模型驱动的开发。
返回页首
软件工厂是什么?
正如前面提到的,我们对于模型驱动开发的方法是 Microsoft 称之为软件工厂 的一部分。取代了一般的、一种规模满足所有需要的方法,软件工厂使用自定义的 DSL 集合,从而提供自定义的抽象集以满足系统(例如,电子商务、金融交易或国内银行应用程序)特定领域的需要。有了软件工厂,模型不仅可以用于分析和设计,而且还支持跨越整个软件生命周期(甚至是运行时)的各种类型的计算。这是软件工厂的基本原则,并且还是 Microsoft 的 Dynamic Systems Initiative (DSI) 的基本原则。DSI 实现并完成软件工厂计划。
您可以将软件工厂认为是包含并扩展 MDA,这里对 MDA 的定义比基于 PIM 和 PSM 的正式定义范围更广泛。软件工厂超越了一般的平台独立性,并且特定的模型可解决前面部分中说明的其他问题。
利用图形化观点,软件工厂为特定的系统定义专门的方法。每个观点都为系统范围内的成员定义生命周期的某部分,例如需求获取、数据库设计或服务协定定义。工厂与每个观点的可再次使用部分相关联,并在对系统家族范围内团队开发成员观点的上下文中传递它们,这样就不需要搜索应用程序部分,能够启动验证并支持手工和自动指导设置。
观点图被称为软件工厂架构,与在一层抽象(系统的一部分)上完成的工作相关,或在生命周期的一个阶段内,在其他层(或其他部分和阶段)上完成的工作相关。观点图可用于从其他产品(特别是从模型)完全或部分生成产品(包括模型、源代码、配置文件等);在开发阶段保持产品同步;验证手工开发的产品;评估需求失败或变更后的影响;组织并应用模式及其他最佳实践;捕获系统开发期间的元数据以支持系统 *** 作和维护;提供其他形式的指导和管理。
软件工厂自动化可再次使用部分的打包和交付,可再次使用部分包括,模型和模型驱动的工具、其他类型工具(例如,向导、模板和实用程序)、开发过程、实施组件(例如,类库、框架和服务)以及内容部分(例如,模式、样式表、帮助文件、配置文件和文档)。由于软件工厂架构是一个模型,因此可以通过工具来 *** 作软件工厂。创建规模较大的软件工厂,可通过合并较小的工厂以及通过自定义一般的工厂实现工厂的特殊化。
构建软件工厂与构建架构很类似。包括要使工厂更易于开发人员应用的获取和实现模式以及其他最佳实践。与通过手工从头开始构建系统相比,使用工厂更有效,这是因为使用工厂不扫描希望找到可重用组件的目录和存储库,在系统体系结构和开发过程的上下文中立即可用的开发下,使用工厂的开发人员具有可重用的组件适用于系统的各个部分。
当然,软件工厂计划不仅仅局限于 Microsoft 和我们提供的产品。相反,我们将软件工厂作为客户和合作伙伴这一广泛群体的基础,在我们提供的基础之上构建自定义的工厂,并且将工厂组件提供给这一群体中的其他成员。
客户和合作伙伴对软件工厂计划的响应是很积极的。我们建议,将软件工厂作为现代化组织的最佳发展方向,希望改善其与业务期望一致的开发方法,并且我们提供了 Visual Studio Team Edition for Software Architects、DSL 工具和 VSTS 中其他的新功能,作为软件工厂计划的首选产品。
该主题是BSc信息学专业和计算与软件系统专业的顶点项目。学生将在一个小组成员的监督下,在一个小团队中处理现实生活中的问题。每个团队将分析用户的信息需求并开发可行的计算解决方案。要求学生在学位课程中运用合理的原理来研究和解决他们的问题。
指示性内容
学生将团队合作分析,设计,实施和测试非平凡的IT系统。该项目的关键部分是让学生开发和管理一个项目,以交付高质量的IT产品。讲习班将探讨理论在项目中的应用,并包括选自以下主题的主题:道德,项目管理,设计框架,测试,技术评论和产品评估。
学习本课程后会得到的知识:
承接问题识别,制定和解决方案
不仅与其他IT专业人员而且与整个社区进行有效的沟通
分析,设计,实施和测试系统
将IT原理应用于非平凡系统的开发
适用性技能:
能够进行问题识别,制定和解决方案
利用系统方法进行设计和运营的能力
具有作为一个人以及跨学科和多元文化的团队有效运作的能力,具有成为领导者或经理以及有效的团队成员的能力。
先决条件
INFO20003数据库系统
SWEN30006软件建模与设计
INFO30005网络信息技术
TmaxSoft的SOA愿景 近来,SOA(Service-Oriented Architecture)成为在IT行业乃至企业界倍受重视的一个话题。SOA为什么会受到如此的关注?其原因是: 作为一个创新的IT架构,SOA通过标准化的接口方式和d性业务服务的开发与革新,力求实现“可重复使用性”、“整合性”、“敏捷性”和“维护便利性”,从而有利于结合现有的IT环境,保证生成服务的敏捷性。
正是基于以上SOA的理念,TmaxSoft提出了自己的SOA思想,一方面通过采用迅速妥善应对经营环境变化的d性经营模式,另一方面利用架构提供系统的简单化、虚拟化及抽象化,为引导持续的流程再造的适应性提供软件基础,从而实现业务部门和IT部门的紧密协作。此外,通过在企业内部和外部进行持续的业务流程改善,把经营活动所生成的信息实时向负责人传达,使得业务延迟最小化,决策速度最大化,同时确保企业敏捷性,提高顾客的满意度,实现流程的高效性和服务的可重组,最终帮助企业成就RTE(Real-Time Enterprise)。
TmaxSoft的SOA解决方案――SOAware
SOAware 是TmaxSoft公司基于SOA思想的解决方案。在广泛的产业领域应用后,SOAware的效率已经得到了验证,它高效地实现了SOA所追求的“敏捷性”、“可重复使用性”及“整合性”,帮助企业完成“实时企业”的战略转变。
从基础管理服务层到客户服务层,SOAware提供完整的产品组合解决方案:
● 下一代数据库解决方案-Tibero;
● 遵守国际标准的大容量传输处理中间件-JEUS/Tmax;
● 确保服务可重复使用性的应用框架解决方案-ProFrame;
● 基于规则的业务流程管理解决方案-BizMaster;
● 业务规则引擎解决方案-ProRule;
● 提供用户便利性的整合开发工具-ProWeb;
● 系统间有机整合、多渠道整合解决方案-AnyLink;
● 应用性能管理和安全解决方案-SysMaster/SysKeeper。
TmaxSoft的SOA战略
TmaxSoft的SOA战略是企业业务部门与IT部门之间紧密合作的基础,提供支撑3S(Single-Entry Point、Simplification、Strength)的Hands-on Tools的灵活框架。TmaxSoft把SOA定义为“把服务之间的关系由基于标准的基础框架转变成服务/规则组件的结合,成为以流程为中心的服务化导向架构”,TmaxSoft的SOA战略旨在切实实现基于SOA的应用程序整合的框架,提供单一运营环境(Single-Entry Point),支持简单、直观的开发环境(Simplification),提供强有力的管理环境(Strength Management、Successful Competitiveness)基础,从而实现适合企业环境的因地制宜的SOA服务。
此外,TmaxSoft通过框架的概念集合成SOAware,并且提供部分基于服务的应用程序,为了解决IT领域共同的问题,又精心设计了通用的、可重复使用的模型框架(基于规则的服务及组件模型),这种框架可以实现易整合性、扩展性、灵活性、维护便利性以及高效的开发优势。
TmaxSoft SOAware基于SOA的框架,把业务流程中可重复使用的服务组件和业务逻辑规则组合成业务服务,并构建了以流程为中心的、由可重复执行的分析、设计、实现、测试及 *** 作等阶段为组成部分的服务生命周期。
为了实现灵活应对经营变化的、以SOA为基础的未来导向型体系架构,TmaxSoft以与SOA基本概念有关的各种技术及解决方案为基础,对业务流程中所需部分进行诊断,并提供解决方法,从而为客户创造实际业务价值,并降低总体拥有成本TCO,提高投资回报率ROI。
TmaxSoft SOAIF框架
TmaxSoft拥有All-in-One Platform的SOA实现框架――SOAIF(SOA Implementation Framework)。SOAIF提供遵守国际标准接口的相关技术,有利于保护现有IT资产的投资,并可以对不同系统之间的服务进行方便的整合。通过使用IT系统可以对企业政策变化迅速做出响应,并且对经营风险进行预测,从而达到企业的RTE目标。
TmaxSoft的SOAIF框架具有如下优点:
1灵活应对变化的体系架构
外部环境的各种变化常常会导致企业IT环境的急剧变化,形成外部环境变化――>经营环境变化――>经营流程变化――>IT结构变化的连环反应。SOAIF具有能够迅速应对这些变化的灵活架构。
2具有反射机制的体系架构
● 建模
随着产业的高速发展和多元化,为了适应日益复杂的经营环境,IT角色变得越发重要,企业希望因业务变化而引起的IT变化更加直观,为了将业务变化直接反映成IT变化,IT系统要通过建模反映经营方案,以便业务负责人易于理解。SOAIF提供了服务、规则、业务流程建模等多种工具,并通过建模应对变化,实现业务观点和IT观点的一元化。
● 简单化
当业务发生变化时,利用建模工具通过拖拽的方式设计流程,设定相应的策略并实时部署,可以简便有效地应对外界的变化。通过协作视图(Collaboration View), 可以方便地掌握流程之间的相互关系,从而降低业务的复杂度。并且通过建模使IT观点变得形象易懂,让决策者和业务分析人员共享,从而确保企业业务的透明性。
● 业务服务的组合和热部署
基于TmaxSoft的技术,通过业务服务的组合/组装和基于规则的编程,而不是编码对业务重新开发,支持对性能影响最小化的“编译后热部署(Compiled Hot-Deploy)”,从而不会出现业务系统的服务中断,并且能够实时变更和部署服务,解决企业实现RTE的IT技术难题。
● 端到端的可视化
向业务负责人提供实时信息监控的可视化工具――仪表盘,使企业的流程和管理变得更加透明。
● 有效整合
SOAIF以CBD开发方法论为原型,包含了基于规则的框架开发方法论,实现基于SOA的从核心服务到界面服务的整体应用解决方案,从而把具有不同架构的系统组建成基于SOA的整合平台,以便包容新的技术架构,使灵活应对变化成为可能。
TmaxSoft SOAware技术路线
TmaxSoft集成SOA的各种丰富技术并且遵守相关的国际标准来实施自己的技术路线。为了优化企业的业务目标,TmaxSoft在解决方案的路线中,尽量做到把全公司范围内的IT资源与现有标准加以管理,最终实现基于SOA的企业应用框架。此外,为了在基于SOA的企业架构中实现全公司的整合,TmaxSoft在技术路线中从多种角度对以下特性提供强有力的支持:
1服务设计角度
● 支持设计直观、易于理解的服务整合的建模工具;
● 提高分析/设计的精确度,提高业务经验及分析/设计模型的重复使用性;
● 通过工具扩展服务的生成管理功能,提高服务品质及生产性、
2框架角度
● 应用EA(Enterprise Architecture)标准架构,提供优化的全公司范围内整合平台的构建环境;
● 遵守国际标准,利用存储库整合管理元数据;
● 应用不同功能独立层,提供独立性和面向编码的标准化和最少化;
● 确保解决方案的生命周期。
3方法论角度
● 通过SOA方法论,支持服务整体生命周期;
● 通过对特定业务的模拟,早期发现危险要素的管理功能;
● 通过重复的服务诊断、设计、开发流程支持,提高服务品质。
4服务角度
● 通过工具支持服务的组合,提高重复使用性;
● 通过热部署的实时服务切换功能,实现及时敏捷地应对市场;
● 通过基于规则的服务逻辑变更,无需编码,由业务负责人进行服务管理。
5开发角度
● 通过现有服务的重复使用,提高生产率,提供公共服务;
● 使因外部系统等变更而导致的影响最小化,实时变更及替换服务;
● 对外部多种协议和消息的统一管理及自动整合转换;
● 内置已被验证的中间件,保证服务的扩展性和整合的稳定性。
#云原生背景#
云计算是信息技术发展和服务模式创新的集中体现,是信息化发展的重要变革和必然趋势。随着“新基建”加速布局,以及企业数字化转型的逐步深入,如何深化用云进一步提升云计算使用效能成为现阶段云计算发展的重点。云原生以其高效稳定、快速响应的特点极大地释放了云计算效能,成为企业数字业务应用创新的原动力,云原生进入快速发展阶段,就像集装箱加速贸易全球化进程一样,云原生技术正在助力云计算普及和企业数字化转型。
云原生计算基金会(CNCF)对云原生的定义是:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可d性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式编程API。
#云安全时代市场发展#
云安全几乎是伴随着云计算市场而发展起来的,云基础设施投资的快速增长,无疑为云安全发展提供土壤。根据 IDC 数据,2020 年全球云安全支出占云 IT 支出比例仅为 11%,说明目前云安全支出远远不够,假设这一比例提升至 5%,那么2020 年全球云安全市场空间可达 532 亿美元,2023 年可达 1089 亿美元。
海外云安全市场:技术创新与兼并整合活跃。整体来看,海外云安全市场正处于快速发展阶段,技术创新活跃,兼并整合频繁。一方面,云安全技术创新活跃,并呈现融合发展趋势。例如,综合型安全公司 PaloAlto 的 Prisma 产品线将 CWPP、CSPM 和 CASB 三个云安全技术产品统一融合,提供综合解决方案及 SASE、容器安全、微隔离等一系列云上安全能力。另一方面,新兴的云安全企业快速发展,同时,传统安全供应商也通过自研+兼并的方式加强云安全布局。
国内云安全市场:市场空间广阔,尚处于技术追随阶段。市场规模上,根据中国信通院数据,2019 年我国云计算整体市场规模达 13345亿元,增速 386%。预计 2020-2022 年仍将处于快速增长阶段,到 2023 年市场规模将超过 37542 亿元。中性假设下,安全投入占云计算市场规模的 3%-5%,那么 2023 年中国云安全市场规模有望达到 1126 亿-1877 亿元。技术发展上,中国在云计算的发展阶段和云原生技术的程度上与海外市场还有一定差距。国内 CWPP 技术应用较为广泛,对于 CASB、CSPM 一些新兴的云安全技术应用较少。但随着国内公有云市场的加速发展,云原生技术的应用越来越广泛,我们认为CASB、SCPM、SASE 等新兴技术在国内的应用也将越来越广泛。
#云上安全呈原生化发展趋势#
云原生技术逐渐成为云计算市场新趋势,所带来的安全问题更为复杂。以容器、服务网格、微服务等为代表的云原生技术,正在影响各行各业的 IT 基础设施、平台和应用系统,也在渗透到如 IT/OT 融合的工业互联网、IT/CT 融合的 5G、边缘计算等新型基础设施中。随着云原生越来越多的落地应用,其相关的安全风险与威胁也不断的显现出来。Docker/Kubernetes 等服务暴露问题、特斯拉 Kubernetes 集群挖矿事件、Docker Hub 中的容器镜像被“投毒”注入挖矿程序、微软 Azure 安全中心检测到大规模 Kubernetes 挖矿事件、Graboid 蠕虫挖矿传播事件等一系列针对云原生的安全攻击事件层出不穷。
从各种各样的安全风险中可以一窥云原生技术的安全态势,云原生环境仍然存在许多安全问题亟待解决。在云原生技术的落地过程中,安全是必须要考虑的重要因素。
#云原生安全的定义#
国内外各组织、企业对云原生安全理念的解释略有差异,结合我国产业现状与痛点,云原生与云计算安全相似,云原生安全也包含两层含义:“面向云原生环境的安全”和“具有云原生特征的安全”。
面向云原生环境的安全,其目标是防护云原生环境中的基础设施、编排系统和微服务的安全。这类安全机制,不一定具备云原生的特性(比如容器化、可编排),它们可以是传统模式部署的,甚至是硬件设备,但其作用是保护日益普及的云原生环境。
具有云原生特征的安全,是指具有云原生的d性敏捷、轻量级、可编排等特性的各类安全机制。云原生是一种理念上的创新,通过容器化、资源编排和微服务重构了传统的开发运营体系,加速业务上线和变更的速度,因而,云原生系统的种种优良特性同样会给安全厂商带来很大的启发,重构安全产品、平台,改变其交付、更新模式。
#云原生安全理念构建#
为缓解传统安全防护建设中存在的痛点,促进云计算成为更加安全可信的信息基础设施,助力云客户更加安全的使用云计算,云原生安全理念兴起,国内外第三方组织、服务商纷纷提出以原生为核心构建和发展云安全。
Gartner提倡以云原生思维建设云安全体系
基于云原生思维,Gartner提出的云安全体系覆盖八方面。其中,基础设施配置、身份和访问管理两部分由云服务商作为基础能力提供,其它六部分,包括持续的云安全态势管理,全方位的可视化、日志、审计和评估,工作负载安全,应用、PaaS 和 API 安全,扩展的数据保护,云威胁检测,客户需基于安全产品实现。
Forrester评估公有云平台原生安全能力
Forrester认为公有云平台原生安全(Public cloud platform native security, PCPNS)应从三大类、37 个方面去衡量。从已提供的产品和功能,以及未来战略规划可以看出,一是考察云服务商自身的安全能力和建设情况,如数据中心安全、内部人员等,二是云平台具备的基础安全功能,如帮助和文档、授权和认证等,三是为用户提供的原生安全产品,如容器安全、数据安全等。
安全狗以4项工作防护体系建设云原生安全
(1)结合云原生技术的具体落地情况开展并落实最小权限、纵深防御工作,对于云原生环境中的各种组成部分,均可贯彻落实“安全左移”的原则,进行安全基线配置,防范于未然。而对于微服务架构Web应用以及Serverless应用的防护而言,其重点是应用安全问题。
(2)围绕云原生应用的生命周期来进行DevSecOps建设,以当前的云原生环境的关键技术栈“K8S + Docker”举例进行分析。应该在容器的全生命周期注重“配置安全”,在项目构建时注重“镜像安全”,在项目部署时注重“容器准入”,在容器的运行环境注重云计算的三要素“计算”“网络”以及“存储”等方面的安全问题。
(3)围绕攻击前、中、后的安全实施准则进行构建,可依据安全实施准则对攻击前、中、后这三个阶段开展检测与防御工作。
(4)改造并综合运用现有云安全技术,不应将“云原生安全”视为一个独立的命题,为云原生环境提供更多支持的主机安全、微隔离等技术可赋能于云原生安全。
#云原生安全新型风险#
云原生架构的安全风险包含云原生基础设施自身的安全风险,以及上层应用云原生化改造后新增和扩大的安全风险。云原生环境面临着严峻的安全风险问题。攻击者可能利用的重要攻击面包括但不限于:容器安全、编排系统、软件供应链等。下面对重要的攻击面安全风险问题进行梳理。
#云原生安全问题梳理#
问题1:容器安全问题
在云原生应用和服务平台的构建过程中,容器技术凭借高d性、敏捷的特性,成为云原生应用场景下的重要技术支撑,因而容器安全也是云原生安全的重要基石。
(1)容器镜像不安全
Sysdig的报告中提到,在用户的生产环境中,会将公开的镜像仓库作为软件源,如最大的容器镜像仓库Docker Hub。一方面,很多开源软件会在Docker Hub上发布容器镜像。另一方面,开发者通常会直接下载公开仓库中的容器镜像,或者基于这些基础镜像定制自己的镜像,整个过程非常方便、高效。然而,Docker Hub上的镜像安全并不理想,有大量的官方镜像存在高危漏洞,如果使用了这些带高危漏洞的镜像,就会极大的增加容器和主机的入侵风险。目前容器镜像的安全问题主要有以下三点:
1不安全的第三方组件
在实际的容器化应用开发过程当中,很少从零开始构建镜像,而是在基础镜像之上增加自己的程序和代码,然后统一打包最终的业务镜像并上线运行,这导致许多开发者根本不知道基础镜像中包含多少组件,以及包含哪些组件,包含的组件越多,可能存在的漏洞就越多。
2恶意镜像
公共镜像仓库中可能存在第三方上传的恶意镜像,如果使用了这些恶意镜像来创建容器后,将会影响容器和应用程序的安全
3敏感信息泄露
为了开发和调试的方便,开发者将敏感信息存在配置文件中,例如数据库密码、证书和密钥等内容,在构建镜像时,这些敏感信息跟随配置文件一并打包进镜像,从而造成敏感信息泄露
(2)容器生命周期的时间短
云原生技术以其敏捷、可靠的特点驱动引领企业的业务发展,成为企业数字业务应用创新的原动力。在容器环境下,一部分容器是以docker的命令启动和管理的,还有大量的容器是通过Kubernetes容器编排系统启动和管理,带来了容器在构建、部署、运行,快速敏捷的特点,大量容器生命周期短于1小时,这样一来容器的生命周期防护较传统虚拟化环境发生了巨大的变化,容器的全生命周期防护存在很大变数。对防守者而言,需要采用传统异常检测和行为分析相结合的方式,来适应短容器生命周期的场景。
传统的异常检测采用WAF、IDS等设备,其规则库已经很完善,通过这种检测方法能够直观的展示出存在的威胁,在容器环境下,这种方法仍然适用。
传统的异常检测能够快速、精确地发现已知威胁,但大多数未知威胁是无法通过规则库匹配到的,因而需要通过行为分析机制来从大量模式中将异常模式分析出来。一般来说,一段生产运营时间内的业务模式是相对固定的,这意味着,业务行为是可以预测的,无论启动多少个容器,容器内部的行为总是相似的。通过机器学习、采集进程行为,自动构建出合理的基线,利用这些基线对容器内的未知威胁进行检测。
(3)容器运行时安全
容器技术带来便利的同时,往往会忽略容器运行时的安全加固,由于容器的生命周期短、轻量级的特性,传统在宿主机或虚拟机上安装杀毒软件来对一个运行一两个进程的容器进行防护,显示费时费力且消耗资源,但在黑客眼里容器和裸奔没有什么区别。容器运行时安全主要关注点:
1不安全的容器应用
与传统的Web安全类似,容器环境下也会存在SQL注入、XSS、RCE、XXE等漏洞,容器在对外提供服务的同时,就有可能被攻击者利用,从而导致容器被入侵
2容器DDOS攻击
默认情况下,docker并不会对容器的资源使用进行限制,默认情况下可以无限使用CPU、内存、硬盘资源,造成不同层面的DDOS攻击
(4)容器微隔离
在容器环境中,与传统网络相比,容器的生命周期变得短了很多,其变化频率也快很多。容器之间有着复杂的访问关系,尤其是当容器数量达到一定规模以后,这种访问关系带来的东西向流量,将会变得异常的庞大和复杂。因此,在容器环境中,网络的隔离需求已经不仅仅是物理网络的隔离,而是变成了容器与容器之间、容器组与宿主机之间、宿主机与宿主机之间的隔离。
问题2:云原生等保合规问题
等级保护20中,针对云计算等新技术、新应用领域的个性安全保护需求提出安全扩展要求,形成新的网络安全等级保护基本要求标准。虽然编写了云计算的安全扩展要求,但是由于编写周期很长,编写时主流还是虚拟化场景,而没有考虑到容器化、微服务、无服务等云原生场景,等级保护20中的所有标准不能完全保证适用于目前云原生环境;
通过安全狗在云安全领域的经验和具体实践,对于云计算安全扩展要求中访问控制的控制点,需要检测主机账号安全,设置不同账号对不同容器的访问权限,保证容器在构建、部署、运行时访问控制策略随其迁移;
对于入侵防范制的控制点,需要可视化管理,绘制业务拓扑图,对主机入侵进行全方位的防范,控制业务流量访问,检测恶意代码感染及蔓延的情况;
镜像和快照保护的控制的,需要对镜像和快照进行保护,保障容器镜像的完整性、可用性和保密性,防止敏感信息泄露。
问题3:宿主机安全
容器与宿主机共享 *** 作系统内核,因此宿主机的配置对容器运行的安全有着重要的影响,比如宿主机安装了有漏洞的软件可能会导致任意代码执行风险,端口无限制开放可能会导致任意用户访问的风险。通过部署主机入侵监测及安全防护系统,提供主机资产管理、主机安全加固、风险漏洞识别、防范入侵行为、问题主机隔离等功能,各个功能之间进行联动,建立采集、检测、监测、防御、捕获一体化的安全闭环管理系统,对主机进行全方位的安全防护,协助用户及时定位已经失陷的主机,响应已知、未知威胁风险,避免内部大面积主机安全事件的发生。
问题4:编排系统问题
编排系统支撑着诸多云原生应用,如无服务、服务网格等,这些新型的微服务体系也同样存在着安全问题。例如攻击者编写一段代码获得容器的shell权限,进而对容器网络进行渗透横移,造成巨大损失。
Kubernetes架构设计的复杂性,启动一个Pod资源需要涉及API Server、Controller、Manager、Scheduler等组件,因而每个组件自身的安全能力显的尤为重要。API Server组件提供的认证授权、准入控制,进行细粒度访问控制、Secret资源提供密钥管理及Pod自身提供安全策略和网络策略,合理使用这些机制可以有效实现Kubernetes的安全加固。
问题5:软件供应链安全问题
通常一个项目中会使用大量的开源软件,根据Gartner统计至少有95%的企业会在关键IT产品中使用开源软件,这些来自互联网的开源软件可能本身就带有病毒、这些开源软件中使用了哪些组件也不了解,导致当开源软件中存在0day或Nday漏洞,我们根本无法获悉。
开源软件漏洞无法根治,容器自身的安全问题可能会给开发阶段带的各个过程带来风险,我们能做的是根据SDL原则,从开发阶段就开始对软件安全性进行合理的评估和控制,来提升整个供应链的质量。
问题6:安全运营成本问题
虽然容器的生命周期很短,但是包罗万象。对容器的全生命周期防护时,会对容器构建、部署、运行时进行异常检测和安全防护,随之而来的就是高成本的投入,对成千上万容器中的进程行为进程检测和分析,会消耗宿主机处理器和内存资源,日志传输会占用网络带宽,行为检测会消耗计算资源,当环境中容器数量巨大时,对应的安全运营成本就会急剧增加。
问题7:如何提升安全防护效果
关于安全运营成本问题中,我们了解到容器安全运营成本较高,我们该如何降低安全运营成本的同时,提升安全防护效果呢?这就引入一个业界比较流行的词“安全左移”,将软件生命周期从左到右展开,即开发、测试、集成、部署、运行,安全左移的含义就是将安全防护从传统运营转向开发侧,开发侧主要设计开发软件、软件供应链安全和镜像安全。
因此,想要降低云原生场景下的安全运营成本,提升运营效率,那么首先就要进行“安全左移”,也就是从运营安全转向开发安全,主要考虑开发安全、软件供应链安全、镜像安全和配置核查:
开发安全
需要团队关注代码漏洞,比如使用进行代码审计,找到因缺少安全意识造成的漏洞和因逻辑问题造成的代码逻辑漏洞。
供应链安全
可以使用代码检查工具进行持续性的安全评估。
镜像安全
使用镜像漏洞扫描工具持续对自由仓库中的镜像进行持续评估,对存在风险的镜像进行及时更新。
配置核查
核查包括暴露面、宿主机加固、资产管理等,来提升攻击者利用漏洞的难度。
问题8:安全配置和密钥凭证管理问题
安全配置不规范、密钥凭证不理想也是云原生的一大风险点。云原生应用会存在大量与中间件、后端服务的交互,为了简便,很多开发者将访问凭证、密钥文件直接存放在代码中,或者将一些线上资源的访问凭证设置为弱口令,导致攻击者很容易获得访问敏感数据的权限。
#云原生安全未来展望#
从日益新增的新型攻击威胁来看,云原生的安全将成为今后网络安全防护的关键。伴随着ATT&CK的不断积累和相关技术的日益完善,ATT&CK也已增加了容器矩阵的内容。ATT&CK是对抗战术、技术和常识(Adversarial Tactics, Techniques, and Common Knowledge)的缩写,是一个攻击行为知识库和威胁建模模型,它包含众多威胁组织及其使用的工具和攻击技术。这一开源的对抗战术和技术的知识库已经对安全行业产生了广泛而深刻的影响。
云原生安全的备受关注,使ATTACK Matrix for Container on Cloud的出现恰合时宜。ATT&CK让我们从行为的视角来看待攻击者和防御措施,让相对抽象的容器攻击技术和工具变得有迹可循。结合ATT&CK框架进行模拟红蓝对抗,评估企业目前的安全能力,对提升企业安全防护能力是很好的参考。
从目前的数据库及数据仓库建模方法来说,主要分为四类。
第一类是大家最为熟悉的关系数据库的三范式建模,通常我们将三范式建模方法用于建立各种 *** 作型数据库系统。
第二类是Inmon提倡的三范式数据仓库建模,它和 *** 作型数据库系统的三范式建模在侧重点上有些不同。Inmon的数据仓库建模方法分为三层,第一层是实体关系层,也即企业的业务数据模型层,在这一层上和企业的 *** 作型数据库系统建模方法是相同的;第二层是数据项集层,在这一层的建模方法根据数据的产生频率及访问频率等因素与企业的 *** 作型数据库系统的建模方法产生了不同;第三层物理层是第二层的具体实现。
第三类是Kimball提倡的数据仓库的维度建模,我们一般也称之为星型结构建模,有时也加入一些雪花模型在里面。维度建模是一种面向用户需求的、容易理解的、访问效率高的建模方法,也是笔者比较喜欢的一种建模方式。
第四类是更为灵活的一种建模方式,通常用于后台的数据准备区,建模的方式不拘一格,以能满足需要为目的,建好的表不对用户提供接口,多为临时表。
下面简单谈谈第四类建模方法的一些的经验。
数据准备区有一个最大的特点,就是不会直接面对用户,所以对数据准备区中的表进行 *** 作的人只有ETL工程师。ETL工程师可以自己来决定表中数据的范围和数据的生命周期。下面举两个例子:
1)数据范围小的临时表
当需要整合或清洗的数据量过大时,我们可以建立同样结构的临时表,在临时表中只保留我们需要处理的部分数据。这样,不论是更新还是对表中某些项的计算都会效率提高很多。处理好的数据发送入准备加载到数据仓库中的表中,最后一次性加载入数据仓库。
2)带有冗余字段的临时表
由于数据准备区中的表只有自己使用,所以建立冗余字段可以起到很好的作用而不用承担风险。
举例来说,笔者在项目中曾遇到这样的需求,客户表{客户ID,客户净扣值},债项表{债项ID,客户ID,债项余额,债项净扣值},即客户和债项是一对多的关系。其中,客户净扣值和债项余额已知,需要计算债项净扣值。计算的规则是按债项余额的比例分配客户的净扣值。这时,我们可以给两个表增加几个冗余字段,如客户表{客户ID,客户净扣值,客户余额},债项表{债项ID,客户ID,债项余额,债项净扣值,客户余额,客户净扣值}。这样通过三条SQL就可以直接完成整个计算过程。将债项余额汇总到客户余额,将客户余额和客户净扣值冗余到债项表中,在债项表中通过(债项余额×客户净扣值/客户余额)公式即可直接计算处债项净扣值。
另外还有很多大家可以发挥的建表方式,如不需要主键的临时表等等。总结来说,正因为数据准备区是不对用户提供接口的,所以我们一定要利用好这一点,以给我们的数据处理工作带来最大的便利为目的来进行数据准备区的表设计。
1、PowerDesigner,功能包括:完整的集成模型和面向包含IT为中心的、非IT为中心的差异化建模诉求。支持非常强大的元数据信息库和各种不同格式的输出。
2、ER/Studio, 是一个支持多平台环境的直观数据建模工具,并且本地集成了用于处理大数据的平台,例如-MongoDB和Hadoop Hive。它能够进行正向和逆向工程,并且拥有“比较合并”功能,能够输出例如XML、PNG、JPEG等格式文档。内建自动执行任务功能,支持当前流行数据库平台。
3、Enterprise Architect,帮助企业用户快速建立强大的可维护的系统,而且很容易在共享项目中扩展到大型的协作团队中去。 Enterprise Architect 同样有动态运行模拟模型的能力,用以验证模型和更加正确和深入的理解原来商业系统运作的方式。
信息系统和抽象建模是密不可分的,抽象建模可以帮助开发人员更好地设计和开发信息系统,从而提高系统的质量和效率。信息系统是指通过计算机技术和信息技术来收集、存储、处理和传递信息的系统。而抽象建模是指将现实世界中的事物和过程抽象成模型,以便更好地理解和分析。在信息系统的设计和开发过程中,抽象建模是非常重要的一步,可以帮助开发人员更好地理解业务需求和系统功能,并将其转化为可执行的计算机程序。
岗位:程序员
程序员(英文Programmer)是从事程序开发、维护的专业人员。一般我们将程序员分为程序设计人员和程序编码员,但两者的界限并不非常清楚,特别是在中国。
作一个真正合格的程序员,应该具有的素质。
1:团队精神和协作能力
团队精神和协作能力是作为一个程序员应具备的最基本的素质。软件工程已经提了将近三十年了,当今的软件开发已经不是编程了,而是工程。独行侠可以写一些程序也能赚钱发财,但是进入研发团队,从事商业化和产品化的开发任务,就必须具备这种素质。可以毫不夸张的说这种素质是一个程序员乃至一个团队的安身立命之本。
2:文档习惯
文档是一个软件系统的生命力。一个公司的产品再好、技术含量再高,如果没有缺乏文档,知识就没有继承,公司还是一个来料加工的软件作坊。作为代码程序员,必须将30%的工作时间写用于技术文档。没有文档的程序员势必会被淘汰。
3:规范化的代码编写习惯
知名软件公司的代码的变量命名、注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。一些所谓的高手甚至叫嚣高手写的代码一般人看不懂,我只能说他不是一名合格的程序员。
4:需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
5:模块化思维能力
作为一个优秀的程序员,他的思想不能在局限当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。这样做可以使代码能重复利用,减少重复的劳动,也能是系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
6:测试习惯
测试是软件工程质量保证的重要环节,但是测试不仅仅是测试工程师的工作,而是每个程序员的一种基本职责。程序员要认识测试不仅是正常的程序调试,而要是要进行有目的有针对性的异常调用测试,这一点要结合需求理解能力。
7:学习和总结的能力
程序员是很容易被淘汰的职业,所以要善于学习总结。许多程序员喜欢盲目追求一些编码的小技巧,这样的技术人员无论学了多少语言,代码写起来多熟练,我们只能说他是一名熟练的代码民工,他永远都不会有质的提高。一个善于学习的程序员会经常总结自己的技术水平,对自己的技术层面要有良好的定位,这样才能有目的地提高自己。这样才能逐步提高,从程序员升级为软件设计师、系统分析员。
作为高级程序员,乃至于设计师而言,除了应该具备上述全部素质之外,还需要具备以下素质:
1、 需求分析能力
2、 整体框架能力
3、 流程处理能力
4、 模块分解能力
5、 整体项目评估能力
6、 团队组织管理能力
岗位:项目经理
主要职责:
1、 计划:
a)项目范围、项目质量、项目时间、项目成本的确认。
b)项目过程/活动的标准化、规范化。
c)根据项目范围、质量、时间与成本的综合因素的考虑,进行项目的总体规划与阶段计划。
d)各项计划得到上级领导、客户方及项目组成员认可。
2、 组织:
a)组织项目所需的各项资源。
b)设置项目组中的各种角色,并分配好各角色的责任与权限。
c)定制项目组内外的沟通计划。(必要时可按配置管理要求写项目策划目录中的《项目沟通计划》)
d)安排组内需求分析师、客户联系人等角色与客户的沟通与交流。
e)处理项目组与其它项目干系人之间的关系。
f)处理项目组内各角色之间的关系、处理项目组内各成员之间的关系。
g)安排客户培训工作。
3、 领导:
a)保证项目组目标明确且理解一致。
b)创建项目组的开发环境及氛围,在项目范围内保证项目组成员不受项目其它方面的影响。
c)提升项目组士气,加强项目组凝聚力。
d)合理安排项目组各成员的工作,使各成员工作都能达到一定的饱满度。
e)制定项目组需要的招聘或培训人员的计划。
f)定期组织项目组成员进行相关技术培训以及与项目相关的行业培训等。
g)及时发现项目组中出现的问题。
h)及时处理项目组中出现的问题。
4、 控制
a)保证项目在预算成本范围内按规定的质量和进度达到项目目标。
b)在项目生命周期的各个阶段,跟踪、检查项目组成员的工作质量;
c)定期向领导汇报项目工作进度以及项目开发过程中的难题。
d)对项目进行配置管理与规划。
e)控制项目组各成员的工作进度,即时了解项目组成员的工作情况,并能快速的解决项目组成员所碰到的难题。
f)不定期组织项目组成员进行项目以外的短期活动,以培养团队精神。
结语:
项目经理是在整个项目开发过程中项目组内对所有非技术性重要事情做出最终决定的人。
岗位:系统架构师(技术总监)
主要功能及职责:
1、系统架构师是软件项目的总体设计师,是软件组织新产品的开发与集成、新技术体系的构建者。
2、系统架构师是在技术上对所有重要事情做出决定的人。(系统架构师在整个软件开发过程中都起着重要作用,并随着开发进程的推进而其职责或关注点不断地变化。)
3、需求阶段,软件架构师负责理解和管理非功能性系统需求,比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等。审查客户和市场人员所提出的需求,确认开发团队所提出的设计;组织开发团队成员和开发过程的定义;协助需求分析师完成《用户需求说明书》、《需求变更说明书》。
4、设计阶段,架构师负责对整个软件架构、关键构件、接口的设计。协助系统分析师完成《系统概要设计说明书》
5、编码阶段,架构师则成为程序员的顾问,并且经常性地要举行一些技术研讨会、技术培训班等;
6、测试及实施阶段,随着软件开始测试、集成和交付,集成和测试支持将成为软件架构师的工作重点;
结语:
系统架构师也可以理解成技术总监。系统架构师是在部门内所有软件项目中,对技术上所有重要的事情做出决定的人。
岗位:需求分析师
主要职责:
1、在项目前期根据《需求调研计划》对客户进行需求调研。
2、收集整理客户需求,负责编写《用户需求说明书》。
3、代表项目组与用户沟通与项目需求有关的所有事项。
4、代表客户与项目组成员沟通项目需求有关的所有事项。
5、负责《用户需求说明书》得到用户的认可与签字。
6、负责将完成的项目模块给客户做演示,并收集对完成模块的意见。
7、完成《需求变更说明书》,并得到用户的认可与签字。
8、并协助系统架构师、系统分析师对需求进行理解。
结语:
需求分析师是项目前期与客户方打交道最多的人,对于客户来说,他可以代表整个项目组,对与项目组成员来说他的意见可以代表客户方的意见,项目组内所有与客户需求相关的事情必需得到他的认可。
岗位:系统分析师
主要职责:
1、 协助需求分析师进行需求调研。
2、分析、解析《用户需求说明书》,将系统需求整理成《软件需求规格说明书》;
3、负责解决《软件需求规格说明书》被评审后发现的问题;
4、在分析系统前,负责向架构设计师解释《软件需求规格说明书》的内容。
5、协助架构设计师进行架构设计,并协助其完成《系统架构说明书》。
6、根据《系统架构说明书》对系统进行建模;
7、系统分析及建模完成后,负责将建模成果转化为《系统概要设计》;
8、协助数据库设计师按《系统概要设计说明书》进行数据库逻辑设计和物理设计,完成数据库CDM及PDM图,并协助其完成《数据库设计说明书》
9、协助软件设计师按《系统概要设计说明书》进行《系统详细设计说明书》。
10、指导软件工程师按《系统详细设计说明书》进行代码实现。
11、 负责重点代码检查;
12、协助项目经理进行配置管理,并提供优化改进建议;
13、定期对项目组成员进行技术方面的培训。
结语:
系统分析师是项目组中的首席执行官,他涉及项目的所有方面,是项目进度的推动者,也是项目成功的关键。
岗位:数据库设计师
主要职责:
1、根据《系统架构说明书》与系统架构师、系统分析师一同进行数据库建模。
2、根据数据库建模结果,绘制数据库CDM与PDM图。
3、 根据数据库PDM图进行数据库建库。
4、 对数据库进行维护、备份、恢复、同步。
5、 负责客户数据的导入导出。
6、 对数据库进行初始化 *** 作。
7、协助软件设计师完成《系统详细设计说明书》中与数据库相关的部分。
8、根据《系统详细设计说明书》编写对应的视图、存储过程、函数、触发器等。
9、对项目组其它成员进行SQL方面的指导。
10、定期对项目组其它成员进行数据库方面知识的培训。
11、为测试经理及测试工程师建立测试数据。
结语:
数据库设计师又称DBA,是项目组中唯一能对数据库进行直接的 *** 作的人。对项目中与数据库相关的所有重要的事做最终决定的人。
岗位:软件设计师(模块)
1、根据《系统概要设计说明书》编写分模块的《系统详细说明书》。
2、负责对软件工程师讲解《系统详细设计说明书》内容。
3、协助软件工程师按《系统详细设计说明书》进行代码实现。
4、 控制本模块的开发进度。
结语:
软件设计师又称模块设计师,协助系统分析师对分模块进行详细设计,并直接管控该模块的进度,对于本模块中所有重要的事做最终决定的人。
岗位:软件工程师
主要职责:
1根据《系统详细设计说明书》进行代码实现;
2对自己代码进行复查,并进行简单的测试;
结语:
软件工程师是最终实现代码的成员。
岗位:测试经理
主要职责:
1独立编写测试计划;
2独立编写测试用例;
3协调测试团队内部的工作以及与开发团队之间的工作;
4完成“执行测试”的工作;
5掌握较深层次的测试方法、测试技术和较复杂的业务流程;
6负责测试过程工具的研究、推广与维护,负责测试数据库维护工作;
7负责编写《用户手册》、《 *** 作手册》和相关培训教材;
8负责项目的质量审查。
结语:
测试经理其实应该是整个项目中最关心项目质量的人,他的主要工作就是找到项目中存在的不合理、不合格的部份,并要求项目其它成员按其给定的项目质量完成项目。
岗位:测试工程师
主要职责:
1在测试经理的安排和指导下,编写测试用例;
2在测试经理的安排和指导下,完成“执行测试”的工作;
3在测试经理的指导下,按测试计划进行测试工作;
4按测试用例进行测试工作。
5负责被分派项目的质量审计。
6了解项目的基本流程,可以熟练的进行项目中各种流程的 *** 作。
结语:
测试工程师是项目质量的保证,是最终进行项目测试的成员。
岗位:实施经理
主要职责:
1负责制定项目实施计划;
2在项目实施计划的约束下,协调项目组相关资源,完成系统实施相关工作(包括系统安装、用户培训、系统上线、系统试运行等);
3在项目实施阶段,跟踪、检查实施人员的工作质量;
5负责协助用户进行“用户确认测试”和编写《确认测试报告》。
岗位:实施工程师
主要职责:
1在实施经理安排和指导下,执行项目用户现场实施任务;
2参与编写《用户手册》、《 *** 作手册》和相关培训教材;
3参与进行“用户确认测试”和编写《确认测试报告》。
岗位:美术工程师
主要职责:
1负责完成软件设计师安排的功能界面设计。
2负责对项目整体色彩的调配。
3向系统分析师提出项目美化的建议。
4为BS项目提供一套或几套CSS样式表及HTML结构表
5为CS项目提供符合项目内容的静态、动态。
6并为软件设计师提供界面指导。
岗位:客户经理(当所开发的项目属于定制型的项目时设立,可由项目经理或部门经理兼)
主要职责:
1策划并独立完成目标客户的拜访和沟通;
2定期分析、整理客户需求,制定有针对性的方案;
3进行重点客户的关系维护,了解并整理重点客户的需求,为开发更符合用户需求的产品提供富有价值的市场信息;
4参与产品定位的研讨,为产品策划献计献策。
岗位:产品经理(当所开发的项目为产品型项目时设立,可由市场部成员兼)
主要职责:
1对所负责的产品进行策划和管理;
2对所负责的产品进行市场调研和分析,及时提出应对措施;
3负责产品实现的内部管理,保证产品功能的顺利实现以及时满足市场需求;
4负责产品对外宣传与推广,开拓市场,提高产品品牌知名度和认可度;
5配合销售制订产品销售策略,支持市场销售业务。
以上就是关于如何基于visual studio 进行数据建模全部的内容,包括:如何基于visual studio 进行数据建模、澳洲墨尔本大学IT ProjectIT项目、it的战略作用是什么【未来经营的IT战略】等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)