Archive for 软件工程

zz用例建模 统一用例方法

http://www.uml.org.cn/oobject/images/UUCMvA0.pdf

用例建模指南

傅纯一, Rational中国区技术销售经理, IBM中国有限公司软件部

简介: 用例(Use Case)是一种描述系统需求的方法,使用用例的方法来描述系统需求的过程就是用例建模。用例方法最早是由Iva Jackboson博士提出的,后来被综合到UML规范之中,成为一种标准化的需求表述体系。用例的使用在RUP中被推崇备至,整个RUP流程都被称作是”用例驱动”(Use-Case Driven)的,各种类型的开发活动包括项目管理、分析设计、测试、实现等都是以系统用例为主要输入工件,用例模型奠定了整个系统软件开发的基础。

在介始用例方法之前,我们首先来看一下传统的需求表述方式-”软件需求规约”(Software Requirement Specification)。传统的软件需求规约基本上采用的是功能分解的方式来描述系统功能,在这种表述方式中,系统功能被分解到各个系统功能模块中,我们通过描述细分的系统模块的功能来达到描述整个系统功能的目的。一个典型的软件需求规约可能具有以下形式:

Read more

Facebook 如何发布代码

Facebook 如何发布代码 (How Facebook Ships Code 译文)

网址: http://www.dbanotes.net/arch/facebook_how_facebook_ships_code.html

按:这篇 How Facebook Ships Code 提供了大量的细节信息,之前已经有朋友提供了一个翻译版本,阅读之后发现有些许错误,并且原文有更新,所以基于前面的翻译版本我重新翻译了一个(完整的)版本。一并谢过。希望这个版本对大家也有所参考。

我对 Facebook 的运作方式着迷。这是个非常独特的环境,很难被复制(这个方式并不适合所有的公司,即使有些公司尝试过这么做)。下面这些笔记来自我和Facebook的许多朋友的交谈,关于他们开发、运维与软件发布等方面。

好像很多人都对 Facebook 感兴趣… 这家公司的工程师驱动文化(Developer-driven culture)已经被公众大加研究,并且其它其它公司也在探求是否/如何实现工程师驱动文化。Facebook 的内部流程实在够神秘,当然,工程师团队也会发布一些关于新功能以及部分内部系统公开备忘,不过这些大多数是”说明”类的文章(What),而非讲述”机制”(How)… 所以,外部人员很难明白 Facebook 的创新以及如何比其它公司做到更有效的对服务进行优化。我作为外部人员尝试深入理解 Facebook 的运作,汇集了几个月来的这些观察信息。出于对信息来源的隐私保护,我去掉了特定功能/产品的名字。我又等了6个月以后才发布这些记录,所以,有些信息肯定过时了。我希望发布这些信息会有助于了解 Facebook 的管理机制如何在组织中进行决策的推行而非逐步陷入混轮…很难说这与 Facebook 的成败或是 Facebook 的产品协作相关。我相信很多面向消费者的互联网公司会从 Facebook 这个案例受益。

*非常*感谢那些帮助我整理这篇文章的 Facebook 内部的朋友们。也要感谢项 epriest 和 fryfrog 这样的朋友,他们协助我进行对本文进行校正、编辑。

记录: Read more

产品经理,你是否郁闷?

产品经理,你郁闷吗?
这些年,大伙儿对于产品经理这个岗位的评价,总结而言就是两个字:“郁闷”。
为什么郁闷呢,因为没有实权啊。当然没有实权的产品经理现象主要分布在中小型企业,尤其是小型企业,这类型企业的产品经理更像是一个需求分析的角色,另外由于产品经理自由能力及影响力不够,导致“郁闷的现象”出现。在这里我想跟产品经理们说:“在产品经理这个大环境尚未完全成熟的时候、产品经理文化尚未本土化的时候,把主要的精力放在能力的锻炼上更合适”。
下面给大伙儿推荐一篇产品经理相关的文章《郁闷的产品经理》,这篇文章把产品经理的现象描绘出了一部分:
一个非产品导向型的公司,产品经理往往都会比较郁闷,原因就是没有授权。
开发了一个产品,从功能本身来讲没有什么太大的缺陷,需要的东西基本都实现了,用户反馈也还好,但使用率就是提不上去。说实话,不怪用户,费时费力又没什么明显好处的事情,不能说绝对没有人干,但是要大规模地推广恐怕还是比较难。
于是就回到了产品逻辑的环节,到底怎么激励用户来使用产品呢?没错,这个是在产品设计之初就应该解决的问题,也就是机制的问题。产品出来了,调整就需要成本,不调整又能怎么办呢?接下来就是大家都郁闷了。
技术团队同事的签名是:“提需求永远是最简单的!”一语中的,只是略有片面。
产品经理是个什么角色呢?作为一个独立于商务、运营、技术这种架构之外的横向组织结构的领导者,产品经理可能需要负责一个产品从需求调研、产品定义及设计、开发管理、产品推广、效果评估和反馈、产品改善等一系列环节的运作,并始终关注产品的生命周期。
设置产品经理这个角色的初衷,就是为了打破部门间纵向调度的效率障碍,用横向整合的方式来提高产品开发效率,作为公司运营中的一支尖刀,解决最关键、最重要的问题。这就需要产品经理本身的能力非常强大。一个合格的产品经理需要有很强的沟通、学习、组织、领导能力,又需要有商业敏感度,还要有比较强的细节和流程掌控能力。虽然我不是产品经理,但是从一个旁观者的角度来看,在这些能力中最重要的是沟通能力,特别是无授权的情况下的沟通能力。
大部分的公司都是业务导向型,公司的资源都向业务倾斜,业务部门掌握的权限也更大一些,产品经理作为业务的重要辅助角色,所担负的责任和所拥有的权限可能并不相符。这个时候,产品经理如何在没有授权的情况下调动公司的内部资源,就完全看个人的水平了。
没有授权的情况下要推动产品进度,等到有了一定的成效,进而获得授权之后,又需要承担一旦产品达不到预期效果甚至是失败的责任,产品经理就是这么一个倒霉的角色。
回到技术团队同事的签名上,提需求永远是最简单的。这话说的意思是站着说话不腰疼的业务和运营团队,通常根据自己的情况提出一堆需求,然后对产品又没有什么把握,有时候甚至自己都不知道自己要的是个什么东西。产品经理需要挖掘需求,然后将需求具体化,进而用产品来满足需求,这中间哪个环节出了差错,责任都得产品经理来背,憋屈就是常有的事了。
但是要看到打仗永远是双方的,只有一家想打是打不起来的。产品出现问题也是双方的责任,起码沟通不畅这点就要各打五十大板,所以这句话还是有点片面。
公司的产品和技术都是好样的,一直能很好地响应需求,但产品开发仍然会出现问题。这个时候提需求的应该考虑一下我有没有想明白、说明白我要的是什么,而满足需求的应该站在提需求的角度上来思考到底需要的是什么东西,这个东西该怎么设计、怎么用才好。这个中间,可能最重要的还是沟通。
沟通这词多俗啊,好像所有的问题都可以那它来说事。但你得承认,很多事情的关键,还就是“沟通”二字。

而沟通是一门艺术~~~并不是每个人都能通过后天的锻炼能够加强沟通的能力的~当然技巧还是能够掌握的~排解产品经理郁闷的最佳方式也只有多多沟通了~~~呵呵

权衡的艺术-产品经理如何把产品做成功?

产品经理如何把产品做成功?

那其实就是一门权衡的艺术~并且我觉得产品经理和架构师的处境类似~产品经理需要和架构师多沟通才行~(当然这么说的话就针对比较“大”的产品了~对,本文不针对“小”产品)

产品经理如何把产品做成功呢?这个是大多数产品经理每时每刻在思考的问题。
“做正确的事”和“把事情做正确”这两个要素对于一位优秀的产品经理而言,因该是双向的,“做正确的事”更多时候是把握产品的方向和蓝图;在一些产品体系健全的公司,这项工 作主要是由公司的产品线经理或者产品总监去完成。而在现实的中国IT企业中,这项工作往往是由产品经理去完成。
那对于产品经理而言“做正确的事”,究竟应该怎么做呢?
如果想把一个产品做正确,就必须把握清楚这个产品的需求,这个需求主要从N个方面进行一个描述:
客户的需求对 于一些有甲方的企业来说,客户需求是放在第一位的,因为他们很清楚一件事,如果客户不满意,那还有何用户可言,客户对你的产品不肯定、产品不能满足客户的 需求;那这 个产品问世的可能性不大。所以说客户的需求尤其重要。所以产品经理在做产品蓝图规划时,必须要弄清楚客户空间想要什么,并想清楚客户的这个要求,如何在我 的这个产品里 做体现,更优秀的产品会考虑的更长远一些,及如何把客户的需求与产品完美结合。如果你的产品方向或思路得到客户的认可,对于后台的产品推广方面,将会得到 客户的更多关 注和支持。
公司的内部需求公司的内部产品需求,要从N个方面去阐述。
公司高层对产品的期望产品经理必 须要弄清楚,公司的高层对你所规划的产品,持有怎么样的期许,在公司的战略规划里,你的产品的方向和里程碑式的目标又是怎么?你所设计的产品如何给公司带 来 最大化的利益?你所设计的产品是否与高层的期望是一致的?这些疑问都是产品经理要去解决的,通过与高层的不断沟通,必须要弄清楚高层对于产品的深层次需求 是什么,当你 的产品规划案得到公司高层的认同时,你的产品工作就又上了一层台阶,在产品的天平上又增加了一块生要的法码。
公司的运营部门的需求有些公司的产品建设完成后,要交由公司的运营部门的,运营部门要去完成产品上市后的一系列运营事务。因为你的产品做出来后,是要给运营部门来运营的,你的产品设计是否合理,有一项重要指标就是运营人员在使用了你设计的产品之后,相关的转化率有没有提高?有没有有效的降低了运营的成本。产品经理必须要弄清楚运营部门需要解决什么样的问题?要实现什么样的目标?你所设计的产品有没有有效的解决运营部门的问题,就显得尤为重要。
公司技术支撑部门的需求有些人不禁会想这个产品做出来后是给运营部门去运营的,技术支撑部门的需求真的需要考虑吗?这里的答案是肯定的。技术支撑部门对于产品的设计更多时候有自己的想法,有 时是降低产品的开发成本,实现重用性。
用户需求说到这儿,估计很多UED团队的朋友要跳出来,可能会大声疾呼:“这哥们到底懂不懂啥叫以用户为中心的产品设计啊?”当然“以用户为中心的产品设计”,是产品人员所追求的一个 目标。对于一些没有甲方的客户,UED团队当然是设计以用户为中心的设计。
我曾经遇到过一些情况,在充分以用户为中心的产品设计后,用户在体验上确实得到了一些改善,用户是用得爽了,但是运营部门却无法完成他的指标。也没有 达到高层的满意。 这种情况时常发生,所以对于产品经理而言,“做正确的事”这个方向上是相当有挑战的,有经验的产品经理可以很好的把这些需求点进行梳理和统一规划,很清晰 的完成操作。
当产品经理把产品牵涉相关的需求都考虑在内的话?那么成功的方向就离我们不远了?
话虽这么说~但是这样做很难~先来看一张图:

image

涉众利益相关人的影响

上图其实是架构师的处境(图片来自 SoftWare Architecture in Practice 一书)~非常生动展示了架构师因为不同涉众利益人提出的各种要求而崩溃了~
The Architecture Business Cycle 对一个软件持续发展的影响就体现在了图中~一个软件一个产品一种软件架构不仅涉及上面所提及客户,高管,技术人员的影响~~并且在产品的后期 持续性的受到运营人员 维护人员 市场推广人员的 影响~我所谓的影响就是需求的抛出~

image

在公司里产品经理会时不时的对技术人员提出某个需求~而产品经理的上头会有一堆人对他提出需求~~这么看来技术人员是最辛苦也是最核心的人员了~呵呵~高级技术人员可以抑或说架构师,他们又凌驾在一般程序员之上~对产品进行整体蓝图规划。然后产品(软件或者说软件的架构)在完成开发之后~再运营维护阶段必然对运营人员~维护人员等产生influence~然后有返回来影响到这个产品~~

这个就是所谓的 The Architecture Business Cycle!简称ABC

image

The Architecture Business Cycle!

最后我们回到本文的主题:产品经理如何把产品做成功?

根据ABC原理 一个成功的产品是具备 可维护性 易用性 可测试性 等重要质量属性的!所以不能在产品的初期只是更具业务需求来规划产品。不然后期维护可能会很吃力~就是说需要在产品规划的初期对客户的需求进行考虑之外 还需要对后期维护可能会发生的问题进行科学的搜寻规划~(其实这些学科在国外都已经很发达~SEI早就有相关的Golden Practice-CMM CMMI等 后面的文章我会介绍~)

并且在自己的公司环境下~在权衡所有环节的情况下着重突出最需要的产品设计~这个绝对值一门艺术~而不是科学了~因为这个没有可重复性实践的可能~每个公司都不一样的环境就会导致不同的环境~即使客户需求一样~不同的工作环境就有不一样的总体需求!就会有不一样的最终产品~

我引用一句话:If it is true that, given the same technical requirements for a system, two different architects in different organizations will produce different architectures, how can we determine if either one of them is the right one?

这句话就是我上面所说的:即使客户需求一样~不同的工作环境就有不一样的总体需求!就会有不一样的最终产品~

所以产品经理要想把产品做成功不仅需要充分理解显性需求,还需要充分挖掘自己所处的环境所带来的隐性需求!并且做出在不同隐性需求之间的权衡~很清楚~这已经不是科学~就是艺术~

把产品做成功是一门权衡的艺术!

本文参考:

http://www.xiuze.net

http://etutorials.org/Programming/Software+architecture+in+practice,+second+edition/

无觅相关文章插件,快速提升流量