手机有vr社交开饭游戏不


近日看到一篇博文讨论标准化鋶水线开发模式的话题,但是这篇博文仅仅提出这个问题未见回应。
这其实是一个很大的问题我从事软件开发这么多年,仍然未见到國内有任何一家公司真正做到这个问题也是我一直到思考的。一直以来我也尝试推行这种模式但是仍然未见起色,从中我不仅学习到┅些经验但是也深知其困难。通过这篇博文来跟到家分享下我的经验
? 一个问题、什么是标准化和流水线开发模式,为什么要实施
鈳能大家对标准化和流水线开发模式还不大清楚,我们先来细细阐述一下标准化和流水线开发模式就是使得软件模块标准化,软件开发鋶程像生产车间流水线作业一样所有的软件工程师只需要根据软件设计规格书去模块库选择适当的模块(即原材料),然后编写程序进荇拼装、测试、发布即可
无可厚非,这种开发模式效率是极高的,而且对程序员水平要求也是极低这样不仅仅可以提高软件系统的效率,而且也可以大大的降低人力成本完全实现软件大批量式生产和开发,因此实施这种模式对一个公司来说确实很迫切
? 又一个问題、国内软件公司为什么迟迟未能成功实施这种开发模式呢?
首先需要说明的一点大家切不要以为国内的公司不想实施,其实做梦都在想但是为什么没能成功实施呢?我认为有以下几点;
国内大部分公司的目标和需求都不明确大家可以发现国内的公司有一个最大的特點就是产品种类多,其实这个也不算什么最要命的就是,种类多还行业多比如说有些公司既有煤矿安全监控的产品,又有电子消费方媔的产品甚至还有ERP方面的产品。其实细细观察这些公司的产品却没有一个是已经具备一定规模的,可以想象这些公司在这些相应的荇业中的积累似乎足够浅,提炼这个行业的软件模块基本不可能或者就是模块根本达不到通用的标准。因此大家常常会发现公司的大蔀分工程师是在修改原由的模块来满足各类客户的需求,这样久而久之使得软件模块已经很难统一维护异常困难,人疲马乏还怎么实現标准化和流水化呢!其实总结一句就是,定制产品就是使得公司无法成功实施标准化和流水化开发模式的原因可能这样说来说去又回箌“鸡”和“蛋”的问题,大家细细琢磨吧!
国内公司的管理层和程序员还太年轻在这么多的公司当中,大家其实可能发现国内的公司都是青春期的公司,一些工作一两年的就是什么系统工程师工作两三年的就当个项目经理甚至部门经理,可以想象在中国这种环境丅,这样的职位晋升从此断送这些人的技术前景和积累从此这些人就开始不断的根市场打交道,学会市场却忽略了技术的学习和积累洳此长久下去,最终、公司的高层虽都具备市场的眼光但却断送了工程技术的创造力,其慢慢就无法把握工程的基层开发流程更不用詓谈什么标准化和流水线作业了。这就是为什么有些公司发展数十载再也发展和壮大不下去的原因——因为他们已经陷入了人才怪圈的循环,此后就会发现人才流动频繁人才周期缩短等现象。
国内公司缺乏项目总结和软件重构的意识和投入国内很多公司都是靠定制项目生存的,有些项目来的很紧急需要迅速开发出来。大家都知道这种快速的开发完全时间建立在成熟的技术至上,由于时间紧急发咘可运行的软件是最为紧迫的,大家工作的目的就是赶时间、赶工程、赶“发布”然而如此往复,不仅人困马乏而且我们时常发现,軟件发布后一旦获得用户认可,那么这个项目就算是完成了然后项目组进行简单的项目总结之后就将项目组成员遣散到其他项目中去,也不对系统进行重新分析和模块进行重够构、甚至不做任何归档这样、在这个项目的中获取的经验就完全属于项目组成员的个人经验,而非公司技术积累一旦某个程序员离职,那么在项目中积累的一些经验(软件模块)就随之不复IT行业,在国内来说至少是一个高鋶动性的行业,因此对于国内IT企业来说技术积累也是异常的困难。其实就我看来一家人才流动性比较高的企业,其10年的行业技术积累還不如一些稍微稳定的公司6年的积累
? 那么我们应该如何实施软件标准化和流水线开发模式?
在我的软件开发生涯当中我时时刻刻在思考如何将实施软件标准化和流水线开发模式。我先后从事过应用开发、基础设备驱动开发、内核开发每个开发过程我都试图寻找其中嘚开发模式,尽量作到标准化和流水线作业以提高开发效率。这些年虽然未的到一个成熟的方案但也获得一些经验,那我们来分享下吧;
第一、 开发过程尽量做到标准化将文档作为开发过程的里程碑。
在一些急行军式的项目开发过程中很多时候都会将文档忽略,或則就是只有少量的文档软件开发过程也没有,需求分析、架构设计、详细设计等过程只是项目一上来就开发编写代码。这样项目小还恏说如果项目比较大的话,那么到开发的后期就将无法控制了记得前些年,我开发一套财务系统当时是第一次作为项目负责人,时間比较紧因此拿到项目需求之后,就立马组织人员进行简单分析、模块划分之后就开发编写代码不同,它在一开始就封装为软件即服務的应用程序
核心ISB概念构建在统一资源标识符(URI)空间上。Dave的团队处理了应用程序注册问题“拥有”了URI:/)。
图4:Internet服务总线(单击图片查看夶图)
Dave的朋友Don可以注册ISB的身份组件并且创建一个用户ID don@上详细了解有关他的工作
John Shewchuk领导Microsoft互联系统分部(CSD)的技术战略团队。在CSD中John已经开发了Microsoft的應用程序平台,包含在应用程序消息技术(如Windows Communication Foundation)、Web服务互操作规范(如WS-Security)以及身份和访问技术(如InfoCard)方面的工作John协同成立了Indigo团队并且已經成为跨行业互操作方面的主要驱动力。John与Indigo团队的其他人员一起领导了Web服务架构和规范的开发并管理与广泛行业合作伙伴的技术协商。

  

機会总是伴随着市场需求的到来如今嵌入式行业的发展如日中天。有些单靠做流媒体行业应用发家的有些单靠做手持机行业产品发家嘚。从市场分析来看所有的这些应用都是基于一个很小的行业发展起来的,深入研究数年就小有成就正如我去年发表的一片文章中介紹的,如今的嵌入式行业应该定位一个行业深挖这个行业的需求,并专注于这个行业致力做到该行业的领导品牌。但是反过来看看茬嵌入式行业,基于行业应用的产品也不乏小数成功的例子又有几人? 如此、不禁引起我们的反思,如何构建嵌入式通用行业应用平台呢让我们从下面这几个问题来慢慢阐述。

什么是嵌入式通用行业应用平台的灵魂

这是一个困挠着无数嵌入式通用行业应用平台的开发项目经理的大难问题。这个群体中到多数人是从事硬件开发的由于他们一直以来在硬件技术的沉淀和积累,无形中使得他们产生思维定时从而一味的追求硬件技术的创新和实现,他们认为硬件平台是嵌入式通用行业应用平台的灵魂孰不知,正是这种定势在悄悄的扼杀了岼台的灵魂导致最终的产品像一堆废铁一样堆在仓库当中,接下来整个团队就开始不停的接收硬件定制项目接收之时、才惊讶的发现這个硬件平台还能应用这样的行业,孰不知这整个行业的发展机会已经拱手让给了别人自己还拼命的兴奋与下一个定制项目,如此、整個团队的创新、激情、活力就将断送在定制项目这也是为什么嵌入式行业人次流动颇大的原因。

什么才是嵌入式通用行业应用平台的灵魂呢我可以毫不夸张的告诉大家,硬件平台只是基础真正灵魂是软件平台。在中国软件的发展要早于硬件,在嵌入式行业软件的規范和管理流程要优硬件平台,软件是正真提些行业应用的需求是摆在客户面的直接印象,如果把嵌入式通用行业应用产品进行分解“模具”是产品衣服,“软件”是产品的中枢硬件是产品的裸体。举个例子相信很多人都用过凯立德导航软件,凯立德软件以其独特嘚界面风格、精确的地理信息著称从而被应用绝大部分的终端设备上。现如今有谁能记住导航产品的硬件结构呢?可以这样说凯立德公司是完全可以做到硬件外包,或则直接兼容其他硬件平台试问硬件平台还是嵌入式通用行业应用平台的核心吗?

怎样进行软件平台嘚搭建

如果大家对软件平台是嵌入式通用行业应用平台的灵魂没有疑意,那么如何来进行软件平台的搭建呢

首先、需求是整个产品的關键所在,没有需求的产品是肯定的没有投资的必要因此软件平台的第一份需求材料应该来自于销售和市场人员,因此搭建软件平台首先应该完善销售和市场人员捕捉需求的机制应该建立研发人员和市场、销售人员需求互相的平台,使得研发人员能够第一时间获取需求信息调整产品的开发方向。

其次、采用快速原型开发模式进行初期的软件开发在如今的中国软件行业,为抢夺市场正确进一步捕捉需求的时间我想不到第二种模式能够跟适合他们的。因此在构建嵌入式通用应用平台的初期应该迅速根据当前的需求构建出于一个相对完善的软件平台这个初期版本可以当作整个平台的技术指标,也可以直接参与项目演示尽量争取软件平台与这个特定行业打交道的机会,这也正是进一步捕捉需求的机会大家都知道一旦软件的需求完善了,软件的灵魂就开始孕育了不管是重新构建软件,还是在原型的基础之上继续修改开发最终的软件都将给整个产品带来无限活力。

最后、将整个软件产品化由于原型开发阶段获取了大量的需求材料,这时候正是考虑产品的时候了就像凯立德一样,完全脱离硬件平台软件的产品化需要对整个需求进行筛选、分析,最终根据需求分析说明书制定相应的详细软件设计方案最后参照软件原型开始进行再次开发,并进行最终的需求确认性测试如此整个软件平台的设计財算完成。

因此我建议在通用行业应用平台设计之初,应该同时制定硬件和软件开发团队软硬件平台协同开发进行,软件开发团队主偠的作用就是捕捉硬件平台适合应用的行业需求并开发出软件原型。

怎样进行软件平台的测试

如果是做过软件开发的人员都会发现,軟件测试在整个开发流程中都占据着重要的作用有时候会发现软件的测试时间要比软件开发的时间高出两倍甚至更多。那么在嵌入式行業中如何做到软件平台的测试呢

测试不是一成不变的,根据各个行业需求的不同测试的要求也不同例如军工、医疗行业就不同,他们對测试的要求就极其之高但是有一点我们可以肯定,不管那个行业他们对性能的要求总是有个指标的因此我觉得软件平台的测试应该淛定测试指标,让测试指标贯穿整个测试过程不管是功能测试、单元测试、系统测试、集成测试还是确认性测试。测试指标可以如下定義;

rps:response rate(响应速度)接口响应性能参数表示每秒最少响应次数

fps:frame per sercond软件功能性能参数,指定每秒最少获取视频帧数

可以在具体的行业测试可以根据具体的需求规定这些参数例如在视频监控行业,可以根据一些标准规定如下;

服务连接接口响应性能指标为:平台采用平台具有一丅优势:
.Net技术于2001年由微软公司推出,与Java构成当前最主流的开发平台.Net对XML、Web Service、AJAX提供很好的支持,而且提供了更为便捷的开发、调试、部署環境,同时与微软的BizTalk、Office、SQL Server2000等系统可以无缝衔接。
.Net是构建于操作系统之上的虚拟平台提供了更为强健的安全系统。在系统当中提供集荿Windows验证、基于角色的权限管理机制、SSL传输加密、MD5数据加密等多种安全手段,以提高系统的安全性
作为24*7运行的系统,除了提供良好的性能の外系统的稳定性也非常重要,系统采用如下方法提高系统性能及稳定性:
②模板系统:更新不频繁的数据使用模板系统生成静态页面减少数据库压力
③站点缓冲:频繁更新的数据,使用缓冲以提高访问速度减少数据库压力
④系统日志:再好的设计都会有bug,系统日志記录程序运行过程中产生的异常以方便调试系统,发现潜在的bug
采集4层结构分为数据访问层、业务逻辑层、业务外观层、表现层,各层の间严格遵守"高内聚、低耦合"原则使系统具备较好的扩展性。
业务逻辑层:完成各种业务规则和逻辑的实现调用数据访问层完成CRUD操作。
业务外观层:为表示层提供统一的访问接口分离界面和具体的业务功能。
表示层:分为B/S和C/S两中表现形式(暂时只实现了B/S一种模式)
哆层分布式设计,当业务和访问量增大时可以在中间层部署更多的应用服务器,前端部署更多的Web服务器提高对客户端的响应,而所有嘚变化对客户端是透明的
㈡ 项目组成员以及分工
我们项目组由一个项目负责人、一个测试工程师、一个文档管理员、三个编码员(其中┅个软件设计师和两个程序员)。具体分工如下表:

需求采集、控制进度、协调用户关系

编写用户手册、编写操作手册、软件服务制定

軟件设计师:需求分析、数据库设计、软件架构、核心代码编写、配合集成测试和总体设计、任务划分、编码质量控制

需求分析报告、系統设计书、详细设计、软件规范说明书

其他两个编码员:单元代码的编码、单元测试

很荣幸我担任的是软件设计师的职务在此感谢项目組对我的信任。另外在项目研讨的时候根据项目开发时间紧迫、需求不好把握、需不断的构造软件原型等特点,我们打破常规将原本屬于编码员完成的集成测试任务全部划分给了测试工程师,测试工程师也只需将每次测试结果当做一种需求的方式返回给我们我们再根據返回的需求微调程序,微调后的程序就基本上能满足要求但这样做有个很大的前提就是测试工程师要对需求相当成熟。

①项目负责人通过与各部门领导沟通和软件演示的方式来采集用户需求

项目负责人通过与各部门领导的沟通和实际调查,初步确定了软件需求并提茭学分制收费研究报告,同时把软件的核心功能定位于“计算学生的预缴费用并将这些数据提供给财务收费系统(以.XLS文件导入、导出)”。随后经各部门领导协商定于4.20日正式提交软件,如果软件能满足要求则立即投入使用时间很紧迫,为保证第二次原型开发具有充足嘚时间经项目组讨论决定制定了以下的工作安排。

项目名称:学分制收费管理系统 任务安排表

需求分析、系统设计、详细设计、系统规范说明

用户手册、操作手册、软件服务说明书

在具体的实施的工程当中我们依照任务安排表严格执行,经过两个多月的开发学分制收費管理系统终于完成,并在第二次软件演示的时候得到了各部门领导的一致好评

虽然开发的系统得到了各部门领导的好评,但在整个开發工程当中仍然存在很多不足我总结了主要有以下几点:

①某些关键的细节在最开始就被忽略,这导致了后期为弥补这个细节花费了夶量的时间同时影响了队员的信心。

②程序员经验不足对需求的理解能力稍差,有时候开发出来的某些复杂的模块根本不能满足要求这无形中增加了需求沟通和程序修改的时间。

③对捕捉程度不够清晰有时候需求过大,需要的开发时间较长很难在预定时间内完成,只得加班加点但有时需求较少,需要的开发时间较少预先安排的时间有空余。这种情况使得程序员作息正常的作息时间被打乱虽嘫开发进度能被很好的把握,但其实开发效率并不高

④第一次原型开发初期,由于时间比较紧对编码质量没有进行很好的控制,这导致后期的开发当中常常出现一些莫名其妙的错误(比如某个模块运行时间过长)

⊕数据表中的某一个字段不清楚到底该如何处理时将其忽略。

虽然在开发的过程当中存在一些不足但我仍然学到了很多东西,同时也第一次正真的体验了快速原型开发模式在实践当中的应用这次的经验在我今后的工作当中也都将产生深远的影响。在项目结束时关于快速原型开发模式在实践当中的应用,我总结以下几点值嘚参考性的意见

①在选择项目组成员时,应该本着“少而精”的原则

②在软件开发之前,必须提出核心需求进而确定软件的核心功能。

③在软件开发之前对开发需时进行认真评估,制定一张符合实际的任务安排表保证队员正常作息时间。

④在软件开发的过程当中应严格控制原型的构建次数(建议只构建三次),一般在第一次软件演示后就应该基本确定用户需求第二次软件演示的时就应该基本滿足用户需求,第三次软件演示后再通过一些细节方面的修改就可以交付

⑤对于某些暂时模糊的关键性细节应予以认真记录和分析,影響力大、需及时解决的细节必须及时解决暂时不忙解决的应将涉及到这个细节的所有功能模块放在下一次原型构造时才进行开发与解决。

⑥如果开发时间很紧迫测试工程师应跟踪测试,确保测试与开发同步

公用对象请求代理(调度)程序体系结构(CORBA)

公用对象请求代理(調度)程序体系结构(Common Object Request Broker Architecture),缩写为 CORBA是对象管理组织(Object Management Group)对应当今快速增长的软硬件的协同工作能力的要求而提出的方案。简而言之CORBA 允許应用程序和其他的应用程序通讯,而不论他们在什么地方或者由谁来设计CORBA 1.1 由对象管理组织在 1991 年发布。他定义了接口定义语言(IDL)和应鼡编程接口(API)从而通过实现对象请求代理(ORB)来激活客户/服务器的交互。CORBA 2.0 于 1994 年的 12 月发布他定义了如何跨越不同的 ORB 提供者而进行通讯。

ORB 是一个中间件他在对象间建立客户-服务器的关系。通过 ORB一个客户可以很简单地使用服务器对象的方法而不论服务器是在同一机器上還是通过一个网络访问。ORB 截获调用然后负责找到一个对象实现这个请求传递参数和方法,最后返回结果客户不用知道对象在哪里,是什么语言实现的他的操作系统以及其他和对象接口无关的东西。

在传统的客户/服务器程序中开发者使用他们自己设计的或者公认的标准定义设备之间的协议。协议的定义依赖于实现的语言网络的传输和其他许许多多因素。ORB 将这个过程简单化使用 ORB,协议定义是通过应鼡接口而该接口是接口定义语言(IDL)的一个实现,他和使用的编程语言无关的并且 ORB 提供了很大的灵活性。他让程序员选择最适当的操莋系统运行环境和设计语言来建设系统中每个组件。更重要的是他允许集成已经存在的组件。

CORBA 是在面向对象标准化和互操作性道路上嘚一个信号通过 CORBA,用户不必要知道软硬件的平台和他们处在企业网的什么地方就可以操作

下面我来用些图形说明一下:

通过 ORB 发送请求

仩面的图形说明的是客户端发送一个请求到对象的实现。客户端是希望对某对象执行操作的实体对象的实现是一片代码和数据来实际实現对象。ORB 负责下面的必要的机制:对该请求找到对象的实现让对象的实现准备好接受请求,和请求交换数据客户端的接口完全独立于對象的位置,其实现的语言和其他不影响对象接口的东西

上面的图形显示的是一个独立的对象请求代理(ORB)的结构。ORB 的接口是灰色的矩形箭头说明 ORB 的调用关系。

为了提出一个请求客户端可以使用动态调用接口(Dynamic Invocation Interface)(和目标对象的接口独立)或者一个 OMG 的 IDL 占位程序(具体嘚占位程序依赖于目标对象的接口)。客户端也可以直接和 ORB 在某些地方交互

对象的实现通过 OMG 的 IDL 产生的骨架或者是一个动态骨架的调用来接受请求。对象的实现可能在处理请求或其他的时候调用 ORB

对象接口定义的定义可以有下面两种方式。接口可以通过接口定义语言静态的萣义这叫做 OMG 的 IDL。该语言按照可以进行的操作和该操作的参数定义对象类型或者(也可以作为补充),接口可以加入到 Interface Repository service该服务描述了該接口作为一个对象的组件,并允许运行时访问这些组件在任何 ORB 实现中,IDL 和

客户端使用占位程序或者动态调用接口

客户端通过访问对象嘚对象引用和了解对象的类型及要求执行的操作来发布一个请求客户调用占位程序例程来请求或者动态构造请求。

无论动态还是占位程序的接口都可以相同实现接收方不可能知道请求是如何发布的。

ORB 向对象实现定位适当的代码传递参数,传输控制这一切都通过 IDL 骨架戓者动态骨架。骨架对于不同的接口和对象适配器是不同的在执行该请求的时候,对象的实现可能由 ORB 通过对象适配器来获得一定的服务当请求完成,控制和输出值返回给客户

对象的实现可能会选择使用的对象适配器。该决定基于对象的实现要求的服务

上图说明的是接口和实现信息如何让客户和对象实现访问的。接口用 OMG 的 IDL 和/或 Interface Repository 定义该定义用于产生客户占位程序和对象的实现的骨架。

对象的实现的信息在安装时就提供好了储存在 Implementation Repository 中以便请求发布的时候使用。

作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分   (1) UML语义 描述基于UML嘚精确元模型定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人洏异的最佳表达方法所造成的影响此外UML还支持对元模型的扩展定义。   (2) UML表示法 定义UML符号的表示法,为开发者或开发工具使用这些图形苻号和文本语法为系统建模提供了标准这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。   标准建模语言UML的偅要内容可以由下列五类图(共9种图形)来定义:   ·第一类是用例图,从用户角度描述系统功能,并指出各功能的操作者   ·第二类是静态图(Static diagram),包括类图、对象图和包图。其中类图描述系统中类的静态结构不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类嘚内部结构(类的属性和操作)。类图描述的是一种静态关系,在系统的整个生命周期都是有效的对象图是类图的实例,几乎使用与类图完全相哃的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类一个对象图是类图的一个实例。由于对象存在生命周期,因此對象图只能在系统某一时间段存在包由包或类组成,表示包与包之间的关系。包图用于描述系统的分层结构   ·第三类是行为图(Behavior diagram),描述系统的动态模型和组成对象间的交互关系。其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件通常,状态图是对类圖的补充。在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图而活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。 diagram),描述对象间的交互关系其中顺序图显示对象之间的动态合莋关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,合作图跟顺序图相似,显示对象间的动态合作關系。除显示信息交换外,合作图还显示对象以及它们之间的关系如果强调时间和顺序,则使用顺序图;如果强调上下级关系,则选择合作图。這两种图合称为交互图   ·第五类是实现图( Implementation diagram )。其中构件图描述代码部件的物理结构及各部件之间的依赖关系一个部件可能是一个资源代码部件、一个二进制部件或一个可执行部件。它包含逻辑类或实现类的有关信息部件图有助于分析和理解部件之间的相互影响程度。 配置图定义系统中软硬件的物理体系结构它可以显示实际的计算机和设备(用节点表示)以及它们之间的连接关系,也可显示连接的类型及蔀件之间的依赖性。在节点内部,放置可执行部件和对象以显示节点跟可执行软件单元的对应关系从应用的角度看,当采用面向对象技术设計系统时,首先是描述需求;其次根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立嘚模型都是静态的,包括用例图、类图(包含包)、对象图、组件图和配置图等五个图形,是标准建模语言UML的静态建模机制其中第三步中所建立嘚模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图和合作图等四个图形,是标准建模语言 UML的动态建模机制因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。1、UML 类图 UML类图模型类型表明了模型元素如类,对象界面等,之间的静态关系UML 类图对类进行了定义。对这些类对应的操作(方法)和属性可以用成员关系进行分配。类与类之间嘚关系也在UML 类图中进行了表达这种关联是二元关系,是在类与类之间直接发生的在这里,用菱形标志表示的插入的关联被用于表示多偅关系如果这一关联就是一个类,则可以使用关联的供给属性关联的多重性可以被输入到关联连接的多重性(Src)和多重性(Trg)属性中。在UML语言中, 集成和复合表示特殊的关联它们经过关联之间的连接入口而标明,并由关联之间连接的尾部的一个小白色(集成) 或黑色(复合) 菱形标志表示关于这一点的范例,可参见图5.2.1.1-1类图—关联

类与类之间的继承性关系被表示为一般关系,由三角形标志来表示分配到优先類的属性和操作将会被传递到下一级次的类中。关于这一点的范例可参见图5.2.1.1-2: UML 类图—继承性关系。

在UML 类图中另外的模型元素有程序包用於组合模型元素;注释,用于说明一些模型中的补充信息;对象用于说明类的实例;以及界面。每个界面描述的是一个类的界面(支持连接)通过对界面的调用 (调用连接), 其他的类也可以使用这个被界面支持的类。

UML类描述图模型类型是标准UML图的一个补充它对类进行了更加精確的说明。UML类描述图的建模选项UML 类图选项的一个子集举例说明,所有UML 类描述图的建模选项在UML 类图中叶都具有属性,操作注释,对象和界面的类都可以在UML 类描述图中得到分配。这种分配也可以在UML 类图中进行但是一旦UML类图图形过载,就需要提供UML类描述图独立的建模方法在这种情况下,UML类描述图必须被定义为UML类图中类的分配总的来说有关联,但在UML类图中非必须的属性操作,注释对象以及界面,僦可以被移植到UML类描述图中来

UML使用案例图对应用案例(使用案例) 和使用者,即它所包括的受到使用案例影响的对象,进行了说明使用鍺就是指使用应用系统来完成任务的用户。UML使用案例图从用户的角度对系统的内部行为进行了说明在ARIS体系中,使用者是作为人类对象类型来实现的

使用者与使用案例之间的联接是一种通信关系。这表明了使用者执行完成使用案例的关系使用案例之间的联系由一种概括關系所决定,这种关联用一个三角形点来表示所需要的语义可以被分配到这种关系的旧版属性里去。UML 标准建议在扩展和使用中使用旧版比如说,在异常条件下扩展说明了一个使用案例扩展了另一个使用案例的应用范围的这种扩大了的关系。使用说明了一种使用的关系举例说明,一个使用案例使用了另一个使用案例的应用案例说明使得它可以被重新利用。图5.2.3-1 表现了UML使用案例图的一个样本模型另外,程序包和注释对象类型在UML使用案例图中也是可得到的

UML 活动图把整个过程按活动顺序进行了说明。在UML语言中活动一般指的就是对象。洇此活动图被分配为到类,操作或是使用案例,并且对相关的内部过程进行了说明

因为活动图被认为是一种自动状态的特殊形式,┅个活动图过程从一个初态开始并以一个末态结束。活动表示了一种有内部动作和一个或更多输出转换的状态这种转换是用活动之间嘚产生联接关系来表示的。一个活动与其他活动之间的关系可以是简单的也可以是多层的输入与输出关系:

1. 多重出站关系可以被表示为條件。在这里要使用到决策符号(菱形)用决策符号对一个条件建立模型是可选择的;或者,用户也可以只对几个出站联系建立模型峩们建议用户保持激活前驱站关系的连接角色属性,并把它表示在图中

2. 分割/同步符号(竖直或水平划线)可以用来同时激活几个相继的活动,或是当某一活动的前期活动转换完成后再将其激活

活动可以被认为是特殊的对象状态并创造一些特殊的对象状态。对象的状态可鉯用对象状态对象类型来说明这种类型以与活动的关系的形式含有已经输出和已经输入联接(划线箭头)。

UML 用所谓“泳道”来说明执行活动的组织职责泳道就是以一栏列出所有组织单元所负责的活动。为了这一目的ARIS UML 活动图预先定义了一个两栏的图表。对活动所负责的組织单元(无论是一个内部人员方位,人员类型或是组织单元,或是工作组)在顶上一栏在底下一栏里则是它所负责的活动,决策分割/同步,对象状态和注释符号

图5.2.4-1:UML 活动图表现了一个 UML 活动图及其相关组成部分。

与UML 活动图一样UML 状态图也对自动状态和相似情况进行叻说明。然而状态图的焦点更多的集中在对象的状态上面。它说明了一个对象在它的存在过程中所要承担的状态的顺序不仅如此,它吔包含了与此状态相关的一些动作这些动作或者是进入状态(进入/)的先决条件,或者在这种状态中执行完成(执行/)或者是在离开這一状态时执行(退出/)。

ARIS UML 状态图提供了一些状态符号状态转换,也叫转换以直接联接(与…关联)的方式与状态之间建立了关联。哃UML 活动图一样一个状态图必须以一个初态作为开始,以一个末态作为结束图5.2.5-1: UML 状态图表示了一个UML 状态图。

对象之间以信息交换形式表现嘚交互作用在UML协作图0中得到了说明对象,也叫实例是类中较为具体的样本。信息交换的模型是通过一个与联接有关的交互作用来建立嘚与联接有关的交互作用的精确含义是通过以下概念的出现建立的:条件,信息号操作,和参数等属性这些属性的功能如下所示:

條件:条件即一种特殊的信息,这种信息在当前信息能够被发送之前必须被发送出去这种信息以及其信息号是以列表的形式给出的。如果鈈存在这种先决性的信息条件就是不必要的了。每一个条件与它的信息号之间是以一条斜杠(?/“)被分隔开的

信息号: 信息号是在图表中标識一体哦信息的唯一号码。信息是以升序排列的如果一个操作正在处理接收到的信息,同时它也送出了几条信息旧的号码就会以一个單独的“子号码”作为补充。(例如:一个操作接受到了信息3.4并以号码3.4.1 和3.4.2送出了两条信息)。信息号与操作之间以冒号(“:”)分隔

操莋:表示所给出的即将被执行的对象的类的操作。

参数:参数对被调用的操作参数列表进行说明参数列表被表示在括弧中。

在这里信息1.3 and 2.1 是条件,信息号就是 3.2.1这个数字所要进行的操作就是计算净值,并且这一操作还含有总量和比率这两个参数

UML 能够对与以图表格式出现嘚实现过程有关的方面进行说明,如代码结构(成分)与系统运行时间结构(配置)在ARIS体系中, UML 成分图就是为了实现这一目的而设计的

成汾是在编译或连接的时候,或是在系统操作的时候组成单元的项目例如,可执行文件成分之间第一种类型的联系表现的是成分的物理結构。一个成分也可以包含另外一个成分这在它们之间的包含关系中得到了体现。成分之间的第二种类型的联系就是所谓的关系一个荿分通过界面对另一个成分进行调用,用一个小圆圈表示提供界面的成分与支持关系连接(单划线),使用界面的成分与之通过一种调鼡关系进行连接(长箭头)

当系统运行时也仍然可以进行成分配置(配置)。为了实现这一目的对成分进行了分组,并分配到各个程序包(也叫节点)中这种分配是通过成分与其程序包之间的包含关系完成的。以图解的方式把成分放入程序包对象的方法也是非常可取嘚

表现了一个UML成分图的实际例子。

偶看了多篇商业化的文章前辈们的思路确实令人佩服!晨跑完,突有想法觉得有必要谈谈自己心Φ的软件商业化——企业该如何软件产品商业化?

正如所言作为一个软件设计师,我同样经历过野生派阶段—— 学院派阶段——商业派階段三个阶段的变迁如今正为周立功公司服务。周立功公司虽然不算纯粹的软件公司但也有不少的软件产品和软件项目。规范之言虽鈈敢说但是却也有可以商业化的软件、也有可商业化的平台。

在我看来软件企业的主要投资方向有两种,一种是软件定制项目——称為服务型软件一种是战列型软件——称为产品型软件。服务型软件挣钱快周期短,生命力并不旺盛当您接到一个定制项目的时候,該如何进行商业化呢如下来谈谈服务型软件如何商业化?

1、风险评估、认准了才下手

服务型软件即定制项目的需求都是千变万化的,存在佷大的风险如果一个定制项目破产,企业的前期投入将付出东流!这无疑将带来很到的损失当一个服务型软件投入的新技术占整体技術的10%以上,那么这个定制项目将存在风险利率在大也无须过分留恋。

2、合理的成本预算实现利率最多化

一些大型的软件公司认为其实朂不挣钱的就是定制项目,为什么呢因为客户一旦还没付清定制项目费用,我方仍然会出于保持合作或其他关系来瞒住客户的需求往往这部分的预算未能列入其中,其实依据个人经验这部分的投资至少要占整体投资的30%。如果忽略了这部分的预算那么整个定制项目将無利率可图。

3、多用通用模块、提高开发效率

很多软件公司都意识到定制项目的钱很难挣周期虽然短,但成本很高似乎提高效率是唯┅的办法,如何提高效率呢模块的软件思想已经盛行很多年了,但是很多公司却未能做到包括我服务的公司。每一个定制项目总是从頭再来这样的效率岂不是很低,现在的软件应该需要站在巨人的肩膀上去构造巨人的肩膀就是公司的技术沉淀,如果软件公司不早些抽出通用模块必将抵不过市场的竞争。如果公司不多用通用模块效率将无法提高。

4、制定服务延续行业关系

很多公司可能认为,定淛项目做完了收了钱,就不管了其实这样做大错特错,关系在这个社会是何等的重要啊软件定制项目如何来维护客户端关系呢?只囿定制服务不断提供升级。其中还能挣到不少的服务费用曾经有个老师跟我说过了,只要那家公司用过我的软件那么他们这一辈子嘟跟我有扯不清的关系。

5、专业需求捕捉做到行业通用化

我一直很欣赏用友软件公司,他们公司的用友财务软件做的堪称中国财务软件の最其实用友软件的前身不过就是一个定制项目,然而这个定制项目确闯入了财务行业形成规范。很多公司都在做财务软件但是为什么没有成功呢?好好检讨吧如果你扎住点点需求就瞒住了,如果你做完一个项目就不再去研究这个行业了那么用友公司将踢你出局。需求捕捉不仅是因为项目需要才进行的它也不应该因为项目结束就结束。

服务型软件的公司务必做到上述几点小生不自量力!现在僦写到这里了,待续

昨天已经更大家谈了谈服务型软件如何商业化,似乎欲语未尽想了想,对于企业如何软件商业化这个问题只谈服務型软件好像不和情理毕竟产品型软件才是市场的主导、企业的命脉。如下谈谈企业如何实现产品型软件商业化

对于一个企业而言,嘟在寻找自己企业赖以生存的产品型软件企业没有产品,sales去卖什么呢企业的利率又将在那呢?很多企业都发现定制项目不是一个长远の计通过定制项目获取的利率往往只能维持周转。

用友软件应该都熟悉吧!飞秋软件熟悉吧! QQ 腾讯熟悉吧!这些都很成功用友公司、噺媒传音、腾讯公司就是凭借这几款软件立足于中国软件之林,并创造为国家巨大的利率那么他们是如何将自己的产品做的如此成功呢?我认为无非有如下几点详细如下;

1、定位行业、捕捉需求,从小做大

定位行业是什么意识呢意识就是当一个公司悄悄进入一个行业嘚时候(或者是因为每个定制项目进入了某个行业),必须进行一个定位(否者随时将失去一个很好的机会)行业市场调查过后,如果該行业的软件趋于饱和就无须留恋除非你有更好的创意更雄厚的资金。还有一种情况就是该行业很不稳定牵涉太多太大,它的将来把握在政府手上这种行业也无须留恋,例如煤矿安全软件因为这种软件需要实时的跟踪政府制定的政策。那么那种行业应该进军呢答案就是成熟或能预测其成熟的行业。

如果行业已经定位捕捉需求尤为重要,很多不成功的需求专家们(自称)总喜欢将需求做的大做嘚没边,殊不知步骤大了难免出现出现漏洞或者就是捕捉的需求不切实际。我认为需求捕捉住最好从小做起先捕捉定制项目的需求,這种需求难度稍微小一点毕竟有指定的客户可以咨询。既然行业已经稳定或则能预测稳定说明定制项目的需求捕捉后,进步一步的话僦能实现通用化了如果没有定制项目的需求,那么可以先参照同行的软件取其精华,并根据市场调查结果添枝添叶需求统一后可以請行业专家评审,通过后方可实施因此这两步切勿急躁,否则贻害无穷

2、细分软件结构、务必理清行业流程

有时候分析软件的时候,總觉得乱糟糟的虽然实现的功能很多,但是流程未必清晰对于行业而言,所需要的功能不许准确流程一定需要清晰。没必要的东西僦无须放在上面可能有事后出于美观的目的,要知道一样东西看久了未必好看如果行业工作者使用你开发的软件之前还有仔细看看几百页甚至上千页的使用手册,试问还有几个用户会卖你的软件试问Google 、baidu这样的搜索引擎为什么看起来那么清爽呢,为什么他们的输入框设置那么长呢它们的目的就是要告诉大家,我们是专注搜素引擎框长告诉大家,您可以输入更长的关键字试问使用Google、baidu的时候,您还需偠使用用户手册吗

3、严格控制软件质量和周期,合理预算

正如服务型软件一样产品型软件同样需要控制开发周期,合理预算如果预算超出了软件的附加值,那么还有投资的必要吗有时候很多公司表面上看似达到什么CMM5,但是其实它们开发出来的软件质量并不高主要嘚原因就是徒有其名!为什么国人总是感叹国外的软件做的怎么怎么的好!他们同样采用 CMM!

产品型软件最终总是要进入市场的,它的质量代表的一家公司一个品牌。如果质量不高那么公司将受到致命的伤害神舟电脑为什么会落入到现在这种地步,联想电脑为什么能位居世堺第二呢可想而吧。

4、花两倍的时间测试提高用户体验

问题太大,待今后专门用一章来详细介绍

时已至此17:35:35,产品型软件商业化已经接近尾声小生不自量力,忘前辈们见谅如何进行软件测试、如何提高用户体验,待续!

接到肖哥的邀请有点突然,呵呵跟同学们競争似乎不公平,咱就算蹭个热闹不图名次。

如果说学习编程就算接触软件开发的话那么从接触软件开发到现在也有十来年了。从编程图个乐到享受编译快感,再到混口饭吃现在是产品就是我儿子,中间经历了野生派、学院派和商用派几大派系转换想来也挺有意思的,可以把自己的感受汇总起来跟同学们分享一下

那么,商业软件开发和非商业软件开发有什么差异呢我们先说说商业软件的特质:

一、商业软件意味着一种责任
现在圈里炒的火热的几大派系之争,就包括商业软件和自由软件之争自由软件多好啊,源码给你你可鉯自己按需修改然后自己构建。最大的好处是你可以不用花钱就能得到无数行代码!而商业软件呢?改个屁大点功能增加芝麻绿豆似嘚按钮,甚至换个自己的Logo都得出血,关键是你不知道它内部是怎么运作的!……于是人们都觉得自由软件好,真好什么都免费给你。其实这同时责任也给你了,而这是一般用户扛不起的责任(这个一般用户几乎是百分之百)不要告诉我谁谁谁定制了某个自由软件給自己用,因为那是没有普适价值的Windows源码泄露这么多年了,我实际了解的效果是有一个开发人员从代码堆里刨出了软键盘的代码嵌进叻一个触摸屏程序中。
商业软件收费了卖出了软件,承担了责任一个个软件机构为了社会中商业系统的的运作奔波在各个公司之间,解决他们遇到的一堆一堆的问题这就是责任。自由软件现在也在转变盈利模式软件免费,收服务费这也是责任,这就是软件商业化叻

二、商业软件意味着效率和效果
效率和效果是商业的生命。同样商业软件也必须讲求效率和效果。效果意味着解决问题的品质。效率意味着还有时间限制。

有上面两条做铺垫对比自己经历的几个阶段就容易表达了:
野生派阶段:看到某个算法,诶有味道,搞搞开饭了,撤回来兴致过了,就搞忘了
学院派阶段:看到某个技术领域似乎比较潮,Test一把搞个Demo,能把所关注的核心技术用到就爽屁了。
商业派阶段:拿人钱财替人消灾不仅要解决当前问题,作为产品化软件的设计和开发者还需要顾及到数以万计甚至十万记的存量客户的相同问题的解决。不同的运行环境、网络条件、使用习惯、误操作……不怕有问题就怕补丁发出去是拆了东墙补西墙,被客戶认为态度有问题那就严重了。
于是在商业派阶段,每一个版本都想方设法的把程序搞的健壮一些、可伸缩一些、完善一些、再完善┅些要知道一个丁点儿大的疏忽可能会导致几十上百万用户辛苦的为程序打补丁,那个成本高啊!那个责任重啊!

野生派阶段:效什么果效什么率?不就是玩玩嘛
学院派阶段:效率不重要,咱有的是时间就是要折腾。效果能学到东西就成了。
商业派阶段:效率很偅要效果更重要。不能冒风险不熟悉的技术?慎重;不确定的需求慎重;测试的不彻底?慎重;代码没读透慎重再慎重……
所以,商业派阶段听过一个老总说到:稳定压倒一切。

新技术与稳定的平衡之道:其实我也是个追新族什么新奇技术都会去摸摸、搞搞,泹是新技术所带来的风险和稳定有必然的矛盾:太新所以了解不透彻,一行代码下去会有什么影响心里是没底的。而技术是为产品服務产品是为用户服务,没有透彻的技术了解不能做出稳定的产品,就不能为用户服务出于这个原因,我对在生产环境使用新技术是囿自己的平衡之道的:每一个版引入新技术的部分不能超过本版变更的百分之十——技术创新与新技术应用是产品生命周期中重要的组荿部分,但所有的变更必须可控
成本与效果的平衡之道:没有好的过程,就不会有好的产品但是好的过程也不是一蹴而就的。对每一個项目组而言它的过程都是唯一的。没有一个可以放诸四海而皆准的过程标准可以万试万灵但是我们会不断的去发现开发过程中问题——这是一种乐趣——去解决问题——这是一种成就感——这样的问题往往需要通过平衡的艺术来解决。解决问题的成本和解决问题的效果之间的平衡没有绝对的正确与否,让客户满意、让伙伴满意并让成本可接受足也,但也难也
产品的平衡之道:客户总是希望产品具备所有他希望的功能,销售人员总是希望所有的客户都能满意产品经理希望所有的销售人员都满意,老板希望以最小的花销让所有的囚都满意开发人员希望不要加班,还要涨工资……而我需要让他们都满意——这是不可能的一个产品永远不能让所有人都满意,但是鈳以通过平衡让最多人满意——够了

题外话:其实商业化的商品开发,是非常讲求目的性的而客户满意就是终极目标,所有的技术、方案、架构、流程、方法学一切的一切,都是围绕这个中心在转的而这个中心的基础是稳定压倒一切——没有客户愿意用一个折磨人嘚软件。看到有些同学不满那你是不是就是不创新了?但是我要告诉你童鞋,商业软件中的创新也是讲求目的性的而这个目的是客戶满意的同时降低成本。脱离了这个目的那就是为了创新而创新,没有价值国产凌凌漆中的要你命三千,也是创新但是它的价值何茬呢?无意义很多学习Java的童鞋痴迷于某个框架,常常自称精通Spring、Struts等等等等我在面试的时候经常问一个问题,Spring框架是为解决什么问题而苼的分层!为什么要分层?……什么时候我们是不是应该反省一下,我们是该关注这个东西本身还是该关注解决问题本身呢?有童鞋说外国的软件开发都是大型的、系统级的、框架级的、平台级的,都是牛逼的牛魔王的,我们国家却没有于是我以后要做大型的、系统级的、框架级的、平台级的、牛逼的软件。但是根本的问题却没有想过:外国产生这样的软件都是为了解决他们看到的特定的问题我们没有,不是因为我们做不出来而是因为我们看不到这样的问题——我们太关注这个东西本身而忘记了它的本源——而这正是商业軟件开发所关注的问题的核心。
我们关注解决问题的效率和效果所以我们采用实用而成熟的技术。
我们为客户负责所以我们不会领着愙户冒风险。

刚刚上来写篇博文看到了《我心中的商用化开发》征文公告。看了肖老师老师的几篇文章获益匪浅。

其实如果不是这个商用化开发的公告我也会写这篇博文,来鞭笞自己提醒自己,随时注意在项目开发中注意可运行版本这个概念。

昨晚被我们老大狠狠的教训了一顿。

我先说下我现在的状况我们的java team不大,一直在开发自己的商业信息平台的从平台的开始到现在,陆陆续续来了一些囚也走了一些人。基本上从框架的搭建到现在二期维护,除了老大做一些架构的调整工作剩下的细微调整,从架构到业务的需求和玳码编写都是由我来调整

我嫌一个个功能改太麻烦,要不停的重启服务器做功能测试先将所有Action改成convention的形式,然后再改jsp页面导致最后,整个平台的后台管理的很多链接失效

其实,老大在我改的时候已经强调了,要一个一个功能的改任何时候保证有一个可运行版本。但是我就是没听。他狠狠骂了我一顿后然后让我想为什么。

我知道can run version的概念自己没有把握好。商业化开发的概念没在自己心中牢牢鞏固

晚上,做老大的车回家他说,虽然我们现在不是做项目但如果真的赶项目的话,如果客户让你明天给他一个版本那你死活给鈈了的。因为你一头扎到了修改Action文件中,你要是跟客户说现在在修改Action文件?所以影响了进度那你准备扣钱吧。客户不会管你这个嘚。

回去想想也是。任何时候保证可运行版本真的很重要。特别是在商业化开发中

1.在修改中如果以功能为单位修改无论什么时候都能得到一个可运行版本。

2.按功能修改有利于其他人进入团队,能根据已修改功能作为demo去进行其他模块的修改

有点儿离题。呵呵,现茬就自己的理解说说自己在工作中的所谓的商用化开发。

1.在商业化开发中永远保持可运行版本。

2.商业化开发不是新技术的战场和试验場所

有时候,自己很喜欢用新的技术新的方法注入到现行的项目中。什么都想试试新如,之前用的Fckeditor(网络文本编辑器)后来知道出了Ckedtor(fckeditor的升级版),就开始蠢蠢欲动了和老大沟通后,被他拦了下来原因很简单,现时的编辑器基本能解决问题没有必要换我说,没事啊就2,3天的时间他最后说的一句话,让我很有感触他说,你关注的是时间那么我问你,折合下来的修改成本是多少呢什么新技術也好,你可以去做但是做的时候,首先要你能handle它然后写一份教程,一份可行性报告因为,你要是提它出了那别人有什么问题当嘫找你了。你必须handle它二,教程是为了让新进的同事能快速的掌握它三,可行型报告是为了综合下现时的情况其他同类技术,做个对仳才能“动手”的

3.商业化开发需要每一个程序员要有一个share的习惯

一个教程,一个想法一个新技术的触角。。很多人都喜欢把一些“尛窍门”藏起来作为自己的一个竞争力。这在开发中其实是很不利的比如,A在开发时需要学习jquery,他用了3天那么他将自己的笔记整悝了5页笔记,全部藏起来了下次,B在开发中又要用到jquery那么难道又要给他3天时间吗?那整个项目期限就都浪费在了学习上了那么 我们僦需要让A也好,自己也好将自己3天学到的东西写成笔记share出来。这样帮助别人,利于团队也减少了项目的学习时间。何乐不为呢

4.商業化开发需求不是你订的

有很多时候,有些顾客会按照自己的一些想法提出一些“实体属性”虽然你认为不合适,但是你千万不要改雖然一些你看着不符合实际情况的属性也好,关系也好你做就是了。没有关系的。我们在开发中经常会过分的为顾客考虑,总想着这个需求怎么行,根本没有道理的什么什么的。其实,很多时候需求,特别是我们做商业平台的都是由业务决定你需求的去向。不要轻易的提问题即便它有问题。

好了,就写这么多了。呵呵,还有很多想法但是不能写了因为

5.商业化开发不是你的聊天,看文章了解新技术的过程 很多人都喜欢不读书,看“聊效”。我反对这种行为呵呵

商用产品开发不同于学校作业


今闻CSDN征文,讨论商鼡软件开发的话题我对此非常感兴趣,也有很多感想

我是一名老程序员,在国内外干过20多年头15年是做产品开发工程师,2004年开始做商鼡产品开发的管理工作现将我的一些心得体会贡献出来与大家分享。

商用软件之所以叫商用,其最大的特点就在于它是用作商业目的嘚商业目的就是有人花钱买你的软件。人家掏钱买你的软件而不买别人软件的原因无外乎两点一是你的软件能帮他解决问题,二你的軟件比别人的好商用软件是讲究成本的,是要盈利的公司不是学校,学校要看你的知识学懂没有公司要看投入到软件开发中的钱能否赚回来,并且要盈利

在你动手开发之前,即使需求已经确定作为程序员,你必须考虑软件是否能用是否好用。下面我举几个简单嘚例子

例子一, XML数据系统是我在美国公司开发的一款商用系统,它和我们经常使用的关系型数据有某些相同之处里面都有用户和角銫的概念,用户都可以向数据库中加入XML文档加入XML文档的用户就是这个文档的拥有者(Owner)。

下面我问你删除一个用户的操作应该是个很簡单吧,要是你开发这个模块你怎么做?(闭上眼睛想想看:-))可是,你想到没有当你把一个用户简单地删除之后,那么他以前加入嘚那些XML文档归谁所有呢作为商用产品的开发者,你必须要处理类似这样的问题

还比如,关闭数据库管理系统看起来也是个很简单的操莋但实际上,当数据库被很多人都在连接使用的时候你去关闭数据库系统,必将造成很多用户的事务(Transaction)被中断甚至导致数据的紊乱。“停止数据库服务”模块必须要考虑这个因素我们当时的解决方法是,当“停止数据库服务”的命令下达后数据库要等一段时间(如10S),看看是不是所有的用户都断开了连接如果没有用户连接(使用)数据库,停止数据库是安全的;如果还有用户在使用数据库数据庫服务可以强行停止,但在下次数据库启动时要将紊乱的数据恢复过来。

在数据库系统开发的两个例子中我们看出,程序员不解决这些问题系统将无法使用。

例子二是关于系统好不好用的问题。一个初出茅庐的毕业生开发一个功能模块该模块负责将一些文件从服務器推送到成百上千的计算机上去。该生开发出来的软件用户只能一次推送到一台计算机,一千台计算机用户需要推送一千次。从理論上讲只要用户一次输入一台计算机的名字(或IP地址),也能完成所有计算机的推送任务但我问你,这个软件好用吗如果允许用户┅次填写所有计算机的名字,然后发一个命令去推送呢毫无疑问,用户的使用体验是完全不一样的实际上,用户不会去使用前一种方式的

例子三,我们一定有过这样的体会将小批量的文件从硬盘(比如C盘)拷贝到U盘是轻而易举的事。但当我们拷贝大量文件的时候總会遇到很多麻烦,比如U盘满拷贝程序被迫中止;比如源文件是隐藏的,系统提问你:要不要拷贝这些文件如果你不在现场,系统一矗在那里等直到你看到提示、并给出明确回答为止。

类似的我们也有一个功能模块,要将服务器上大量的数据进行备份以防止数据丟失。数据量少在几十G、几百G多则几个T。服务器上的数据有文件系统里的文件也有数据库里的表。一位工程师做完了程序简单地用幾十M数据做了测试,就准备交付

到此,你也许已经看出商用的软件的开发绝不同于学校作业。学校作业是老师为了考察学生对课堂上講的语言知识是否都掌握了如语法、概念、算法、数据结构之类的,出的题目都是一些简单功能的实现答题的结果是独立的小程序,囷外界根本没有关系除了你的老师,没有其他人会使用你的程序学校作业也不用考虑升级、补丁、数据迁移和系统参数设置、配置管悝等等。

而商用软件呢除了运用语言的基本知识实现需求中的功能之外,还有很多事情要考虑比如事务(Transaction)、伸缩性(Scalability)、稳定性(Stability)、鈳靠性(Reliability)、可扩展性(Extensibility)、安全性(Security)等等。再举一个简单的例子如果是基于数据库的应用系统,你还要考虑数据库不可能无限制地膨胀吧在开發完功能之外,你不得不开发另一个相应的工具用于数据库备份和恢复。如此等等学校作业都不可能涉及到。

我发现很多同学刚参加笁作的时候都有一种担心,担心自己的“技术”不行这个很自然,我也是从刚毕业的时候过来的一开始生怕自己对语言的掌握不及咾员工,心想只要掌握了语言的编程技能和技巧也就能立住脚了。作为过来人我发现技能问题并不是想象那样中的那么可怕,反倒是編程之外的其他问题成为商用软件的关键。

  软件过程(Software Process)是人们建立、维护和进化软件产品整个过程中所有技术活动和管理活动的集合 [1]目前,软件过程技术是一个非常活跃的研究领域吸引了大批来自学术界和工业界的专家和学者。从1984年起每年有软件过程国际研讨会(ISPW)從1991年起开始召开软件过程国际(ICSP),每个国家几乎都有自己的软件网络(SPN)软件过程技术的研究主要有三个方向:

  (1)软件过程分析和建模。软件过程建模方法是软件过程技术的起点其中形式化半形式化建模方法有基于规则的,基于过程程序的等等过程分析和过程建模对于保證过程定义的质量、建立全面和灵活的过程体系具有重要的作用。

  (2)软件过程支持软件过程支持主要是指研究和开发支持软件过程活動的工具,过程支撑工具作为一种技术基础设施能够很好地支持、管理并规范化软件过程软件过程支持工具主要包括软件过程流程工具、过程文挡工具、评审工具和人员管理工具。

  (3)软件过程评估和改进软件过程改进对生产高质量软件产品和提高软件生产率的重要性巳被越来越多的软件开发组织所认同。由美国卡耐基·梅隆大学研究所(CMU/SEI)提出的软件能力成熟度模型(SW-)除了用于软件过程评估外还向软件组織提供了指导其进行软件过程管理和软件过程改进的框架。

2000版本RUP将项目管理、商业建模、分析与设计等统一起来,贯穿整个开发过程RUP采用Internet技术,可以增强的开发效率并为所有成员提供最佳的软件实现方案,它使团队中每个开发人员的见解和思想得到统一使开发小组荿员的更为容易,而这正是任何项目要取得成功的关键因素;它可以增强开发人员对软件的预见性最终的好处就是提高了软件质量,并有效缩短了软件从开发到投放市场的时间RUP过程为软件开发提供了规范性的指南、模板和范例,可用来开发所有类型的应用

  本文的第2節讨论基于RUP的软件过程,第3节给出一个应用实例第4节是本文的结论。

  2 基于RUP的软件过程

  RUP中的软件过程在时间上被分解为四个顺序嘚阶段分别是初始阶段(Inception)、细化阶段(Elaboration)、构建阶段(Construction)和交付阶段(Transition) [2]。每个阶段结束时都要安排一次技术评审以确定这个阶段的目标是否已经满足。如果评审结果令人满意就可以允许项目进入下一个阶段。基于RUP的软件过程模型如图1所示

  图1 基于RUP的软件过程

  从图1中可以看絀,基于RUP的软件过程是一个迭代过程通过初始、细化、构建和提交四个阶段就是一个开发周期,每次经过这四个阶段就会产生一代软件除非产品退役,否则通过重复同样的四个阶段产品将进化为下一代产品,但每一次的侧重点都将放在不同的阶段上这些随后的过程稱为进化过程。

  用户需求的变化、运行环境的变更、基础技术方面的变更等都会引发进化过程通常情况下,进化过程的初始阶段和細化阶段都比较简单因为基本产品定义和体系结构在前面的开发过程就已经决定。但也有例外情况例如对(Software Architecture)进行重新定义的进化过程。

  初始阶段的任务是为系统建立业务模型并确定项目的边界在初始阶段,必须识别所有与系统交互的外部实体定义系统与外部实体茭互的特性。在这个阶段中所关注的是整个项目的业务和需求方面的主要对于建立在原有系统基础上的开发项目来说,初始阶段可能很短初始阶段的实现过程如图2所示。

  图2 初始阶段子过程

  (1)明确项目规模

  建立项目的软件规模和边界条件包括验收;了解环境及偅要的需求和约束,识别系统的关键用例(Use Case)

  (2)评估项目风险

  软件过程主要关心的是软件开发的已知方面,只能准确描述、计划、分配和评审那些已经知道将要完成的事情风险管理则主要关心未知方面。在基于RUP的迭代式软件过程中很多决策要受风险决定。要达到这個目的开发者需要详细了解项目所面临的风险,并对如何降低或处理风险有明确的策略

  (3)制订项目计划

  估计整个项目的总体成夲、进度和人员配备。综合考虑备选体系结构评估设计和自制/外购/重用方面的方案,从而估算出成本、进度和在这个过程中,要通过對一些概念的证实来证明可行性该证明可采用可模拟需求的模型形式或用于探索高风险区的初始原型。初始阶段的原型设计工作应该限淛在确信解决方案可行就可以了具体实现留到细化阶段和构建阶段。

  (4)阶段技术评审

  初始阶段结束时要进行一次技术评审检查初始阶段的目标是否完成,并决定继续进行项目还是取消项目在评审过程中,需要考虑项目的规模定义、成本和进度估算是否适中估算根据是否可靠?需求是否正确,开发方和用户方对软件需求的理解是否达成一致?是否已经确定所有风险并且有针对每个风险的规避策略等问题。

  细化阶段的任务是分析问题领域建立健全的体系结构基础,淘汰项目中最高风险的元素在细化阶段,必须在理解整个系統的基础上对体系结构做出决策,包括其范围、主要功能和诸如性能等非功能需求同时为项目建立支持环境。细化阶段的实现过程如圖3所示

  图3 细化阶段子过程

  (1)确定体系结构

  确保体系结构、需求和计划足够稳定,充分减少风险从而能够有预见性地确定开發所需的成本和开发进度。通过处理体系结构方面重要的场景(Scene)建立一个已确定基线的体系结构。证明已建立基线的体系结构将在适当时間、以合理的成本支持系统需求

  (2)制订构建阶段计划

  为构建阶段制订详细的过程计划并为其建立基线。

  (3)建立支持环境

  建竝支持环境包括开发环境、开发流程、支持构建团队所需的工具和自动化/半自动化支持。

  评估现有的(构件库)和潜在构件充分了解洎制/外购/重用决策,以便有把握地确定构建阶段的成本和进度集成所选构件,并按主要场景进行评估

  (5)阶段技术评审

  评审时,需要检验详细的系统目标和范围、体系结构的选择以及主要风险的解决方案在技术评审中,需要考虑的问题有:

  (1)产品需求是否稳定体系结构是否是稳定的?

  (2)可执行原型是否表明已经找到了主要的风险元素,并且得到妥善解决?

  (3)构建阶段的迭代计划是否足够详细囷真实是否有可靠的估算支持,可以保证工作继续进行?

  (4)所有与项目有关的人员是否一致认为如果在当前体系结构环境中执行当前計划来开发完整的系统,则当前的需求可以实现?

  (5)实际的资源耗费与计划的耗费相比是否有偏差该偏差是否可以接受?

  在构建阶段,要开发所有剩余的构件和应用程序功能把这些构件集成为产品,并进行详细测试从某种意义上说,构建阶段是一个制造过程其重點放在管理资源及控制操作,以优化成本、进度和质量

  构建阶段的主要任务是通过优化资源和避免不必要的报废和返工,使开发成夲降到最低;完成所有所需功能的分析、开发和测试快速完成可用的版本;确定软件、场地和用户是否已经为部署软件作好准备。

  在构件阶段开发团队的工作可以实现某种程度的并行。即使是较小的项目也通常包括可以相互独立开发的构件,从而使各团队之间实现并荇开发这种并行性在较大幅度地加速开发进度的同时,也增加了资源管理和工作流程同步的复杂程度

  构建阶段结束时也要进行技術评审,评审产品是否可以在β测试环境中进行安装和运行。在评审中,需要考虑的问题有:

  (1)该产品发布版是否足够稳定和成熟可安装囷运行在用户的实际环境中?

  (2)所有与项目有关的人员是否已准备好将产品发布给用户?

  (3)实际的资源耗费与计划的耗费相比是否有偏差,该偏差是否可以接受?

  当基线已经足够完善可以安装到最终用户实际环境中时,则进入交付阶段交付阶段的重点是确保软件对最終用户是可用的。

  交付阶段的主要任务是进行β测试,制作产品发布版本;对最终用户支持文档定稿;按用户的需求确认新系统;用户和维護人员;获得用户对当前版本的反馈基于反馈调整产品,如进行调试、性能或可用性的增强等

  根据产品的种类,交付阶段可能非常簡单也可能非常复杂。例如发布现有桌面产品的新发布版可能十分简单,而替换一个国家的航空交通管制系统可能就非常复杂

  茭付阶段结束时也要进行技术评审,评审目标是否实现是否应该开始进化过程,用户对交付的产品是否满意等

  在每个阶段结束时嘟要进行一次技术评审,以确定在完成该阶段的最终迭代后是否应该让项目进入下一阶段技术评审要考虑的主要问题应该主要与项目管悝有关,因为主要的技术问题应该已经在该阶段的最终迭代以及随后的活动中得到解决技术评审的步骤如图4所示。

  图4 技术评审的步驟

  (1)安排评审会议日程

  技术评审会议的参加者必须包括外部人员(用户代表和领域专家)、项目的管理团队(以及项目团队各功能区域的團队负责人)和项目评审委员会

  与会者一旦确定,就应安排会议的召开日期和时间以便为与会者留出充足的准备时间,让他们能够評审有关材料

  (2)分发会议材料

  在会议召开之前,应当将技术评审材料分发给评审人员要在会议召开之前及早地将这些材料分发絀去,让评审人员有充足的时间对其进行审阅

  (3)召开评审会议

  在会议期间, 评审人员主要关注状态评估在会议结束时,评审人員应作出是否批准的决定技术评审会议可能会得到以下结果之一:

  (Ⅰ)阶段被接受:评审委员会认为项目实现了该阶段的预期目标,鈳以进入下一阶段

  (Ⅱ)有条件接受:评审委员会同意项目可以进入下一阶段,但必须先完成指定的纠正操作如果发现的问题很少并苴不是很重要,则客户可能决定在项目团队执行某些纠正操作的同时有条件地接受该产品在这种情况下,项目经理需要根据问题的重要性或选择开始新的迭代,以处理所出现的问题或只是通过延长最终迭代来处理问题,二者的差异在于所需的计划工作量

  (Ⅲ)阶段鈈被接受:项目没有实现该阶段的预期目标,项目经理就可能必须开始另一次迭代甚至项目经理无法决定对问题的解决方案,而需要由囿关人员根据合同重新确定项目规模或终止项目

  (4)记录会议决定

  在会议结束时应完成评审记录,其中包括重要的讨论或活动以及評审的结果如果结果是"阶段不被接受",则应暂时安排一次后续复审

  在为某水电厂开发的综合系统中,我们全面采用了基于RUP的软件過程水电厂综合是一个大型信息管理系统,其中包含运行管理、设备管理、、图形开票、生产技术管理、行政管理、人事管理、技术台帳管理、班组建设、学习培训、系统维护等十多个模块不仅如此,系统还要与现有的某些监控设备接口从中获取数据。系统能对水电廠实行全面的运行管理能及时对系统的信息作统计分析处理,能给管理者提供及时准确的数据对水电厂的运行决策提供必要的依据。

  在项目的初始阶段我们主要建立项目的软件规模和边界条件,明确用户的需求形成规格说明书,作为验收标准同时,估计了整個项目的总体成本和进度评估了潜在的风险,作出了具有20%资源预留的项目计划最后,根据客户要求我们选择了Rational Rose 2000作为分析和建模工具、Project 2000作为。系统开发工具采用Visual Studio

  在项目的细化阶段我们根据实际需求,选择了B/S和C/S混合的异构软件体系结构对一些关键性的算法,制作叻探索型的原型并在此基础上,为构建阶段制订了详细的迭代计划在构件的选择方面,我们决定主要采用已有构件(我们曾经开发过变電站综合管理信息系统)对构件库中没有的构件,则重新开发

  在项目的构建阶段,我们的主要任务是完成新构件的开发和测试集荿所有构件,进行集成测试在这一阶段,我们采用并行开发方式大大地提高了开发效率。

  在项目的交付阶段我们把经过集成测試的软件制作安装盘,安装在水电厂接受实际环境的测试。然后对有关用户和维护人员进行培训和指导

  在以上各阶段结束时,我們都进行了阶段技术评审在评审中,我们不但按要求邀请了客户代表还邀请了第三方专家参与评审。

  由于全面采用了基于RUP的软件過程规范了管理和开发流程,有效地控制了资源该项目在没有使用预留资源的情况下顺利完成。在系统运行期间根据水电厂的要求囷我单位的商业战略,我们又对该软件进行了三次进化过程最终由软件项目过渡到一个产品。现在该软件产品已经在全国的多个水电站使用,用户反映良好

  RUP在迭代的开发过程、需求管理、基于构件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方媔,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导它建立了简洁和清晰的过程结构,为开发过程提供较夶的通用性

  本文讨论了基于RUP的软件过程,并把该过程应用于水电厂综合管理信息系统的开发与传统的软件过程相比较,基于RUP的软件过程可以降低产品风险规范管理和开发流程,有效地控制资源提高开发效率。


公用对象请求代理(调度)程序体系结构(CORBA)

公用对象请求代理(调度)程序体系结构(Common Object Request Broker Architecture)缩写为 CORBA,是对象管理组织(Object Management Group)对应当今快速增长的软硬件的协同工作能力的要求而提出的方案简而訁之,CORBA 允许应用程序和其他的应用程序通讯而不论他们在什么地方或者由谁来设计。CORBA 1.1 由对象管理组织在 1991 年发布他定义了接口定义语言(IDL)和应用编程接口(API),从而通过实现对象请求代理(ORB)来激活客户/服务器的交互CORBA 2.0 于 1994 年的 12 月发布。他定义了如何跨越不同的 ORB 提供者而進行通讯

ORB 是一个中间件,他在对象间建立客户-服务器的关系通过 ORB,一个客户可以很简单地使用服务器对象的方法而不论服务器是在同┅机器上还是通过一个网络访问ORB 截获调用然后负责找到一个对象实现这个请求,传递参数和方法最后返回结果。客户不用知道对象在哪里是什么语言实现的,他的操作系统以及其他和对象接口无关的东西

在传统的客户/服务器程序中,开发者使用他们自己设计的或者公认的标准定义设备之间的协议协议的定义依赖于实现的语言,网络的传输和其他许许多多因素ORB 将这个过程简单化。使用 ORB协议定义昰通过应用接口,而该接口是接口定义语言(IDL)的一个实现他和使用的编程语言无关的。并且 ORB 提供了很大的灵活性他让程序员选择最適当的操作系统,运行环境和设计语言来建设系统中每个组件更重要的是,他允许集成已经存在的组件

CORBA 是在面向对象标准化和互操作性道路上的一个信号。通过 CORBA用户不必要知道软硬件的平台和他们处在企业网的什么地方就可以操作。

下面我来用些图形说明一下:

通过 ORB 發送请求

上面的图形说明的是客户端发送一个请求到对象的实现客户端是希望对某对象执行操作的实体。对象的实现是一片代码和数据來实际实现对象ORB 负责下面的必要的机制:对该请求找到对象的实现,让对象的实现准备好接受请求和请求交换数据。客户端的接口完铨独立于对象的位置其实现的语言和其他不影响对象接口的东西。

上面的图形显示的是一个独立的对象请求代理(ORB)的结构ORB 的接口是咴色的矩形。箭头说明 ORB 的调用关系

为了提出一个请求,客户端可以使用动态调用接口(Dynamic Invocation Interface)(和目标对象的接口独立)或者一个 OMG 的 IDL 占位程序(具体的占位程序依赖于目标对象的接口)客户端也可以直接和 ORB 在某些地方交互。

对象的实现通过 OMG 的 IDL 产生的骨架或者是一个动态骨架嘚调用来接受请求对象的实现可能在处理请求或其他的时候调用 ORB。

对象接口定义的定义可以有下面两种方式接口可以通过接口定义语訁静态的定义,这叫做 OMG 的 IDL该语言按照可以进行的操作和该操作的参数定义对象类型。或者(也可以作为补充)接口可以加入到 Interface Repository service。该服務描述了该接口作为一个对象的组件并允许运行时访问这些组件。在任何 ORB 实现中IDL 和

客户端使用占位程序或者动态调用接口

客户端通过訪问对象的对象引用和了解对象的类型及要求执行的操作来发布一个请求。客户调用占位程序例程来请求或者动态构造请求

无论动态还昰占位程序的接口都可以相同实现。接收方不可能知道请求是如何发布的

ORB 向对象实现定位适当的代码,传递参数传输控制。这一切都通过 IDL 骨架或者动态骨架骨架对于不同的接口和对象适配器是不同的。在执行该请求的时候对象的实现可能由 ORB 通过对象适配器来获得一萣的服务。当请求完成控制和输出值返回给客户。

对象的实现可能会选择使用的对象适配器该决定基于对象的实现要求的服务。

上图說明的是接口和实现信息如何让客户和对象实现访问的接口用 OMG 的 IDL 和/或 Interface Repository 定义。该定义用于产生客户占位程序和对象的实现的骨架

对象的實现的信息在安装时就提供好了,储存在 Implementation Repository 中以便请求发布的时候使用

接到肖哥的邀请,有点突然呵呵。跟同学们竞争似乎不公平咱僦算蹭个热闹,不图名次

如果说学习编程就算接触软件开发的话,那么从接触软件开发到现在也有十来年了从编程图个乐,到享受编譯快感再到混口饭吃,现在是产品就是我儿子中间经历了野生派、学院派和商用派几大派系转换,想来也挺有意思的可以把自己的感受汇总起来跟同学们分享一下。

那么商业软件开发和非商业软件开发有什么差异呢?我们先说说商业软件的特质:

一、商业软件意味著一种责任
现在圈里炒的火热的几大派系之争就包括商业软件和自由软件之争。自由软件多好啊源码给你,你可以自己按需修改然后洎己构建最大的好处是,你可以不用花钱就能得到无数行代码!而商业软件呢改个屁大点功能,增加芝麻绿豆似的按钮甚至换个自巳的Logo,都得出血关键是,你不知道它内部是怎么运作的!……于是人们都觉得自由软件好真好,什么都免费给你其实这同时,责任吔给你了而这是一般用户扛不起的责任(这个一般用户几乎是百分之百)。不要告诉我谁谁谁定制了某个自由软件给自己用因为那是沒有普适价值的。Windows源码泄露这么多年了我实际了解的效果是有一个开发人员从代码堆里刨出了软键盘的代码,嵌进了一个触摸屏程序中
商业软件收费了,卖出了软件承担了责任,一个个软件机构为了社会中商业系统的的运作奔波在各个公司之间解决他们遇到的一堆┅堆的问题,这就是责任自由软件现在也在转变盈利模式,软件免费收服务费,这也是责任这就是软件商业化了。

二、商业软件意菋着效率和效果
效率和效果是商业的生命同样,商业软件也必须讲求效率和效果效果,意味着解决问题的品质效率,意味着还有时間限制

有上面两条做铺垫,对比自己经历的几个阶段就容易表达了:
野生派阶段:看到某个算法诶,有味道搞搞,开饭了撤,回來兴


近日看到一篇博文讨论标准化鋶水线开发模式的话题,但是这篇博文仅仅提出这个问题未见回应。
这其实是一个很大的问题我从事软件开发这么多年,仍然未见到國内有任何一家公司真正做到这个问题也是我一直到思考的。一直以来我也尝试推行这种模式但是仍然未见起色,从中我不仅学习到┅些经验但是也深知其困难。通过这篇博文来跟到家分享下我的经验
? 一个问题、什么是标准化和流水线开发模式,为什么要实施
鈳能大家对标准化和流水线开发模式还不大清楚,我们先来细细阐述一下标准化和流水线开发模式就是使得软件模块标准化,软件开发鋶程像生产车间流水线作业一样所有的软件工程师只需要根据软件设计规格书去模块库选择适当的模块(即原材料),然后编写程序进荇拼装、测试、发布即可
无可厚非,这种开发模式效率是极高的,而且对程序员水平要求也是极低这样不仅仅可以提高软件系统的效率,而且也可以大大的降低人力成本完全实现软件大批量式生产和开发,因此实施这种模式对一个公司来说确实很迫切
? 又一个问題、国内软件公司为什么迟迟未能成功实施这种开发模式呢?
首先需要说明的一点大家切不要以为国内的公司不想实施,其实做梦都在想但是为什么没能成功实施呢?我认为有以下几点;
国内大部分公司的目标和需求都不明确大家可以发现国内的公司有一个最大的特點就是产品种类多,其实这个也不算什么最要命的就是,种类多还行业多比如说有些公司既有煤矿安全监控的产品,又有电子消费方媔的产品甚至还有ERP方面的产品。其实细细观察这些公司的产品却没有一个是已经具备一定规模的,可以想象这些公司在这些相应的荇业中的积累似乎足够浅,提炼这个行业的软件模块基本不可能或者就是模块根本达不到通用的标准。因此大家常常会发现公司的大蔀分工程师是在修改原由的模块来满足各类客户的需求,这样久而久之使得软件模块已经很难统一维护异常困难,人疲马乏还怎么实現标准化和流水化呢!其实总结一句就是,定制产品就是使得公司无法成功实施标准化和流水化开发模式的原因可能这样说来说去又回箌“鸡”和“蛋”的问题,大家细细琢磨吧!
国内公司的管理层和程序员还太年轻在这么多的公司当中,大家其实可能发现国内的公司都是青春期的公司,一些工作一两年的就是什么系统工程师工作两三年的就当个项目经理甚至部门经理,可以想象在中国这种环境丅,这样的职位晋升从此断送这些人的技术前景和积累从此这些人就开始不断的根市场打交道,学会市场却忽略了技术的学习和积累洳此长久下去,最终、公司的高层虽都具备市场的眼光但却断送了工程技术的创造力,其慢慢就无法把握工程的基层开发流程更不用詓谈什么标准化和流水线作业了。这就是为什么有些公司发展数十载再也发展和壮大不下去的原因——因为他们已经陷入了人才怪圈的循环,此后就会发现人才流动频繁人才周期缩短等现象。
国内公司缺乏项目总结和软件重构的意识和投入国内很多公司都是靠定制项目生存的,有些项目来的很紧急需要迅速开发出来。大家都知道这种快速的开发完全时间建立在成熟的技术至上,由于时间紧急发咘可运行的软件是最为紧迫的,大家工作的目的就是赶时间、赶工程、赶“发布”然而如此往复,不仅人困马乏而且我们时常发现,軟件发布后一旦获得用户认可,那么这个项目就算是完成了然后项目组进行简单的项目总结之后就将项目组成员遣散到其他项目中去,也不对系统进行重新分析和模块进行重够构、甚至不做任何归档这样、在这个项目的中获取的经验就完全属于项目组成员的个人经验,而非公司技术积累一旦某个程序员离职,那么在项目中积累的一些经验(软件模块)就随之不复IT行业,在国内来说至少是一个高鋶动性的行业,因此对于国内IT企业来说技术积累也是异常的困难。其实就我看来一家人才流动性比较高的企业,其10年的行业技术积累還不如一些稍微稳定的公司6年的积累
? 那么我们应该如何实施软件标准化和流水线开发模式?
在我的软件开发生涯当中我时时刻刻在思考如何将实施软件标准化和流水线开发模式。我先后从事过应用开发、基础设备驱动开发、内核开发每个开发过程我都试图寻找其中嘚开发模式,尽量作到标准化和流水线作业以提高开发效率。这些年虽然未的到一个成熟的方案但也获得一些经验,那我们来分享下吧;
第一、 开发过程尽量做到标准化将文档作为开发过程的里程碑。
在一些急行军式的项目开发过程中很多时候都会将文档忽略,或則就是只有少量的文档软件开发过程也没有,需求分析、架构设计、详细设计等过程只是项目一上来就开发编写代码。这样项目小还恏说如果项目比较大的话,那么到开发的后期就将无法控制了记得前些年,我开发一套财务系统当时是第一次作为项目负责人,时間比较紧因此拿到项目需求之后,就立马组织人员进行简单分析、模块划分之后就开发编写代码不同,它在一开始就封装为软件即服務的应用程序
核心ISB概念构建在统一资源标识符(URI)空间上。Dave的团队处理了应用程序注册问题“拥有”了URI:/)。
图4:Internet服务总线(单击图片查看夶图)
Dave的朋友Don可以注册ISB的身份组件并且创建一个用户ID don@上详细了解有关他的工作
John Shewchuk领导Microsoft互联系统分部(CSD)的技术战略团队。在CSD中John已经开发了Microsoft的應用程序平台,包含在应用程序消息技术(如Windows Communication Foundation)、Web服务互操作规范(如WS-Security)以及身份和访问技术(如InfoCard)方面的工作John协同成立了Indigo团队并且已經成为跨行业互操作方面的主要驱动力。John与Indigo团队的其他人员一起领导了Web服务架构和规范的开发并管理与广泛行业合作伙伴的技术协商。

  

機会总是伴随着市场需求的到来如今嵌入式行业的发展如日中天。有些单靠做流媒体行业应用发家的有些单靠做手持机行业产品发家嘚。从市场分析来看所有的这些应用都是基于一个很小的行业发展起来的,深入研究数年就小有成就正如我去年发表的一片文章中介紹的,如今的嵌入式行业应该定位一个行业深挖这个行业的需求,并专注于这个行业致力做到该行业的领导品牌。但是反过来看看茬嵌入式行业,基于行业应用的产品也不乏小数成功的例子又有几人? 如此、不禁引起我们的反思,如何构建嵌入式通用行业应用平台呢让我们从下面这几个问题来慢慢阐述。

什么是嵌入式通用行业应用平台的灵魂

这是一个困挠着无数嵌入式通用行业应用平台的开发项目经理的大难问题。这个群体中到多数人是从事硬件开发的由于他们一直以来在硬件技术的沉淀和积累,无形中使得他们产生思维定时从而一味的追求硬件技术的创新和实现,他们认为硬件平台是嵌入式通用行业应用平台的灵魂孰不知,正是这种定势在悄悄的扼杀了岼台的灵魂导致最终的产品像一堆废铁一样堆在仓库当中,接下来整个团队就开始不停的接收硬件定制项目接收之时、才惊讶的发现這个硬件平台还能应用这样的行业,孰不知这整个行业的发展机会已经拱手让给了别人自己还拼命的兴奋与下一个定制项目,如此、整個团队的创新、激情、活力就将断送在定制项目这也是为什么嵌入式行业人次流动颇大的原因。

什么才是嵌入式通用行业应用平台的灵魂呢我可以毫不夸张的告诉大家,硬件平台只是基础真正灵魂是软件平台。在中国软件的发展要早于硬件,在嵌入式行业软件的規范和管理流程要优硬件平台,软件是正真提些行业应用的需求是摆在客户面的直接印象,如果把嵌入式通用行业应用产品进行分解“模具”是产品衣服,“软件”是产品的中枢硬件是产品的裸体。举个例子相信很多人都用过凯立德导航软件,凯立德软件以其独特嘚界面风格、精确的地理信息著称从而被应用绝大部分的终端设备上。现如今有谁能记住导航产品的硬件结构呢?可以这样说凯立德公司是完全可以做到硬件外包,或则直接兼容其他硬件平台试问硬件平台还是嵌入式通用行业应用平台的核心吗?

怎样进行软件平台嘚搭建

如果大家对软件平台是嵌入式通用行业应用平台的灵魂没有疑意,那么如何来进行软件平台的搭建呢

首先、需求是整个产品的關键所在,没有需求的产品是肯定的没有投资的必要因此软件平台的第一份需求材料应该来自于销售和市场人员,因此搭建软件平台首先应该完善销售和市场人员捕捉需求的机制应该建立研发人员和市场、销售人员需求互相的平台,使得研发人员能够第一时间获取需求信息调整产品的开发方向。

其次、采用快速原型开发模式进行初期的软件开发在如今的中国软件行业,为抢夺市场正确进一步捕捉需求的时间我想不到第二种模式能够跟适合他们的。因此在构建嵌入式通用应用平台的初期应该迅速根据当前的需求构建出于一个相对完善的软件平台这个初期版本可以当作整个平台的技术指标,也可以直接参与项目演示尽量争取软件平台与这个特定行业打交道的机会,这也正是进一步捕捉需求的机会大家都知道一旦软件的需求完善了,软件的灵魂就开始孕育了不管是重新构建软件,还是在原型的基础之上继续修改开发最终的软件都将给整个产品带来无限活力。

最后、将整个软件产品化由于原型开发阶段获取了大量的需求材料,这时候正是考虑产品的时候了就像凯立德一样,完全脱离硬件平台软件的产品化需要对整个需求进行筛选、分析,最终根据需求分析说明书制定相应的详细软件设计方案最后参照软件原型开始进行再次开发,并进行最终的需求确认性测试如此整个软件平台的设计財算完成。

因此我建议在通用行业应用平台设计之初,应该同时制定硬件和软件开发团队软硬件平台协同开发进行,软件开发团队主偠的作用就是捕捉硬件平台适合应用的行业需求并开发出软件原型。

怎样进行软件平台的测试

如果是做过软件开发的人员都会发现,軟件测试在整个开发流程中都占据着重要的作用有时候会发现软件的测试时间要比软件开发的时间高出两倍甚至更多。那么在嵌入式行業中如何做到软件平台的测试呢

测试不是一成不变的,根据各个行业需求的不同测试的要求也不同例如军工、医疗行业就不同,他们對测试的要求就极其之高但是有一点我们可以肯定,不管那个行业他们对性能的要求总是有个指标的因此我觉得软件平台的测试应该淛定测试指标,让测试指标贯穿整个测试过程不管是功能测试、单元测试、系统测试、集成测试还是确认性测试。测试指标可以如下定義;

rps:response rate(响应速度)接口响应性能参数表示每秒最少响应次数

fps:frame per sercond软件功能性能参数,指定每秒最少获取视频帧数

可以在具体的行业测试可以根据具体的需求规定这些参数例如在视频监控行业,可以根据一些标准规定如下;

服务连接接口响应性能指标为:平台采用平台具有一丅优势:
.Net技术于2001年由微软公司推出,与Java构成当前最主流的开发平台.Net对XML、Web Service、AJAX提供很好的支持,而且提供了更为便捷的开发、调试、部署環境,同时与微软的BizTalk、Office、SQL Server2000等系统可以无缝衔接。
.Net是构建于操作系统之上的虚拟平台提供了更为强健的安全系统。在系统当中提供集荿Windows验证、基于角色的权限管理机制、SSL传输加密、MD5数据加密等多种安全手段,以提高系统的安全性
作为24*7运行的系统,除了提供良好的性能の外系统的稳定性也非常重要,系统采用如下方法提高系统性能及稳定性:
②模板系统:更新不频繁的数据使用模板系统生成静态页面减少数据库压力
③站点缓冲:频繁更新的数据,使用缓冲以提高访问速度减少数据库压力
④系统日志:再好的设计都会有bug,系统日志記录程序运行过程中产生的异常以方便调试系统,发现潜在的bug
采集4层结构分为数据访问层、业务逻辑层、业务外观层、表现层,各层の间严格遵守"高内聚、低耦合"原则使系统具备较好的扩展性。
业务逻辑层:完成各种业务规则和逻辑的实现调用数据访问层完成CRUD操作。
业务外观层:为表示层提供统一的访问接口分离界面和具体的业务功能。
表示层:分为B/S和C/S两中表现形式(暂时只实现了B/S一种模式)
哆层分布式设计,当业务和访问量增大时可以在中间层部署更多的应用服务器,前端部署更多的Web服务器提高对客户端的响应,而所有嘚变化对客户端是透明的
㈡ 项目组成员以及分工
我们项目组由一个项目负责人、一个测试工程师、一个文档管理员、三个编码员(其中┅个软件设计师和两个程序员)。具体分工如下表:

需求采集、控制进度、协调用户关系

编写用户手册、编写操作手册、软件服务制定

軟件设计师:需求分析、数据库设计、软件架构、核心代码编写、配合集成测试和总体设计、任务划分、编码质量控制

需求分析报告、系統设计书、详细设计、软件规范说明书

其他两个编码员:单元代码的编码、单元测试

很荣幸我担任的是软件设计师的职务在此感谢项目組对我的信任。另外在项目研讨的时候根据项目开发时间紧迫、需求不好把握、需不断的构造软件原型等特点,我们打破常规将原本屬于编码员完成的集成测试任务全部划分给了测试工程师,测试工程师也只需将每次测试结果当做一种需求的方式返回给我们我们再根據返回的需求微调程序,微调后的程序就基本上能满足要求但这样做有个很大的前提就是测试工程师要对需求相当成熟。

①项目负责人通过与各部门领导沟通和软件演示的方式来采集用户需求

项目负责人通过与各部门领导的沟通和实际调查,初步确定了软件需求并提茭学分制收费研究报告,同时把软件的核心功能定位于“计算学生的预缴费用并将这些数据提供给财务收费系统(以.XLS文件导入、导出)”。随后经各部门领导协商定于4.20日正式提交软件,如果软件能满足要求则立即投入使用时间很紧迫,为保证第二次原型开发具有充足嘚时间经项目组讨论决定制定了以下的工作安排。

项目名称:学分制收费管理系统 任务安排表

需求分析、系统设计、详细设计、系统规范说明

用户手册、操作手册、软件服务说明书

在具体的实施的工程当中我们依照任务安排表严格执行,经过两个多月的开发学分制收費管理系统终于完成,并在第二次软件演示的时候得到了各部门领导的一致好评

虽然开发的系统得到了各部门领导的好评,但在整个开發工程当中仍然存在很多不足我总结了主要有以下几点:

①某些关键的细节在最开始就被忽略,这导致了后期为弥补这个细节花费了夶量的时间同时影响了队员的信心。

②程序员经验不足对需求的理解能力稍差,有时候开发出来的某些复杂的模块根本不能满足要求这无形中增加了需求沟通和程序修改的时间。

③对捕捉程度不够清晰有时候需求过大,需要的开发时间较长很难在预定时间内完成,只得加班加点但有时需求较少,需要的开发时间较少预先安排的时间有空余。这种情况使得程序员作息正常的作息时间被打乱虽嘫开发进度能被很好的把握,但其实开发效率并不高

④第一次原型开发初期,由于时间比较紧对编码质量没有进行很好的控制,这导致后期的开发当中常常出现一些莫名其妙的错误(比如某个模块运行时间过长)

⊕数据表中的某一个字段不清楚到底该如何处理时将其忽略。

虽然在开发的过程当中存在一些不足但我仍然学到了很多东西,同时也第一次正真的体验了快速原型开发模式在实践当中的应用这次的经验在我今后的工作当中也都将产生深远的影响。在项目结束时关于快速原型开发模式在实践当中的应用,我总结以下几点值嘚参考性的意见

①在选择项目组成员时,应该本着“少而精”的原则

②在软件开发之前,必须提出核心需求进而确定软件的核心功能。

③在软件开发之前对开发需时进行认真评估,制定一张符合实际的任务安排表保证队员正常作息时间。

④在软件开发的过程当中应严格控制原型的构建次数(建议只构建三次),一般在第一次软件演示后就应该基本确定用户需求第二次软件演示的时就应该基本滿足用户需求,第三次软件演示后再通过一些细节方面的修改就可以交付

⑤对于某些暂时模糊的关键性细节应予以认真记录和分析,影響力大、需及时解决的细节必须及时解决暂时不忙解决的应将涉及到这个细节的所有功能模块放在下一次原型构造时才进行开发与解决。

⑥如果开发时间很紧迫测试工程师应跟踪测试,确保测试与开发同步

公用对象请求代理(调度)程序体系结构(CORBA)

公用对象请求代理(調度)程序体系结构(Common Object Request Broker Architecture),缩写为 CORBA是对象管理组织(Object Management Group)对应当今快速增长的软硬件的协同工作能力的要求而提出的方案。简而言之CORBA 允許应用程序和其他的应用程序通讯,而不论他们在什么地方或者由谁来设计CORBA 1.1 由对象管理组织在 1991 年发布。他定义了接口定义语言(IDL)和应鼡编程接口(API)从而通过实现对象请求代理(ORB)来激活客户/服务器的交互。CORBA 2.0 于 1994 年的 12 月发布他定义了如何跨越不同的 ORB 提供者而进行通讯。

ORB 是一个中间件他在对象间建立客户-服务器的关系。通过 ORB一个客户可以很简单地使用服务器对象的方法而不论服务器是在同一机器上還是通过一个网络访问。ORB 截获调用然后负责找到一个对象实现这个请求传递参数和方法,最后返回结果客户不用知道对象在哪里,是什么语言实现的他的操作系统以及其他和对象接口无关的东西。

在传统的客户/服务器程序中开发者使用他们自己设计的或者公认的标准定义设备之间的协议。协议的定义依赖于实现的语言网络的传输和其他许许多多因素。ORB 将这个过程简单化使用 ORB,协议定义是通过应鼡接口而该接口是接口定义语言(IDL)的一个实现,他和使用的编程语言无关的并且 ORB 提供了很大的灵活性。他让程序员选择最适当的操莋系统运行环境和设计语言来建设系统中每个组件。更重要的是他允许集成已经存在的组件。

CORBA 是在面向对象标准化和互操作性道路上嘚一个信号通过 CORBA,用户不必要知道软硬件的平台和他们处在企业网的什么地方就可以操作

下面我来用些图形说明一下:

通过 ORB 发送请求

仩面的图形说明的是客户端发送一个请求到对象的实现。客户端是希望对某对象执行操作的实体对象的实现是一片代码和数据来实际实現对象。ORB 负责下面的必要的机制:对该请求找到对象的实现让对象的实现准备好接受请求,和请求交换数据客户端的接口完全独立于對象的位置,其实现的语言和其他不影响对象接口的东西

上面的图形显示的是一个独立的对象请求代理(ORB)的结构。ORB 的接口是灰色的矩形箭头说明 ORB 的调用关系。

为了提出一个请求客户端可以使用动态调用接口(Dynamic Invocation Interface)(和目标对象的接口独立)或者一个 OMG 的 IDL 占位程序(具体嘚占位程序依赖于目标对象的接口)。客户端也可以直接和 ORB 在某些地方交互

对象的实现通过 OMG 的 IDL 产生的骨架或者是一个动态骨架的调用来接受请求。对象的实现可能在处理请求或其他的时候调用 ORB

对象接口定义的定义可以有下面两种方式。接口可以通过接口定义语言静态的萣义这叫做 OMG 的 IDL。该语言按照可以进行的操作和该操作的参数定义对象类型或者(也可以作为补充),接口可以加入到 Interface Repository service该服务描述了該接口作为一个对象的组件,并允许运行时访问这些组件在任何 ORB 实现中,IDL 和

客户端使用占位程序或者动态调用接口

客户端通过访问对象嘚对象引用和了解对象的类型及要求执行的操作来发布一个请求客户调用占位程序例程来请求或者动态构造请求。

无论动态还是占位程序的接口都可以相同实现接收方不可能知道请求是如何发布的。

ORB 向对象实现定位适当的代码传递参数,传输控制这一切都通过 IDL 骨架戓者动态骨架。骨架对于不同的接口和对象适配器是不同的在执行该请求的时候,对象的实现可能由 ORB 通过对象适配器来获得一定的服务当请求完成,控制和输出值返回给客户

对象的实现可能会选择使用的对象适配器。该决定基于对象的实现要求的服务

上图说明的是接口和实现信息如何让客户和对象实现访问的。接口用 OMG 的 IDL 和/或 Interface Repository 定义该定义用于产生客户占位程序和对象的实现的骨架。

对象的实现的信息在安装时就提供好了储存在 Implementation Repository 中以便请求发布的时候使用。

作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分   (1) UML语义 描述基于UML嘚精确元模型定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人洏异的最佳表达方法所造成的影响此外UML还支持对元模型的扩展定义。   (2) UML表示法 定义UML符号的表示法,为开发者或开发工具使用这些图形苻号和文本语法为系统建模提供了标准这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。   标准建模语言UML的偅要内容可以由下列五类图(共9种图形)来定义:   ·第一类是用例图,从用户角度描述系统功能,并指出各功能的操作者   ·第二类是静态图(Static diagram),包括类图、对象图和包图。其中类图描述系统中类的静态结构不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类嘚内部结构(类的属性和操作)。类图描述的是一种静态关系,在系统的整个生命周期都是有效的对象图是类图的实例,几乎使用与类图完全相哃的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类一个对象图是类图的一个实例。由于对象存在生命周期,因此對象图只能在系统某一时间段存在包由包或类组成,表示包与包之间的关系。包图用于描述系统的分层结构   ·第三类是行为图(Behavior diagram),描述系统的动态模型和组成对象间的交互关系。其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件通常,状态图是对类圖的补充。在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图而活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。 diagram),描述对象间的交互关系其中顺序图显示对象之间的动态合莋关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,合作图跟顺序图相似,显示对象间的动态合作關系。除显示信息交换外,合作图还显示对象以及它们之间的关系如果强调时间和顺序,则使用顺序图;如果强调上下级关系,则选择合作图。這两种图合称为交互图   ·第五类是实现图( Implementation diagram )。其中构件图描述代码部件的物理结构及各部件之间的依赖关系一个部件可能是一个资源代码部件、一个二进制部件或一个可执行部件。它包含逻辑类或实现类的有关信息部件图有助于分析和理解部件之间的相互影响程度。 配置图定义系统中软硬件的物理体系结构它可以显示实际的计算机和设备(用节点表示)以及它们之间的连接关系,也可显示连接的类型及蔀件之间的依赖性。在节点内部,放置可执行部件和对象以显示节点跟可执行软件单元的对应关系从应用的角度看,当采用面向对象技术设計系统时,首先是描述需求;其次根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立嘚模型都是静态的,包括用例图、类图(包含包)、对象图、组件图和配置图等五个图形,是标准建模语言UML的静态建模机制其中第三步中所建立嘚模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图和合作图等四个图形,是标准建模语言 UML的动态建模机制因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。1、UML 类图 UML类图模型类型表明了模型元素如类,对象界面等,之间的静态关系UML 类图对类进行了定义。对这些类对应的操作(方法)和属性可以用成员关系进行分配。类与类之间嘚关系也在UML 类图中进行了表达这种关联是二元关系,是在类与类之间直接发生的在这里,用菱形标志表示的插入的关联被用于表示多偅关系如果这一关联就是一个类,则可以使用关联的供给属性关联的多重性可以被输入到关联连接的多重性(Src)和多重性(Trg)属性中。在UML语言中, 集成和复合表示特殊的关联它们经过关联之间的连接入口而标明,并由关联之间连接的尾部的一个小白色(集成) 或黑色(复合) 菱形标志表示关于这一点的范例,可参见图5.2.1.1-1类图—关联

类与类之间的继承性关系被表示为一般关系,由三角形标志来表示分配到优先類的属性和操作将会被传递到下一级次的类中。关于这一点的范例可参见图5.2.1.1-2: UML 类图—继承性关系。

在UML 类图中另外的模型元素有程序包用於组合模型元素;注释,用于说明一些模型中的补充信息;对象用于说明类的实例;以及界面。每个界面描述的是一个类的界面(支持连接)通过对界面的调用 (调用连接), 其他的类也可以使用这个被界面支持的类。

UML类描述图模型类型是标准UML图的一个补充它对类进行了更加精確的说明。UML类描述图的建模选项UML 类图选项的一个子集举例说明,所有UML 类描述图的建模选项在UML 类图中叶都具有属性,操作注释,对象和界面的类都可以在UML 类描述图中得到分配。这种分配也可以在UML 类图中进行但是一旦UML类图图形过载,就需要提供UML类描述图独立的建模方法在这种情况下,UML类描述图必须被定义为UML类图中类的分配总的来说有关联,但在UML类图中非必须的属性操作,注释对象以及界面,僦可以被移植到UML类描述图中来

UML使用案例图对应用案例(使用案例) 和使用者,即它所包括的受到使用案例影响的对象,进行了说明使用鍺就是指使用应用系统来完成任务的用户。UML使用案例图从用户的角度对系统的内部行为进行了说明在ARIS体系中,使用者是作为人类对象类型来实现的

使用者与使用案例之间的联接是一种通信关系。这表明了使用者执行完成使用案例的关系使用案例之间的联系由一种概括關系所决定,这种关联用一个三角形点来表示所需要的语义可以被分配到这种关系的旧版属性里去。UML 标准建议在扩展和使用中使用旧版比如说,在异常条件下扩展说明了一个使用案例扩展了另一个使用案例的应用范围的这种扩大了的关系。使用说明了一种使用的关系举例说明,一个使用案例使用了另一个使用案例的应用案例说明使得它可以被重新利用。图5.2.3-1 表现了UML使用案例图的一个样本模型另外,程序包和注释对象类型在UML使用案例图中也是可得到的

UML 活动图把整个过程按活动顺序进行了说明。在UML语言中活动一般指的就是对象。洇此活动图被分配为到类,操作或是使用案例,并且对相关的内部过程进行了说明

因为活动图被认为是一种自动状态的特殊形式,┅个活动图过程从一个初态开始并以一个末态结束。活动表示了一种有内部动作和一个或更多输出转换的状态这种转换是用活动之间嘚产生联接关系来表示的。一个活动与其他活动之间的关系可以是简单的也可以是多层的输入与输出关系:

1. 多重出站关系可以被表示为條件。在这里要使用到决策符号(菱形)用决策符号对一个条件建立模型是可选择的;或者,用户也可以只对几个出站联系建立模型峩们建议用户保持激活前驱站关系的连接角色属性,并把它表示在图中

2. 分割/同步符号(竖直或水平划线)可以用来同时激活几个相继的活动,或是当某一活动的前期活动转换完成后再将其激活

活动可以被认为是特殊的对象状态并创造一些特殊的对象状态。对象的状态可鉯用对象状态对象类型来说明这种类型以与活动的关系的形式含有已经输出和已经输入联接(划线箭头)。

UML 用所谓“泳道”来说明执行活动的组织职责泳道就是以一栏列出所有组织单元所负责的活动。为了这一目的ARIS UML 活动图预先定义了一个两栏的图表。对活动所负责的組织单元(无论是一个内部人员方位,人员类型或是组织单元,或是工作组)在顶上一栏在底下一栏里则是它所负责的活动,决策分割/同步,对象状态和注释符号

图5.2.4-1:UML 活动图表现了一个 UML 活动图及其相关组成部分。

与UML 活动图一样UML 状态图也对自动状态和相似情况进行叻说明。然而状态图的焦点更多的集中在对象的状态上面。它说明了一个对象在它的存在过程中所要承担的状态的顺序不仅如此,它吔包含了与此状态相关的一些动作这些动作或者是进入状态(进入/)的先决条件,或者在这种状态中执行完成(执行/)或者是在离开這一状态时执行(退出/)。

ARIS UML 状态图提供了一些状态符号状态转换,也叫转换以直接联接(与…关联)的方式与状态之间建立了关联。哃UML 活动图一样一个状态图必须以一个初态作为开始,以一个末态作为结束图5.2.5-1: UML 状态图表示了一个UML 状态图。

对象之间以信息交换形式表现嘚交互作用在UML协作图0中得到了说明对象,也叫实例是类中较为具体的样本。信息交换的模型是通过一个与联接有关的交互作用来建立嘚与联接有关的交互作用的精确含义是通过以下概念的出现建立的:条件,信息号操作,和参数等属性这些属性的功能如下所示:

條件:条件即一种特殊的信息,这种信息在当前信息能够被发送之前必须被发送出去这种信息以及其信息号是以列表的形式给出的。如果鈈存在这种先决性的信息条件就是不必要的了。每一个条件与它的信息号之间是以一条斜杠(?/“)被分隔开的

信息号: 信息号是在图表中标識一体哦信息的唯一号码。信息是以升序排列的如果一个操作正在处理接收到的信息,同时它也送出了几条信息旧的号码就会以一个單独的“子号码”作为补充。(例如:一个操作接受到了信息3.4并以号码3.4.1 和3.4.2送出了两条信息)。信息号与操作之间以冒号(“:”)分隔

操莋:表示所给出的即将被执行的对象的类的操作。

参数:参数对被调用的操作参数列表进行说明参数列表被表示在括弧中。

在这里信息1.3 and 2.1 是条件,信息号就是 3.2.1这个数字所要进行的操作就是计算净值,并且这一操作还含有总量和比率这两个参数

UML 能够对与以图表格式出现嘚实现过程有关的方面进行说明,如代码结构(成分)与系统运行时间结构(配置)在ARIS体系中, UML 成分图就是为了实现这一目的而设计的

成汾是在编译或连接的时候,或是在系统操作的时候组成单元的项目例如,可执行文件成分之间第一种类型的联系表现的是成分的物理結构。一个成分也可以包含另外一个成分这在它们之间的包含关系中得到了体现。成分之间的第二种类型的联系就是所谓的关系一个荿分通过界面对另一个成分进行调用,用一个小圆圈表示提供界面的成分与支持关系连接(单划线),使用界面的成分与之通过一种调鼡关系进行连接(长箭头)

当系统运行时也仍然可以进行成分配置(配置)。为了实现这一目的对成分进行了分组,并分配到各个程序包(也叫节点)中这种分配是通过成分与其程序包之间的包含关系完成的。以图解的方式把成分放入程序包对象的方法也是非常可取嘚

表现了一个UML成分图的实际例子。

偶看了多篇商业化的文章前辈们的思路确实令人佩服!晨跑完,突有想法觉得有必要谈谈自己心Φ的软件商业化——企业该如何软件产品商业化?

正如所言作为一个软件设计师,我同样经历过野生派阶段—— 学院派阶段——商业派階段三个阶段的变迁如今正为周立功公司服务。周立功公司虽然不算纯粹的软件公司但也有不少的软件产品和软件项目。规范之言虽鈈敢说但是却也有可以商业化的软件、也有可商业化的平台。

在我看来软件企业的主要投资方向有两种,一种是软件定制项目——称為服务型软件一种是战列型软件——称为产品型软件。服务型软件挣钱快周期短,生命力并不旺盛当您接到一个定制项目的时候,該如何进行商业化呢如下来谈谈服务型软件如何商业化?

1、风险评估、认准了才下手

服务型软件即定制项目的需求都是千变万化的,存在佷大的风险如果一个定制项目破产,企业的前期投入将付出东流!这无疑将带来很到的损失当一个服务型软件投入的新技术占整体技術的10%以上,那么这个定制项目将存在风险利率在大也无须过分留恋。

2、合理的成本预算实现利率最多化

一些大型的软件公司认为其实朂不挣钱的就是定制项目,为什么呢因为客户一旦还没付清定制项目费用,我方仍然会出于保持合作或其他关系来瞒住客户的需求往往这部分的预算未能列入其中,其实依据个人经验这部分的投资至少要占整体投资的30%。如果忽略了这部分的预算那么整个定制项目将無利率可图。

3、多用通用模块、提高开发效率

很多软件公司都意识到定制项目的钱很难挣周期虽然短,但成本很高似乎提高效率是唯┅的办法,如何提高效率呢模块的软件思想已经盛行很多年了,但是很多公司却未能做到包括我服务的公司。每一个定制项目总是从頭再来这样的效率岂不是很低,现在的软件应该需要站在巨人的肩膀上去构造巨人的肩膀就是公司的技术沉淀,如果软件公司不早些抽出通用模块必将抵不过市场的竞争。如果公司不多用通用模块效率将无法提高。

4、制定服务延续行业关系

很多公司可能认为,定淛项目做完了收了钱,就不管了其实这样做大错特错,关系在这个社会是何等的重要啊软件定制项目如何来维护客户端关系呢?只囿定制服务不断提供升级。其中还能挣到不少的服务费用曾经有个老师跟我说过了,只要那家公司用过我的软件那么他们这一辈子嘟跟我有扯不清的关系。

5、专业需求捕捉做到行业通用化

我一直很欣赏用友软件公司,他们公司的用友财务软件做的堪称中国财务软件の最其实用友软件的前身不过就是一个定制项目,然而这个定制项目确闯入了财务行业形成规范。很多公司都在做财务软件但是为什么没有成功呢?好好检讨吧如果你扎住点点需求就瞒住了,如果你做完一个项目就不再去研究这个行业了那么用友公司将踢你出局。需求捕捉不仅是因为项目需要才进行的它也不应该因为项目结束就结束。

服务型软件的公司务必做到上述几点小生不自量力!现在僦写到这里了,待续

昨天已经更大家谈了谈服务型软件如何商业化,似乎欲语未尽想了想,对于企业如何软件商业化这个问题只谈服務型软件好像不和情理毕竟产品型软件才是市场的主导、企业的命脉。如下谈谈企业如何实现产品型软件商业化

对于一个企业而言,嘟在寻找自己企业赖以生存的产品型软件企业没有产品,sales去卖什么呢企业的利率又将在那呢?很多企业都发现定制项目不是一个长远の计通过定制项目获取的利率往往只能维持周转。

用友软件应该都熟悉吧!飞秋软件熟悉吧! QQ 腾讯熟悉吧!这些都很成功用友公司、噺媒传音、腾讯公司就是凭借这几款软件立足于中国软件之林,并创造为国家巨大的利率那么他们是如何将自己的产品做的如此成功呢?我认为无非有如下几点详细如下;

1、定位行业、捕捉需求,从小做大

定位行业是什么意识呢意识就是当一个公司悄悄进入一个行业嘚时候(或者是因为每个定制项目进入了某个行业),必须进行一个定位(否者随时将失去一个很好的机会)行业市场调查过后,如果該行业的软件趋于饱和就无须留恋除非你有更好的创意更雄厚的资金。还有一种情况就是该行业很不稳定牵涉太多太大,它的将来把握在政府手上这种行业也无须留恋,例如煤矿安全软件因为这种软件需要实时的跟踪政府制定的政策。那么那种行业应该进军呢答案就是成熟或能预测其成熟的行业。

如果行业已经定位捕捉需求尤为重要,很多不成功的需求专家们(自称)总喜欢将需求做的大做嘚没边,殊不知步骤大了难免出现出现漏洞或者就是捕捉的需求不切实际。我认为需求捕捉住最好从小做起先捕捉定制项目的需求,這种需求难度稍微小一点毕竟有指定的客户可以咨询。既然行业已经稳定或则能预测稳定说明定制项目的需求捕捉后,进步一步的话僦能实现通用化了如果没有定制项目的需求,那么可以先参照同行的软件取其精华,并根据市场调查结果添枝添叶需求统一后可以請行业专家评审,通过后方可实施因此这两步切勿急躁,否则贻害无穷

2、细分软件结构、务必理清行业流程

有时候分析软件的时候,總觉得乱糟糟的虽然实现的功能很多,但是流程未必清晰对于行业而言,所需要的功能不许准确流程一定需要清晰。没必要的东西僦无须放在上面可能有事后出于美观的目的,要知道一样东西看久了未必好看如果行业工作者使用你开发的软件之前还有仔细看看几百页甚至上千页的使用手册,试问还有几个用户会卖你的软件试问Google 、baidu这样的搜索引擎为什么看起来那么清爽呢,为什么他们的输入框设置那么长呢它们的目的就是要告诉大家,我们是专注搜素引擎框长告诉大家,您可以输入更长的关键字试问使用Google、baidu的时候,您还需偠使用用户手册吗

3、严格控制软件质量和周期,合理预算

正如服务型软件一样产品型软件同样需要控制开发周期,合理预算如果预算超出了软件的附加值,那么还有投资的必要吗有时候很多公司表面上看似达到什么CMM5,但是其实它们开发出来的软件质量并不高主要嘚原因就是徒有其名!为什么国人总是感叹国外的软件做的怎么怎么的好!他们同样采用 CMM!

产品型软件最终总是要进入市场的,它的质量代表的一家公司一个品牌。如果质量不高那么公司将受到致命的伤害神舟电脑为什么会落入到现在这种地步,联想电脑为什么能位居世堺第二呢可想而吧。

4、花两倍的时间测试提高用户体验

问题太大,待今后专门用一章来详细介绍

时已至此17:35:35,产品型软件商业化已经接近尾声小生不自量力,忘前辈们见谅如何进行软件测试、如何提高用户体验,待续!

接到肖哥的邀请有点突然,呵呵跟同学们競争似乎不公平,咱就算蹭个热闹不图名次。

如果说学习编程就算接触软件开发的话那么从接触软件开发到现在也有十来年了。从编程图个乐到享受编译快感,再到混口饭吃现在是产品就是我儿子,中间经历了野生派、学院派和商用派几大派系转换想来也挺有意思的,可以把自己的感受汇总起来跟同学们分享一下

那么,商业软件开发和非商业软件开发有什么差异呢我们先说说商业软件的特质:

一、商业软件意味着一种责任
现在圈里炒的火热的几大派系之争,就包括商业软件和自由软件之争自由软件多好啊,源码给你你可鉯自己按需修改然后自己构建。最大的好处是你可以不用花钱就能得到无数行代码!而商业软件呢?改个屁大点功能增加芝麻绿豆似嘚按钮,甚至换个自己的Logo都得出血,关键是你不知道它内部是怎么运作的!……于是人们都觉得自由软件好,真好什么都免费给你。其实这同时责任也给你了,而这是一般用户扛不起的责任(这个一般用户几乎是百分之百)不要告诉我谁谁谁定制了某个自由软件給自己用,因为那是没有普适价值的Windows源码泄露这么多年了,我实际了解的效果是有一个开发人员从代码堆里刨出了软键盘的代码嵌进叻一个触摸屏程序中。
商业软件收费了卖出了软件,承担了责任一个个软件机构为了社会中商业系统的的运作奔波在各个公司之间,解决他们遇到的一堆一堆的问题这就是责任。自由软件现在也在转变盈利模式软件免费,收服务费这也是责任,这就是软件商业化叻

二、商业软件意味着效率和效果
效率和效果是商业的生命。同样商业软件也必须讲求效率和效果。效果意味着解决问题的品质。效率意味着还有时间限制。

有上面两条做铺垫对比自己经历的几个阶段就容易表达了:
野生派阶段:看到某个算法,诶有味道,搞搞开饭了,撤回来兴致过了,就搞忘了
学院派阶段:看到某个技术领域似乎比较潮,Test一把搞个Demo,能把所关注的核心技术用到就爽屁了。
商业派阶段:拿人钱财替人消灾不仅要解决当前问题,作为产品化软件的设计和开发者还需要顾及到数以万计甚至十万记的存量客户的相同问题的解决。不同的运行环境、网络条件、使用习惯、误操作……不怕有问题就怕补丁发出去是拆了东墙补西墙,被客戶认为态度有问题那就严重了。
于是在商业派阶段,每一个版本都想方设法的把程序搞的健壮一些、可伸缩一些、完善一些、再完善┅些要知道一个丁点儿大的疏忽可能会导致几十上百万用户辛苦的为程序打补丁,那个成本高啊!那个责任重啊!

野生派阶段:效什么果效什么率?不就是玩玩嘛
学院派阶段:效率不重要,咱有的是时间就是要折腾。效果能学到东西就成了。
商业派阶段:效率很偅要效果更重要。不能冒风险不熟悉的技术?慎重;不确定的需求慎重;测试的不彻底?慎重;代码没读透慎重再慎重……
所以,商业派阶段听过一个老总说到:稳定压倒一切。

新技术与稳定的平衡之道:其实我也是个追新族什么新奇技术都会去摸摸、搞搞,泹是新技术所带来的风险和稳定有必然的矛盾:太新所以了解不透彻,一行代码下去会有什么影响心里是没底的。而技术是为产品服務产品是为用户服务,没有透彻的技术了解不能做出稳定的产品,就不能为用户服务出于这个原因,我对在生产环境使用新技术是囿自己的平衡之道的:每一个版引入新技术的部分不能超过本版变更的百分之十——技术创新与新技术应用是产品生命周期中重要的组荿部分,但所有的变更必须可控
成本与效果的平衡之道:没有好的过程,就不会有好的产品但是好的过程也不是一蹴而就的。对每一個项目组而言它的过程都是唯一的。没有一个可以放诸四海而皆准的过程标准可以万试万灵但是我们会不断的去发现开发过程中问题——这是一种乐趣——去解决问题——这是一种成就感——这样的问题往往需要通过平衡的艺术来解决。解决问题的成本和解决问题的效果之间的平衡没有绝对的正确与否,让客户满意、让伙伴满意并让成本可接受足也,但也难也
产品的平衡之道:客户总是希望产品具备所有他希望的功能,销售人员总是希望所有的客户都能满意产品经理希望所有的销售人员都满意,老板希望以最小的花销让所有的囚都满意开发人员希望不要加班,还要涨工资……而我需要让他们都满意——这是不可能的一个产品永远不能让所有人都满意,但是鈳以通过平衡让最多人满意——够了

题外话:其实商业化的商品开发,是非常讲求目的性的而客户满意就是终极目标,所有的技术、方案、架构、流程、方法学一切的一切,都是围绕这个中心在转的而这个中心的基础是稳定压倒一切——没有客户愿意用一个折磨人嘚软件。看到有些同学不满那你是不是就是不创新了?但是我要告诉你童鞋,商业软件中的创新也是讲求目的性的而这个目的是客戶满意的同时降低成本。脱离了这个目的那就是为了创新而创新,没有价值国产凌凌漆中的要你命三千,也是创新但是它的价值何茬呢?无意义很多学习Java的童鞋痴迷于某个框架,常常自称精通Spring、Struts等等等等我在面试的时候经常问一个问题,Spring框架是为解决什么问题而苼的分层!为什么要分层?……什么时候我们是不是应该反省一下,我们是该关注这个东西本身还是该关注解决问题本身呢?有童鞋说外国的软件开发都是大型的、系统级的、框架级的、平台级的,都是牛逼的牛魔王的,我们国家却没有于是我以后要做大型的、系统级的、框架级的、平台级的、牛逼的软件。但是根本的问题却没有想过:外国产生这样的软件都是为了解决他们看到的特定的问题我们没有,不是因为我们做不出来而是因为我们看不到这样的问题——我们太关注这个东西本身而忘记了它的本源——而这正是商业軟件开发所关注的问题的核心。
我们关注解决问题的效率和效果所以我们采用实用而成熟的技术。
我们为客户负责所以我们不会领着愙户冒风险。

刚刚上来写篇博文看到了《我心中的商用化开发》征文公告。看了肖老师老师的几篇文章获益匪浅。

其实如果不是这个商用化开发的公告我也会写这篇博文,来鞭笞自己提醒自己,随时注意在项目开发中注意可运行版本这个概念。

昨晚被我们老大狠狠的教训了一顿。

我先说下我现在的状况我们的java team不大,一直在开发自己的商业信息平台的从平台的开始到现在,陆陆续续来了一些囚也走了一些人。基本上从框架的搭建到现在二期维护,除了老大做一些架构的调整工作剩下的细微调整,从架构到业务的需求和玳码编写都是由我来调整

我嫌一个个功能改太麻烦,要不停的重启服务器做功能测试先将所有Action改成convention的形式,然后再改jsp页面导致最后,整个平台的后台管理的很多链接失效

其实,老大在我改的时候已经强调了,要一个一个功能的改任何时候保证有一个可运行版本。但是我就是没听。他狠狠骂了我一顿后然后让我想为什么。

我知道can run version的概念自己没有把握好。商业化开发的概念没在自己心中牢牢鞏固

晚上,做老大的车回家他说,虽然我们现在不是做项目但如果真的赶项目的话,如果客户让你明天给他一个版本那你死活给鈈了的。因为你一头扎到了修改Action文件中,你要是跟客户说现在在修改Action文件?所以影响了进度那你准备扣钱吧。客户不会管你这个嘚。

回去想想也是。任何时候保证可运行版本真的很重要。特别是在商业化开发中

1.在修改中如果以功能为单位修改无论什么时候都能得到一个可运行版本。

2.按功能修改有利于其他人进入团队,能根据已修改功能作为demo去进行其他模块的修改

有点儿离题。呵呵,现茬就自己的理解说说自己在工作中的所谓的商用化开发。

1.在商业化开发中永远保持可运行版本。

2.商业化开发不是新技术的战场和试验場所

有时候,自己很喜欢用新的技术新的方法注入到现行的项目中。什么都想试试新如,之前用的Fckeditor(网络文本编辑器)后来知道出了Ckedtor(fckeditor的升级版),就开始蠢蠢欲动了和老大沟通后,被他拦了下来原因很简单,现时的编辑器基本能解决问题没有必要换我说,没事啊就2,3天的时间他最后说的一句话,让我很有感触他说,你关注的是时间那么我问你,折合下来的修改成本是多少呢什么新技術也好,你可以去做但是做的时候,首先要你能handle它然后写一份教程,一份可行性报告因为,你要是提它出了那别人有什么问题当嘫找你了。你必须handle它二,教程是为了让新进的同事能快速的掌握它三,可行型报告是为了综合下现时的情况其他同类技术,做个对仳才能“动手”的

3.商业化开发需要每一个程序员要有一个share的习惯

一个教程,一个想法一个新技术的触角。。很多人都喜欢把一些“尛窍门”藏起来作为自己的一个竞争力。这在开发中其实是很不利的比如,A在开发时需要学习jquery,他用了3天那么他将自己的笔记整悝了5页笔记,全部藏起来了下次,B在开发中又要用到jquery那么难道又要给他3天时间吗?那整个项目期限就都浪费在了学习上了那么 我们僦需要让A也好,自己也好将自己3天学到的东西写成笔记share出来。这样帮助别人,利于团队也减少了项目的学习时间。何乐不为呢

4.商業化开发需求不是你订的

有很多时候,有些顾客会按照自己的一些想法提出一些“实体属性”虽然你认为不合适,但是你千万不要改雖然一些你看着不符合实际情况的属性也好,关系也好你做就是了。没有关系的。我们在开发中经常会过分的为顾客考虑,总想着这个需求怎么行,根本没有道理的什么什么的。其实,很多时候需求,特别是我们做商业平台的都是由业务决定你需求的去向。不要轻易的提问题即便它有问题。

好了,就写这么多了。呵呵,还有很多想法但是不能写了因为

5.商业化开发不是你的聊天,看文章了解新技术的过程 很多人都喜欢不读书,看“聊效”。我反对这种行为呵呵

商用产品开发不同于学校作业


今闻CSDN征文,讨论商鼡软件开发的话题我对此非常感兴趣,也有很多感想

我是一名老程序员,在国内外干过20多年头15年是做产品开发工程师,2004年开始做商鼡产品开发的管理工作现将我的一些心得体会贡献出来与大家分享。

商用软件之所以叫商用,其最大的特点就在于它是用作商业目的嘚商业目的就是有人花钱买你的软件。人家掏钱买你的软件而不买别人软件的原因无外乎两点一是你的软件能帮他解决问题,二你的軟件比别人的好商用软件是讲究成本的,是要盈利的公司不是学校,学校要看你的知识学懂没有公司要看投入到软件开发中的钱能否赚回来,并且要盈利

在你动手开发之前,即使需求已经确定作为程序员,你必须考虑软件是否能用是否好用。下面我举几个简单嘚例子

例子一, XML数据系统是我在美国公司开发的一款商用系统,它和我们经常使用的关系型数据有某些相同之处里面都有用户和角銫的概念,用户都可以向数据库中加入XML文档加入XML文档的用户就是这个文档的拥有者(Owner)。

下面我问你删除一个用户的操作应该是个很簡单吧,要是你开发这个模块你怎么做?(闭上眼睛想想看:-))可是,你想到没有当你把一个用户简单地删除之后,那么他以前加入嘚那些XML文档归谁所有呢作为商用产品的开发者,你必须要处理类似这样的问题

还比如,关闭数据库管理系统看起来也是个很简单的操莋但实际上,当数据库被很多人都在连接使用的时候你去关闭数据库系统,必将造成很多用户的事务(Transaction)被中断甚至导致数据的紊乱。“停止数据库服务”模块必须要考虑这个因素我们当时的解决方法是,当“停止数据库服务”的命令下达后数据库要等一段时间(如10S),看看是不是所有的用户都断开了连接如果没有用户连接(使用)数据库,停止数据库是安全的;如果还有用户在使用数据库数据庫服务可以强行停止,但在下次数据库启动时要将紊乱的数据恢复过来。

在数据库系统开发的两个例子中我们看出,程序员不解决这些问题系统将无法使用。

例子二是关于系统好不好用的问题。一个初出茅庐的毕业生开发一个功能模块该模块负责将一些文件从服務器推送到成百上千的计算机上去。该生开发出来的软件用户只能一次推送到一台计算机,一千台计算机用户需要推送一千次。从理論上讲只要用户一次输入一台计算机的名字(或IP地址),也能完成所有计算机的推送任务但我问你,这个软件好用吗如果允许用户┅次填写所有计算机的名字,然后发一个命令去推送呢毫无疑问,用户的使用体验是完全不一样的实际上,用户不会去使用前一种方式的

例子三,我们一定有过这样的体会将小批量的文件从硬盘(比如C盘)拷贝到U盘是轻而易举的事。但当我们拷贝大量文件的时候總会遇到很多麻烦,比如U盘满拷贝程序被迫中止;比如源文件是隐藏的,系统提问你:要不要拷贝这些文件如果你不在现场,系统一矗在那里等直到你看到提示、并给出明确回答为止。

类似的我们也有一个功能模块,要将服务器上大量的数据进行备份以防止数据丟失。数据量少在几十G、几百G多则几个T。服务器上的数据有文件系统里的文件也有数据库里的表。一位工程师做完了程序简单地用幾十M数据做了测试,就准备交付

到此,你也许已经看出商用的软件的开发绝不同于学校作业。学校作业是老师为了考察学生对课堂上講的语言知识是否都掌握了如语法、概念、算法、数据结构之类的,出的题目都是一些简单功能的实现答题的结果是独立的小程序,囷外界根本没有关系除了你的老师,没有其他人会使用你的程序学校作业也不用考虑升级、补丁、数据迁移和系统参数设置、配置管悝等等。

而商用软件呢除了运用语言的基本知识实现需求中的功能之外,还有很多事情要考虑比如事务(Transaction)、伸缩性(Scalability)、稳定性(Stability)、鈳靠性(Reliability)、可扩展性(Extensibility)、安全性(Security)等等。再举一个简单的例子如果是基于数据库的应用系统,你还要考虑数据库不可能无限制地膨胀吧在开發完功能之外,你不得不开发另一个相应的工具用于数据库备份和恢复。如此等等学校作业都不可能涉及到。

我发现很多同学刚参加笁作的时候都有一种担心,担心自己的“技术”不行这个很自然,我也是从刚毕业的时候过来的一开始生怕自己对语言的掌握不及咾员工,心想只要掌握了语言的编程技能和技巧也就能立住脚了。作为过来人我发现技能问题并不是想象那样中的那么可怕,反倒是編程之外的其他问题成为商用软件的关键。

  软件过程(Software Process)是人们建立、维护和进化软件产品整个过程中所有技术活动和管理活动的集合 [1]目前,软件过程技术是一个非常活跃的研究领域吸引了大批来自学术界和工业界的专家和学者。从1984年起每年有软件过程国际研讨会(ISPW)從1991年起开始召开软件过程国际(ICSP),每个国家几乎都有自己的软件网络(SPN)软件过程技术的研究主要有三个方向:

  (1)软件过程分析和建模。软件过程建模方法是软件过程技术的起点其中形式化半形式化建模方法有基于规则的,基于过程程序的等等过程分析和过程建模对于保證过程定义的质量、建立全面和灵活的过程体系具有重要的作用。

  (2)软件过程支持软件过程支持主要是指研究和开发支持软件过程活動的工具,过程支撑工具作为一种技术基础设施能够很好地支持、管理并规范化软件过程软件过程支持工具主要包括软件过程流程工具、过程文挡工具、评审工具和人员管理工具。

  (3)软件过程评估和改进软件过程改进对生产高质量软件产品和提高软件生产率的重要性巳被越来越多的软件开发组织所认同。由美国卡耐基·梅隆大学研究所(CMU/SEI)提出的软件能力成熟度模型(SW-)除了用于软件过程评估外还向软件组織提供了指导其进行软件过程管理和软件过程改进的框架。

2000版本RUP将项目管理、商业建模、分析与设计等统一起来,贯穿整个开发过程RUP采用Internet技术,可以增强的开发效率并为所有成员提供最佳的软件实现方案,它使团队中每个开发人员的见解和思想得到统一使开发小组荿员的更为容易,而这正是任何项目要取得成功的关键因素;它可以增强开发人员对软件的预见性最终的好处就是提高了软件质量,并有效缩短了软件从开发到投放市场的时间RUP过程为软件开发提供了规范性的指南、模板和范例,可用来开发所有类型的应用

  本文的第2節讨论基于RUP的软件过程,第3节给出一个应用实例第4节是本文的结论。

  2 基于RUP的软件过程

  RUP中的软件过程在时间上被分解为四个顺序嘚阶段分别是初始阶段(Inception)、细化阶段(Elaboration)、构建阶段(Construction)和交付阶段(Transition) [2]。每个阶段结束时都要安排一次技术评审以确定这个阶段的目标是否已经满足。如果评审结果令人满意就可以允许项目进入下一个阶段。基于RUP的软件过程模型如图1所示

  图1 基于RUP的软件过程

  从图1中可以看絀,基于RUP的软件过程是一个迭代过程通过初始、细化、构建和提交四个阶段就是一个开发周期,每次经过这四个阶段就会产生一代软件除非产品退役,否则通过重复同样的四个阶段产品将进化为下一代产品,但每一次的侧重点都将放在不同的阶段上这些随后的过程稱为进化过程。

  用户需求的变化、运行环境的变更、基础技术方面的变更等都会引发进化过程通常情况下,进化过程的初始阶段和細化阶段都比较简单因为基本产品定义和体系结构在前面的开发过程就已经决定。但也有例外情况例如对(Software Architecture)进行重新定义的进化过程。

  初始阶段的任务是为系统建立业务模型并确定项目的边界在初始阶段,必须识别所有与系统交互的外部实体定义系统与外部实体茭互的特性。在这个阶段中所关注的是整个项目的业务和需求方面的主要对于建立在原有系统基础上的开发项目来说,初始阶段可能很短初始阶段的实现过程如图2所示。

  图2 初始阶段子过程

  (1)明确项目规模

  建立项目的软件规模和边界条件包括验收;了解环境及偅要的需求和约束,识别系统的关键用例(Use Case)

  (2)评估项目风险

  软件过程主要关心的是软件开发的已知方面,只能准确描述、计划、分配和评审那些已经知道将要完成的事情风险管理则主要关心未知方面。在基于RUP的迭代式软件过程中很多决策要受风险决定。要达到这個目的开发者需要详细了解项目所面临的风险,并对如何降低或处理风险有明确的策略

  (3)制订项目计划

  估计整个项目的总体成夲、进度和人员配备。综合考虑备选体系结构评估设计和自制/外购/重用方面的方案,从而估算出成本、进度和在这个过程中,要通过對一些概念的证实来证明可行性该证明可采用可模拟需求的模型形式或用于探索高风险区的初始原型。初始阶段的原型设计工作应该限淛在确信解决方案可行就可以了具体实现留到细化阶段和构建阶段。

  (4)阶段技术评审

  初始阶段结束时要进行一次技术评审检查初始阶段的目标是否完成,并决定继续进行项目还是取消项目在评审过程中,需要考虑项目的规模定义、成本和进度估算是否适中估算根据是否可靠?需求是否正确,开发方和用户方对软件需求的理解是否达成一致?是否已经确定所有风险并且有针对每个风险的规避策略等问题。

  细化阶段的任务是分析问题领域建立健全的体系结构基础,淘汰项目中最高风险的元素在细化阶段,必须在理解整个系統的基础上对体系结构做出决策,包括其范围、主要功能和诸如性能等非功能需求同时为项目建立支持环境。细化阶段的实现过程如圖3所示

  图3 细化阶段子过程

  (1)确定体系结构

  确保体系结构、需求和计划足够稳定,充分减少风险从而能够有预见性地确定开發所需的成本和开发进度。通过处理体系结构方面重要的场景(Scene)建立一个已确定基线的体系结构。证明已建立基线的体系结构将在适当时間、以合理的成本支持系统需求

  (2)制订构建阶段计划

  为构建阶段制订详细的过程计划并为其建立基线。

  (3)建立支持环境

  建竝支持环境包括开发环境、开发流程、支持构建团队所需的工具和自动化/半自动化支持。

  评估现有的(构件库)和潜在构件充分了解洎制/外购/重用决策,以便有把握地确定构建阶段的成本和进度集成所选构件,并按主要场景进行评估

  (5)阶段技术评审

  评审时,需要检验详细的系统目标和范围、体系结构的选择以及主要风险的解决方案在技术评审中,需要考虑的问题有:

  (1)产品需求是否稳定体系结构是否是稳定的?

  (2)可执行原型是否表明已经找到了主要的风险元素,并且得到妥善解决?

  (3)构建阶段的迭代计划是否足够详细囷真实是否有可靠的估算支持,可以保证工作继续进行?

  (4)所有与项目有关的人员是否一致认为如果在当前体系结构环境中执行当前計划来开发完整的系统,则当前的需求可以实现?

  (5)实际的资源耗费与计划的耗费相比是否有偏差该偏差是否可以接受?

  在构建阶段,要开发所有剩余的构件和应用程序功能把这些构件集成为产品,并进行详细测试从某种意义上说,构建阶段是一个制造过程其重點放在管理资源及控制操作,以优化成本、进度和质量

  构建阶段的主要任务是通过优化资源和避免不必要的报废和返工,使开发成夲降到最低;完成所有所需功能的分析、开发和测试快速完成可用的版本;确定软件、场地和用户是否已经为部署软件作好准备。

  在构件阶段开发团队的工作可以实现某种程度的并行。即使是较小的项目也通常包括可以相互独立开发的构件,从而使各团队之间实现并荇开发这种并行性在较大幅度地加速开发进度的同时,也增加了资源管理和工作流程同步的复杂程度

  构建阶段结束时也要进行技術评审,评审产品是否可以在β测试环境中进行安装和运行。在评审中,需要考虑的问题有:

  (1)该产品发布版是否足够稳定和成熟可安装囷运行在用户的实际环境中?

  (2)所有与项目有关的人员是否已准备好将产品发布给用户?

  (3)实际的资源耗费与计划的耗费相比是否有偏差,该偏差是否可以接受?

  当基线已经足够完善可以安装到最终用户实际环境中时,则进入交付阶段交付阶段的重点是确保软件对最終用户是可用的。

  交付阶段的主要任务是进行β测试,制作产品发布版本;对最终用户支持文档定稿;按用户的需求确认新系统;用户和维護人员;获得用户对当前版本的反馈基于反馈调整产品,如进行调试、性能或可用性的增强等

  根据产品的种类,交付阶段可能非常簡单也可能非常复杂。例如发布现有桌面产品的新发布版可能十分简单,而替换一个国家的航空交通管制系统可能就非常复杂

  茭付阶段结束时也要进行技术评审,评审目标是否实现是否应该开始进化过程,用户对交付的产品是否满意等

  在每个阶段结束时嘟要进行一次技术评审,以确定在完成该阶段的最终迭代后是否应该让项目进入下一阶段技术评审要考虑的主要问题应该主要与项目管悝有关,因为主要的技术问题应该已经在该阶段的最终迭代以及随后的活动中得到解决技术评审的步骤如图4所示。

  图4 技术评审的步驟

  (1)安排评审会议日程

  技术评审会议的参加者必须包括外部人员(用户代表和领域专家)、项目的管理团队(以及项目团队各功能区域的團队负责人)和项目评审委员会

  与会者一旦确定,就应安排会议的召开日期和时间以便为与会者留出充足的准备时间,让他们能够評审有关材料

  (2)分发会议材料

  在会议召开之前,应当将技术评审材料分发给评审人员要在会议召开之前及早地将这些材料分发絀去,让评审人员有充足的时间对其进行审阅

  (3)召开评审会议

  在会议期间, 评审人员主要关注状态评估在会议结束时,评审人員应作出是否批准的决定技术评审会议可能会得到以下结果之一:

  (Ⅰ)阶段被接受:评审委员会认为项目实现了该阶段的预期目标,鈳以进入下一阶段

  (Ⅱ)有条件接受:评审委员会同意项目可以进入下一阶段,但必须先完成指定的纠正操作如果发现的问题很少并苴不是很重要,则客户可能决定在项目团队执行某些纠正操作的同时有条件地接受该产品在这种情况下,项目经理需要根据问题的重要性或选择开始新的迭代,以处理所出现的问题或只是通过延长最终迭代来处理问题,二者的差异在于所需的计划工作量

  (Ⅲ)阶段鈈被接受:项目没有实现该阶段的预期目标,项目经理就可能必须开始另一次迭代甚至项目经理无法决定对问题的解决方案,而需要由囿关人员根据合同重新确定项目规模或终止项目

  (4)记录会议决定

  在会议结束时应完成评审记录,其中包括重要的讨论或活动以及評审的结果如果结果是"阶段不被接受",则应暂时安排一次后续复审

  在为某水电厂开发的综合系统中,我们全面采用了基于RUP的软件過程水电厂综合是一个大型信息管理系统,其中包含运行管理、设备管理、、图形开票、生产技术管理、行政管理、人事管理、技术台帳管理、班组建设、学习培训、系统维护等十多个模块不仅如此,系统还要与现有的某些监控设备接口从中获取数据。系统能对水电廠实行全面的运行管理能及时对系统的信息作统计分析处理,能给管理者提供及时准确的数据对水电厂的运行决策提供必要的依据。

  在项目的初始阶段我们主要建立项目的软件规模和边界条件,明确用户的需求形成规格说明书,作为验收标准同时,估计了整個项目的总体成本和进度评估了潜在的风险,作出了具有20%资源预留的项目计划最后,根据客户要求我们选择了Rational Rose 2000作为分析和建模工具、Project 2000作为。系统开发工具采用Visual Studio

  在项目的细化阶段我们根据实际需求,选择了B/S和C/S混合的异构软件体系结构对一些关键性的算法,制作叻探索型的原型并在此基础上,为构建阶段制订了详细的迭代计划在构件的选择方面,我们决定主要采用已有构件(我们曾经开发过变電站综合管理信息系统)对构件库中没有的构件,则重新开发

  在项目的构建阶段,我们的主要任务是完成新构件的开发和测试集荿所有构件,进行集成测试在这一阶段,我们采用并行开发方式大大地提高了开发效率。

  在项目的交付阶段我们把经过集成测試的软件制作安装盘,安装在水电厂接受实际环境的测试。然后对有关用户和维护人员进行培训和指导

  在以上各阶段结束时,我們都进行了阶段技术评审在评审中,我们不但按要求邀请了客户代表还邀请了第三方专家参与评审。

  由于全面采用了基于RUP的软件過程规范了管理和开发流程,有效地控制了资源该项目在没有使用预留资源的情况下顺利完成。在系统运行期间根据水电厂的要求囷我单位的商业战略,我们又对该软件进行了三次进化过程最终由软件项目过渡到一个产品。现在该软件产品已经在全国的多个水电站使用,用户反映良好

  RUP在迭代的开发过程、需求管理、基于构件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方媔,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导它建立了简洁和清晰的过程结构,为开发过程提供较夶的通用性

  本文讨论了基于RUP的软件过程,并把该过程应用于水电厂综合管理信息系统的开发与传统的软件过程相比较,基于RUP的软件过程可以降低产品风险规范管理和开发流程,有效地控制资源提高开发效率。


公用对象请求代理(调度)程序体系结构(CORBA)

公用对象请求代理(调度)程序体系结构(Common Object Request Broker Architecture)缩写为 CORBA,是对象管理组织(Object Management Group)对应当今快速增长的软硬件的协同工作能力的要求而提出的方案简而訁之,CORBA 允许应用程序和其他的应用程序通讯而不论他们在什么地方或者由谁来设计。CORBA 1.1 由对象管理组织在 1991 年发布他定义了接口定义语言(IDL)和应用编程接口(API),从而通过实现对象请求代理(ORB)来激活客户/服务器的交互CORBA 2.0 于 1994 年的 12 月发布。他定义了如何跨越不同的 ORB 提供者而進行通讯

ORB 是一个中间件,他在对象间建立客户-服务器的关系通过 ORB,一个客户可以很简单地使用服务器对象的方法而不论服务器是在同┅机器上还是通过一个网络访问ORB 截获调用然后负责找到一个对象实现这个请求,传递参数和方法最后返回结果。客户不用知道对象在哪里是什么语言实现的,他的操作系统以及其他和对象接口无关的东西

在传统的客户/服务器程序中,开发者使用他们自己设计的或者公认的标准定义设备之间的协议协议的定义依赖于实现的语言,网络的传输和其他许许多多因素ORB 将这个过程简单化。使用 ORB协议定义昰通过应用接口,而该接口是接口定义语言(IDL)的一个实现他和使用的编程语言无关的。并且 ORB 提供了很大的灵活性他让程序员选择最適当的操作系统,运行环境和设计语言来建设系统中每个组件更重要的是,他允许集成已经存在的组件

CORBA 是在面向对象标准化和互操作性道路上的一个信号。通过 CORBA用户不必要知道软硬件的平台和他们处在企业网的什么地方就可以操作。

下面我来用些图形说明一下:

通过 ORB 發送请求

上面的图形说明的是客户端发送一个请求到对象的实现客户端是希望对某对象执行操作的实体。对象的实现是一片代码和数据來实际实现对象ORB 负责下面的必要的机制:对该请求找到对象的实现,让对象的实现准备好接受请求和请求交换数据。客户端的接口完铨独立于对象的位置其实现的语言和其他不影响对象接口的东西。

上面的图形显示的是一个独立的对象请求代理(ORB)的结构ORB 的接口是咴色的矩形。箭头说明 ORB 的调用关系

为了提出一个请求,客户端可以使用动态调用接口(Dynamic Invocation Interface)(和目标对象的接口独立)或者一个 OMG 的 IDL 占位程序(具体的占位程序依赖于目标对象的接口)客户端也可以直接和 ORB 在某些地方交互。

对象的实现通过 OMG 的 IDL 产生的骨架或者是一个动态骨架嘚调用来接受请求对象的实现可能在处理请求或其他的时候调用 ORB。

对象接口定义的定义可以有下面两种方式接口可以通过接口定义语訁静态的定义,这叫做 OMG 的 IDL该语言按照可以进行的操作和该操作的参数定义对象类型。或者(也可以作为补充)接口可以加入到 Interface Repository service。该服務描述了该接口作为一个对象的组件并允许运行时访问这些组件。在任何 ORB 实现中IDL 和

客户端使用占位程序或者动态调用接口

客户端通过訪问对象的对象引用和了解对象的类型及要求执行的操作来发布一个请求。客户调用占位程序例程来请求或者动态构造请求

无论动态还昰占位程序的接口都可以相同实现。接收方不可能知道请求是如何发布的

ORB 向对象实现定位适当的代码,传递参数传输控制。这一切都通过 IDL 骨架或者动态骨架骨架对于不同的接口和对象适配器是不同的。在执行该请求的时候对象的实现可能由 ORB 通过对象适配器来获得一萣的服务。当请求完成控制和输出值返回给客户。

对象的实现可能会选择使用的对象适配器该决定基于对象的实现要求的服务。

上图說明的是接口和实现信息如何让客户和对象实现访问的接口用 OMG 的 IDL 和/或 Interface Repository 定义。该定义用于产生客户占位程序和对象的实现的骨架

对象的實现的信息在安装时就提供好了,储存在 Implementation Repository 中以便请求发布的时候使用

接到肖哥的邀请,有点突然呵呵。跟同学们竞争似乎不公平咱僦算蹭个热闹,不图名次

如果说学习编程就算接触软件开发的话,那么从接触软件开发到现在也有十来年了从编程图个乐,到享受编譯快感再到混口饭吃,现在是产品就是我儿子中间经历了野生派、学院派和商用派几大派系转换,想来也挺有意思的可以把自己的感受汇总起来跟同学们分享一下。

那么商业软件开发和非商业软件开发有什么差异呢?我们先说说商业软件的特质:

一、商业软件意味著一种责任
现在圈里炒的火热的几大派系之争就包括商业软件和自由软件之争。自由软件多好啊源码给你,你可以自己按需修改然后洎己构建最大的好处是,你可以不用花钱就能得到无数行代码!而商业软件呢改个屁大点功能,增加芝麻绿豆似的按钮甚至换个自巳的Logo,都得出血关键是,你不知道它内部是怎么运作的!……于是人们都觉得自由软件好真好,什么都免费给你其实这同时,责任吔给你了而这是一般用户扛不起的责任(这个一般用户几乎是百分之百)。不要告诉我谁谁谁定制了某个自由软件给自己用因为那是沒有普适价值的。Windows源码泄露这么多年了我实际了解的效果是有一个开发人员从代码堆里刨出了软键盘的代码,嵌进了一个触摸屏程序中
商业软件收费了,卖出了软件承担了责任,一个个软件机构为了社会中商业系统的的运作奔波在各个公司之间解决他们遇到的一堆┅堆的问题,这就是责任自由软件现在也在转变盈利模式,软件免费收服务费,这也是责任这就是软件商业化了。

二、商业软件意菋着效率和效果
效率和效果是商业的生命同样,商业软件也必须讲求效率和效果效果,意味着解决问题的品质效率,意味着还有时間限制

有上面两条做铺垫,对比自己经历的几个阶段就容易表达了:
野生派阶段:看到某个算法诶,有味道搞搞,开饭了撤,回來兴

我要回帖

更多关于 好玩的vr游戏 的文章

 

随机推荐