Archive
收集需求的方法
[#2: Edit Options>MightyAdsense>Adsense Code]
好的需求需要有好的收集方法,比如如下需求源:
1、顾客
2、用户
3、系统管理员和维护人员
4、合伙人
5、领域专家
6、行业分析家
7、竞争对手的信息
Good requirements start with good sources. Finding those quality sources is an important task and, fortunately, one that takes few resources. Examples of sources of requirements include:
- Customers
- Users
- Administrators and maintenance staff
- Partners
- Domain Experts
- Industry Analysts
- Information about competitors
需求收集技巧
- 组织头脑风暴会议
- 访谈用户
- 发送问卷
- 在对应行业环境下工作
- 学习类似的系统
- 分析建议和问题报告
- 和支持团队谈话
- 学习由用户所作的改进
- 观察不期而遇的用户
- 引导workshops
- 给股东演示原型
Requirements Gathering TechniquesTo get the requirements down on paper, you can to do one or more of the following: - Conduct a brainstorming session
- Interview users
- Send questionnaires
- Work in the target environment
- Study analogous systems
- Examine suggestions and problem reports
- Talk to support teams
- Study improvements made by users
- Look at unintended uses
- Conduct workshops
- Demonstrate prototypes to stakeholders
将需求快速的纪录下来,然后鼓励用户去说服提高他们,并重复这些需求。马上去做、保持小、立刻改正。最好能够从你设计的结构上开始,杜绝从流程上修正。
成功的提示:Do it now, keep it small, and correct it immediately.
The best idea is to get the requirements down quickly and then to encourage the users to correct and improve them. Put in those corrections, and repeat the cycle. Do it now, keep it small, and correct it at once. Start off with the best structure you can devise, but expect to keep on correcting it throughout the process. Success tips: Do it now, keep it small, and correct it immediately.
Conduct a brainstorming session
Brainstorming is a short group session where everyone is allowed to say whatever they feel is important to the topic of discussion. After that, a facilitator leads the group in organizing and prioritizing the results. The following basic rules for brainstorming ensures better results:
头脑风暴会议是一个简短的集体会议,与会人员畅所欲言,主持人带领大家进入秩序并优化会议结果。以下是一些基本的规则:
- Start out by clearly stating the objective of the brainstorming session.
- Generate as may ideas as possible.
- Let your imagination soar.
- Do not allow criticism or debate while you are gathering information.
- Once information is gathered, reshape and combine ideas.
- 清晰确定会议对象入手
- 尽可能引导鼓励大家发言
- 让你的想象力翱翔
- 在你收集信息的时候不允许评论或者评论
- 信息一旦收集,就要从新整理和组合
Interview users
Face-to-face contact with users through individual interviewing is the primary source of requirements and an important way you gather and validate their requirements. Remember that it is not the only possible technique, and that you can conduct interviews many different ways. Develop a repertoire of styles to fit different situations. Unless you use the system yourself, you will need to make an effort to understand and experience the user’s problem to describe it clearly and correctly.
- 访谈用户
面对面访谈是非常主要的手机需求的方法,但是你不要觉他是唯一可能的方法,也许你可以不同的方式进行。准备一个提纲来应对不同情况吧。除非你自己在使用这个系统,那么你需要努力去理解用户的问题并正确清晰的表达出来。
Send Questionnaires
If face-to-face meetings are possible, they are always preferable, because they provide a better means of uncovering the problem behind the problem. Sometimes, though, face-to-face meetings with stakeholders are not feasible (when developing products for the consumer market, for example). In those situations, consider using questionnaires. Send a set of questions, possibly with multiple choice responses, to the relevant stakeholders, and ask them to complete it and return it to you. Success tips: Keep it short and given them a deadline.
面对面访谈当然是最好的,但是某些情况下发送问卷也是必不可少的,需要注意的是:
1、问卷简短
2、标出截至日期
This technique has the advantage of providing a lot of information for statistical analysis. However, the questions must be well designed to be clear and to avoid so-called “leading questions”, which bias the responses.
能够提供许多分析统计信息,然而需要问题清晰便于回答。
Work in the target environment
Experience the work of the users for yourself. Working with users helps you understand problems that have resisted previous solutions. Familiar systems developed in this way inevitably include tools for programmers, such as interactive editors and compilers, as the developers naturally have both the expertise in the subject area, and the desire to solve their own problems. It would be good to see the same dedication devoted to solving problems in other areas too. Where the work cannot easily be experienced in this way, it may still be possible to do a bit more than just sit quietly and observe. Users can give you a commentary on what they are doing, what the problems are, and what they would like to have to make the work easier.
与用户一起工作可以帮组你理解之前一直反对的解决方案。当你发现之前你是错的话,你就会反省你的错误。即使这样不能完全进入对方的工作,但至少可以容易理解一些问题。
Study analogous systems
The starting point for many projects is often a similar or an existing system. Sometimes, comparable products and systems contain working versions of good ideas for solving user problems. You can save the time lost in reinventing the wheel by looking at systems already on the market, whether they are systems installed at the user’s site or products made by rival organizations. Even if they are trying to solve slightly different problems, they often provide valuable clues as to what you need to do.
竞争对手的产品可能会很好地解决用户的问题,你要用心投入时间在市场上的该类产品,即使他试图解决一些微不足道的问题,他们通常可以提供给你一些有价值的思路。
Listen when a customer asks why a product couldn’t do something that the customer wants, and keep a list of these suggestions. Later, use it to start discussions with other users. You should be able to obtain some requirements directly this way. If not, capture and store suggestions for future use.
纪录并保留顾客提出的关于产品的建议,然后用这些记录作为和另一些用户讨论的话题。通过这种直接的方式,你应该能够获得一些需求,如果没有,也要留下来备用。
You can describe to users selected features of other products. Explain that the system is designed for another purpose but contains an interesting feature, and you wonder it or something similar would help them. Sometimes these systems are described in documents, such as a contract from another organization or a report written for management. Often, these documents were never intended as formal requirements, and were written merely to communicate a stream-of-consciousness idea. Define a process of going from disorganized to organized information.
区分正式需求和非正式需求,非正式需求需要一个流程使之组织化
Such a process might involve the following activities:
- Read the document from end to end (several times) to comprehend what the customer wants and what actually has been written.
- 多次阅读确定哪些需求已经记录那些还没有
- Classify all of the types of information in the document. (user, system requirements, design elements, plans, background material, irrelevant detail)
- 按照用户、系统、设计元素、计划、背景资料、不相关细节分类
- Mark up the original text to separate out such requirements.
- 标记原始文本以便于与需求区分
- Find a good structure for each of the different types of information such as: a scenario for the user requirements, functional breakdown for the system requirements, and architecture for the design.
- 为这三类信息寻找一个好的结构,如用户需求、功能(系统需求)、信息的设计
- Organize the information to show gaps and overlaps. Feel free to add missing elements, but confirm these decisions with the users.
- 说明差距和重叠。悠闲的加入备望表,但是要与用户确定这些决定。
- Create traceability links between these information elements to show the designers exactly what the users want.
- 在这些信息元素之间建立可跟踪的连接,可以准确地向设计师们表达用户所需要的东西。
Convince the customer to accept the new information as the basis for the contract. - 说服客户接受新信息作为基础和约。
【笔记】- 软件需求最佳实践
[#3: Edit Options>MightyAdsense>Adsense Code]
原理、模型 与 误区
需求实践现状分析
CHAOS Report: 31.1%项目彻底失败,52.7%项目进度超期或者成本超支,被认为成功的项目16.2%;
针对项目分析有十大成功保证 和 十大败因
| 成功因素 | 失败因素 |
| 用户参与 * | 不完整的需求 * |
| 执行层的支持 * | 缺乏用户参与 * |
| 清晰的需求描述 * | 资源不足 |
| 合适的规划 * | 不切实际的用户期望 |
| 现实的客户期望 | 缺乏执行层的支持 |
| 较小的里程碑 | 需求变更频繁 |
| 有才能的员工 | 规划不足 |
| 主权 | 提供了不再需要的 |
| 清晰的愿景和目标 | 缺乏IT管理 |
| 努力的工作和稳定的员工 | 技术能力缺乏 |
| 其他 | 其他 |
需求相关败因简要分析
不完整的需求: 需求规格说明书应该采用业务导向的树形层次结构来组织;
缺乏用户参与:对于需求分析员而言,真正的专业主义是基于业务利益(解决问题、创造机会、提高控管力等)的沟通;
不切实际的用户期望:软件的无形 和 成本的不透明
需求变更频繁: 没有确定需求变更类型,没有对需求变更进行分类和统计;
提供了不再需要的:基于业务领域知识来衡量需求的必要性和充分性是解决之道;
沟通失真: 文档,Review(再看一遍),缓解沟通失真最有效的方法是及时复述;
客户的需求放大: 客户希望支付的成本尽可能少,获得的效益尽可能多;解决方案的选择权交给了不熟悉技术的客户;
项目经理的需求控制: 从业务为线索来组织需求,基于“Why”的层面对需求建立高层次的认识;
分析人员的技术加工: 需求分析的本质在于业务分析,而非技术分析;
编码人员的断章取义: 业务场景;
需求变更频繁: 流程变更,数据字段,业务规则。。。;
上线阻力大: 利益冲突、工作量增大:易用性、价值化 和 数据迁移,准备工作迁移出来;
运行效果差: 从障碍和困难出发;
完全崩溃: 对非功能性需求缺乏范围描述。
软件工程方法论: 对预设计的需求是评判敏捷方法论是否适用的关键;
开发思想: 成熟度、溯源、了解局限性;
不同软件项目的需求范围
信息系统的需求视图
数据信息化;
联机事务处理
流程是联机事务处理系统需求视图的关键线索,流程分析(业务事件)是OLTP系统的关键线索和主要视图,结构化分解过早考虑程序结构 和 流程分析相对零散
管理信息
报表分析是MIS系统的关键线索和主要视图,Why-What-How
决策支持
结构化 & 非结构化,决策场景是DSS系统的关键线索和主要视图
专家系统
工作场景是专家系统的主要线索和主要视图
办公自动化
并行工作流是OA系统的关键线索和主要视图
高层管理人员的关注点往往在问题和机会
嵌入式系统的需求视图
对面向用户的嵌入式系统,行为分析师要点;
面向特定设备的嵌入式系统,外部接口和事件分析是要点。
软件需求与需求工程
软件需求
业务知识 + 问题列表 + 其他因素。
需求的三个层次: 业务需求,用户需求 和 软件需求。
需求三种类型: 功能需求,非功能需求,设计约束;
- 功能需求:要点在于如何组织;
- 非功能需求:在于保证信息的有效传递和注意其局限性;
- 设计约束技术选型、预期的软硬件开发环境 和 预期的使用环境。
优秀需求的标准:完整(用户验证,不同层面),不失真,优先级(不同角度,必要性(满意、不满意)),有技术早期介入。
需求工程解析
需求获取: 化被动为主动式关键;
需求分析: 向下分解 + 向上提炼,外加一些规范化;需求分析是目标,需求建模是手段;
编写规约: 编写规格说明书时,应确保一类信息只在一处描述;
需求管理
划分出大小合适、粒度均匀的需求项是需求管理的前提;需求优先级和工作量估算是基线管理的关键;引入变更管理;引入需求跟踪;
需求分析人员的技能组成
倾听、交谈和提问的技巧、分析、协调、观察、协作、组织、建模、人际交往和创造能力
需求开发
需求定义最佳实践
清晰的项目目标和范围定义,能够引导需求工作顺利进行;
对混沌不清的目标,可以通过内部寻根或外部溯源来破解;
问题分析五步法:
- 在问题定义上达成共识;
- 采用统一的格式
- 问题定义的技巧:转换,本源
- 在思考问题解决方案时一定要思考是否引发新问题
- 直接修改错误,不要用其他方案来弥补错误
- 理解根本原因,也就是分析问题背后的问题;
- 鱼骨图:选择问题、头脑风暴、确定问题类型、分配原因、分析根本原因、小结
- 帕累托分析 80/20 法则
- 鱼骨图为解决问题找到了靶子,帕累托图则表上了环数
- 确定相关人员和用户;
- Stakeholder 解析;
- 用户分析;
- 定义解决问题的界限;
- 范围 & 边界
- 确定边界
- 边界谈判
- 创新边界
- 确定加上解决方案的约束。
需求定义的产物:项目综述 和 愿景;
定义需求范围: 案例说明,划分主题域,使用构件图。
问题域之间的服务接口是需求变更的防火墙;
构件图是系统模块化的一部分;
构件与接口之间的关系:使用 与 实现;
确保能做的事和知道的事相匹配时职责驱动设计的要点;
确定主题域范围
绘制上下文关系图,先考虑Customer再考虑Worker是要点;
标识业务事件与报表,业务事件是主动触发的,并且将会产生一系列的后续行为,业务事件是直接作用于系统的,也就是将触发系统行为。
根据 上下文关系图、构件图,业务事件与报表就可以生成需求大纲
需求捕获最佳实践
需求捕获的行动应该是主动的,聚焦的,破解由 意识到的需求、无意识的需求、和未梦想的需求所组成的冰山模型。在需求捕获过程,要注意常见的心理现象:
- 言过其实;
- 越俎代庖;
- 非正事心理;
- 抗拒心理;
- 推卸责任心理。
可以采用 需求协商,共赢性谈判,转换技巧(相对重要->相对次要、关注点转换、隐喻)来应对忽视对变更的捕获的问题。
在实践过程中,我们有 用户访谈、用户调查、文档考古、情节串联板、现场观摩、联合开发。
在捕获工具上,我们可以选择 任务卡片、场景说明、Volere白卡 等。
NOTE:作者很多例子举得生动
例子 1 :渴了,要喝水!
三岁小孩:妈妈,我渴了!
成年人: 进入办公室,问同事,有水吗?
领导: 进办公室,这里应该放个饮水机了!
C现象,D现象等
需求分析与建模最佳实践
需求分析是先分解,再提炼,在过程中消除矛盾。分解可以按照 业务流程、程序结构、场景、数据来进行。
建模的目标是按照实际情况按照需要的样式对系统进行可视化;提供一种详细说明系统的结构或行为的方法;给出一个知道系统构造的模板;对我们做出的决策进行文档化。
建模应遵循:
- 选择创建何种模型对如何动手解决问题和如何形成解决方案有着深远的影响;
- 每一种模型可以再不同的精度级别上显示;
- 最好的模型是和现实相联系的;
- 单个模型是不充分的,对每个重要的系统最好用一组几乎独立的模型去处理。
周期一:理清框架与脉络
业务流程分析,流程的6大特性:
- 目标性
- 内在性
- 整体性
- 动态性
- 层次性
- 结构性
解决流程变化问题的关键在业务的梳理,识别原子级别的业务点。
流程设计应以产品而非任务为中心,让那些需要得到流程产出的人自己执行流程,在决策点位于工作执行的地方,在业务流程中建立控制程序,流程多样化,单点接触客户。
流程改进的ESIA策略:清除低效环节,简化瓶颈点,整合资源,将繁琐的任务自动化。
业务流程是有层次的:部门级,组织级,和 岗位级,其中部门级是需求分析的主线索,岗位级是需求细节填充时的工作内容,组织级是对部门级流程的抽象概括。
业务流程是有类型的:生产性流程,管理型流程,支持性流程。
流程分析的产物为:跨职责流程图、活动图、数据流图。
在需求建模时应该大胆的启用中文命名类的属性。还讨论了业务实体分析,类图、用例图、E/R 图等。
经过周期一:产生 工作任务说明、业务事件分析、业务实体分析、角色-场景分析、报表分析。经过抽象和整理产生需求规格说明。
周期二:确定需求细节
需求描述最佳实践
自然语言、图形化模型、形式化规格描述
需求验证最佳实践
分层评审
需求管理
统一渠道,统一平台
ClearRequest, Mantis,BugFree
跟踪:表格法,链表法
总结
需求定义勿忽视
需求捕获要科学
需求分析要业务
需求建模要实用
需求评审要实效
需求文档要应用
[笔记]掌握需求过程(第二版)
本书以作者实际工作经验产生的所谓的“Volere”需求过程为主干,按照
什么是需求、需求过程。接着按照:项目启动、事件驱动的用例、网罗需求、场景和需求、功能性需求、非功能性需求、验收标准 八个方面描述需求。接着开始到了编写需求的部分,再到质量关,制作需求原型、需求复用、复查需求规格说明 部分确定需求质量,最后 需求何处去 阐述了作者对需求未来走向的开发。附录里则包含了作者的Volere需求模型。
什么是需求?
作者一开始并没有直接给出需求的定义,从另外的角度:需求和系统之间的关系,开始讲起,将需求理解为从开始至最终都存在的过程,不过是前期多,后期少的渐进递减关系。以兔子、骏马、大象三种比喻比较需求分别所在的不同层次。
接下来,引用了一些所谓的“名人名言”(Joe On Software,Code Complete),加上自己的观点说明需求的重要性。
需求是产品必须完成的事及必须具备的品质。
必须完成的 = 功能性需求;品质 = 非功能性需求;另外还有限制条件来控制范围。
需求的详细是需要演进的,在Volere提供的需求模板中将客户满意度替换了优先级,有点意思。将需求制作成卡片,一个一个来记录需求的实现进度。
需求过程
过程是为了更有效的收集需求,在需求过程的演进中,需要有上下文的限定,接着以IceBreaker为案例来解释之前提到的八个过程。
项目启动
项目三种类型兔子、骏马 和大象有不同的启动方式,在实际考量时以项目范围、风险承担者 和 目标。
项目范围的确定是指项目要干什么 和 不干什么,与风险承担者(客户、用户、顾客 等)的交谈易于理解项目范围。
目标是最高层次的顾客需求,可以将“目的、好处、度量标准 (Purpose, Advantage, Measurement,PAM)”帮助发现分析目标。
项目目标不仅仅是要解决问题,还要提供业务上的好处。
事件驱动的用例
事件驱动的用例是将系统划分为不同的领域,找出它们之间的关系(即 事件),这样可以帮助我们理解工作(高层业务需求),帮助确定用例及其范围。
系统关系分为 主动 与 自治的相邻系统 两种。自治系统与其他系统的关系一般是单向的。在实际操作过程中,又分为业务用例和产品用例,业务用例在决定业务范围,需求,而产品用例则是为了实现业务。在确定产品用例时也是在选择与产品交互的参与者。
网罗需求
需求分析师和用户协作收集需求。需求分析师需要承担:
- 观察和学习该工作
- 解释该项工作
- 发明完成该工作的更好办法
- 以需求规格说明和分析模型的方式来记录结果
具体实践方式:
做学徒、观察结构和模式、风险承担者访谈。其中访谈应该涉及到:
-
设定好访问进行的上下文;
-
使用业务用例作为谈话的中心;
-
问问题,听取回答,反馈理解情况;
-
画出模型,鼓励用户改正它;
-
使用风险承担者的术语和制品,包括概念上的和实物的;
-
保留制品的拷贝;
-
感谢风险承担者提供了他们的时间,并告诉他们为什么这是有价值的。
BTW: 其实我觉得有点废话的东西,这个跟沟通有很大关系,即使写下来也不全,不完整,所谓问题又分为开放式问题和封闭式问题,居然这哥们还提到了NLP,难道您会催眠吗?或者还是会那些模模糊糊的技巧!
还有其他的时间方式:找出工作的本质(流程)、解决正确的问题、创新的产品、业务用例研讨会、成果、场景、和业务规则。
对于需求的网络还可以由创造性研讨会、头脑风暴、和用户代表进行,思维图, wiki、blog 和论坛、文档考古学,家庭治疗、软系统和视角。(BTW:大哥,你就忽悠吧),最后确定产品应该是怎样的,问自己技术是否重要,选择最佳网罗技巧。
场景和需求
场景讲述了业务用例的故事,业务分析师使用场景向感兴趣的风险承担者描述业务用例。
讨论工作的正式语言将一些概念组织起来,这些概念将帮助人们学会关注工作。
根据业务专家提出的业务用例,作者建议利用3-10个步骤来编写场景,向感兴趣的风险承担者确认这个场景,分为:业务用例名称,用例和编号,触发器,前置条件,感兴趣的风险承担者,主动风险承担者 等。
优先考虑正常的场景,有助于考虑细节问题,在确定正常场景之后,写出异常场景,假设场景,并交与用户签字确认。
功能性需求
从业务角度来看产品必须做的事情,功能性需求必须足够详细地描述语气的产品将执行哪些活动。
在功能划分上,通过影响工作的业务事件对工作进行划分,对于每个业务事件,会有一个业务用例,并导致一个产品用例。
经验法则:
场景中包含3-10个步骤将给出合理的细节程度,又不会让某些业务风险承担者感觉太复杂
在编写功能需求上,注意细节程度,降低二义性可能,有时人们需要混合使用“必须”,“应该”,“将”等助动词说明需求优先级。
每项需求的细节程度应该以开发者能根据它写出正确的软件为目标,写下异常和可选方式,避免二义性。
技术需求纯粹是所选技术而需要的功能。技术需求不是因为业务理由而存在,是因为所选择的工作实现方式,建议要么使用单独的技术需求,要么清楚指明它是技术需求。
还有一些替代性做法,例如过程模型,数据模型 等。
非功能性需求
非功能性需求是产品必须具备的品质,或者它将事情做到了多好。它们让产品有吸引力、易于使用、快速、可靠,或安全。给每项需求加上验收标准,目的是澄清它使它可测试。
观感需求;
易用性和人性化需求;
- 针对不同人群;
- 用户接受率或采用率;
- 因为引入该产品而导致的生产效率的提高;
- 错误率(或错误率的降低);
- 多国界;
- 被没有计算机使用经验的人使用。
执行需求(可执行的需求);
操作和环境需求;
可维护性和支持需求;
安全性需求;
- 保密性;
- 可得性;
- 完整性;
- 审计(日志)
文化和政策需求;
法律需求(萨班-奥西利法案);
标准。
在提取非功能性需求上,作者建议
- 用BLOG + WIKI 提取需求;
- 用例;
- 模板;
- 利用原型得到非功能性需求;
- 直接和客户沟通。
最后,不要编写解决方案。
验收标准
让需求无二义、可理解、重要的是:可测试!
让每项需求都有一个质量测量标准的思想使得我们能够对所有对需求的解决方案分成两类:满足需求的和不满足需求的。
针对每项验收都应该有对应的测量尺度,给出验收的原因(理由),也是需求的原因或者存在的道理,对于非功能性验收标准应该是可测量的,比如:
在该产品引入的三个月内,60%的用户应该用它来完成规定的工作。
非功能性测试应该包含产品是否失败、主观测试、观感需求 等。
功能性测试针对完成的验收标准,需求规格说明必须包含验收标准中使用的术语的定义。
可以将验收标准应用于用例。
总之,验收标准时产品必须达到的无二义性的目标,需要有具体可测量的尺度来衡量验收是否失败?
接上篇: [笔记]掌握需求过程(第二版)(二)
编写需求
从业务的观点将产品的描述放在一起的任务。通常这种描述被称作规格说明,将这种活动看做“构建”需求规格说明是合适的:在需求过程中汇编一份需求规格说明,每次一项需求,而不是一次写成所有需求。
在能工作的软件胜过任何文档的问题上,作者认为能工作的软件很好,前提是能解决正确的业务问题。将需求形式化的目的在于确保所有感兴趣的风险承担者都同意该需求,让设计者和软件开发者能够第一次尝试就构建出正确的实现。
在网罗需求或制作原型时发现的需求并不总是准确的,有时候模糊,半成型,另一方面,所得到的需求规格说明是产品构建合同的基础。因此编写需求的侧无是变成准确(清晰、完整、可测试)的规格说明。
在开始编写需求并将它们汇集成规格说明书之前,花一些时间来考虑在需求过程中积累起来的知识或信息是值得的,从需求知识模型开始,信息者是概念模型 的要点,不必太在意它的格式。可以将知识模型看作是收集、管理和追踪的需求信息的一种抽象表示。(需求卡片?)应该考虑这些需求信息之间的联系,形成一个 组织良好的模型。
在作者的Volere需求规格说明书中,按目录分为
-
项目驱动
-
产品限制条件
-
功能性需求
-
非功能性需求
-
项目问题
共27个单项。
项目驱动
项目目标: 业务或项目工作的背景;
客户、顾客和其他风险承担者: 在产品中有利益关系的人;
产品的用户:直接和产品交互的人;
强制的限制条件
适用于整个产品的一些因素: 解决方案限制条件(强制规定了最终产品看起来要如何),当前系统的实现环境、伙伴应用或协作应用、立即可用的软件、预期的工作场地环境、时间进度限制条件、预算限制条件;
命名惯例和定义: 另一风险承担者使用的重要术语,包含模型的数据字典;
相关事实和假定: 一些外部因素、它们对产品产生影响,但不属于规格说明书的其他部分;
工作的范围:确定要研究的业务便捷;
产品的范围;需求项框架;
原子需求:编号、类型、事件、描述、理由、来源、验收标准;
顾客满意度和不满意度;优先级;冲突;支持材料;历史;
功能性需求
非功能性需求
项目问题
开放式问题;立即可用的解决方案;新问题;任务;迁移至新产品;风险;费用;用户文档和培训;后续版本需求;解决方案的设想;
质量关
可测试性;可最终性;统一术语使用;确定是否与目标相关;测试验收标准;确定在限制条件下是否可行;区分是需求还是解决方案;顾客价值;镀金需求;需求蔓延;
制作需求原型
为每个用例制作原型无疑是很好的办法,带来的工作量也是相当巨大的,然而通过用户确认,进行循环也是很有帮助的。
复用需求
复用当然是必要的,但是何种粒度的复用,复用方式又是如何就变得很关键了,复用从何处来呢?
复用来自工作范围的上下文,即所谓的领域模型,按照需求模式也可以帮助改进需求规格说明的精确性和完整性,通过业务事件模式的上下文,进一步了解细节,事件响应的处理、数据、通过抽象、跨领域等业务进行复用。
复查需求规格说明
讨论并确定需求规格说明是否正确和完整,并设定需求的优先级。
需求何处去
调整需求过程以适合项目;
记录和操作需求的工具;
发布需求,为了不同目的,与不同的人和组织进行交流;
在产品开发的全过程中追踪需求;
处理变化;
进行事后分析以改进您的过程。
总体来说,本书没什么多少新颖的地方,不过总体写的比较细,并没有对一些细问题进行深入探讨,比如需求冲突、模式复用、、导用户回答正确的问题,都提了一些自己的方法,深入下去,还需要进一步探讨了!
BTW:
需求模板Volere:Volere Requirements Resources
[笔记]软件需求模式
本书结构
- 了解需求过程
- 需求模式目录
本文是 了解需求过程 的阅读笔记。书籍地址
需求是定义系统需要做什么而不是怎么做。需求是系统必须满足的单一的、可测量的目标,必须没有二义性,陈述了系统所有需求及任何使温昂更容易阅读和理解的背景材料。
在内容方面,一般包括功能性需求和性能、规格等非功能性需求。对于传统的需求模式来说,一般是:
还有敏捷的需求方式,它应该满足四个基本原则
- 定义问题,而不是解决方案;
- 定义系统,而不是项目 ;
- 区分正式和非正式部分;
- 避免重复。
按照具体方式分为 极限 和 增量。
与传统的 准备,收集信息,编写需求规格草稿,评审规格 和 评审后修改 比较,敏捷需求流程满足两个指导原则:
- 区分问题和解决方案是重要的;
- 定义需求后,一定要记录它以便别人可以找到。
按照实践上来说,极限需求流程要求用户编写完整的用户故事。根据用户故事分配给开发人员,首先编写测试用例(验收测试),以需求的方式写下来,总以它使用需求模式的方法有三种:
- 为用户故事及其内容提供建议(更准确/更像需求);
- 更系统化的方法解释用户故事,揭示需求,同时识别需要增加的额外功能;
- 指导建立整套“公共需求”,特别是所有开发人员应该遵循的良好实践的规则。
对于增量需求流程,它要求前期做最少的需求工作,尽可能早开始开发。分两点:
- 前期充分的定义需求,是客户相信已经理解了他们对系统的期望(确信获得业务目标),获得客户批准后进行;
- 当开发人员准备后开发一个特定的部分时,扩展那部分的高层需求,定义满足高层需求的系统需要的所有详细需求。
在确定需求大致流程后,就进入需求规格的内容,一般来说,分为
在进入的实际的需求工程阶段,总有一些系统需求本质上彼此类似,或者他们出现在大部分系统中,以一致的方式定义同样类型的所有需求是有必要的,因此我们引入需求模式。它定义为:
需求模式:定义一种特定类型需求的方法
使用它,我们可以提供指导、节省时间、并且促进同种需求的一致性。一些需求模式要求或者鼓励定义一些额外需求:跟随性需求、普遍性需求。模式有不同的详细程度和价值,它需要描述什么时候使用模式以及基于模式如何编写需求。还可以提示如何实现以及如何测试这种需求,为了达到目标,包含如下要素:
- 模式名称,唯一的
- 基本细节,声明、领域、相关模式、预期使用频率、模式分类和作者
- 适用性
- 讨论,如何编写这类需求,需要考虑什么?
- 内容,必须描述什么?可能描述额外的?
- 模板,编写可能基于一个或者多个出发点
- 实例
- 额外需求,通常跟随什么需求?普遍性系统级需求?
- 开发考虑,提示!
- 测试考虑,决定如何测试什么时,必须记住什么?
给模式分配有助于条理化,内容上,信息是关于信息存储和CRUD的;数据实体是关于如何处理特定种类的数据;用户功能是一些公共类型的功能,加上易 用性;性能;灵活性;访问控制;以及商业。领域里,有基础架构和领域的关系,每个基础架构概述分为下列小节:目的、调用需求、实现需求。
在几个需求模式有共同的特性时,可以建立一个需求模式组,用于描述共同的方面,它与领域的区别在于,领域中有一个主题,而模式分组有共同的细节特性。
模式之间关系存在两种基本类型:引用和扩展。需求模式可以按照多种方式分类,每个分类都需要定义以下内容:名称、读者、目的、允许值、缺省值。书中 使用三种需求模式分类:功能,普遍性 和 影响数据库。保持每个需求定义在核实的范围内有助于读者理解需求,一个需求到达10个段落就太长了,因此提炼需求,分割成多个部分,使它们变成附加需求。 我们还可以用例和业务规则来精确化模式。
在介绍了模式之后,进入使用和编写需求模式阶段。在定义系统间,可以使用模式:
- 当定义需求时,是否存在模式可以知道定义需求;
- 当考虑需求是否完全时;
- 当评审需求规格时,
- 当评估系统时;
- 当实现需求时;
- 当测试需求时。
使用模式,可以根据需要裁剪需求模式,在裁剪时,要建立一个新的需求模式声明。在新的需求模式时,需要慎重,考虑模式的价值。在需求模式的应用中,可以系统化 和 机会化 来发现潜在的需求模式。
如果确实发现了新模式,和信领域,它有一个清晰的主题,看看差异、避免依赖、确保领域中是否需要任何基础架构。在模式编写上,分为如下步骤:
-
是否有足够的价值
-
建立模式的骨架
-
编写模式的“适用性”部分
-
收集需求实例
-
检查需求实例
-
描述需求可能包含的信息
-
编写需求模板
-
编写剩下的“讨论”和“内容”不放呢
-
开发潜在的额外需求实例列表
-
确定额外需求的候选主题
-
编写“额外需求”部分
-
编写“开发考虑”部分
-
编写“测试考虑”部分
-
是否值得?
-
评审模式
接上篇: [笔记]软件需求模式(一)
本文介绍《软件需求模式》的8个领域:
基础、信息、数据实体、用户功能、性能、访问控制、适应性 和 商业。
需求模式列表(一)
需求模式列表(二)
详细方式是按照http://www.xwang.org/2009/04/softeware-requirement-patterns-part-one/中介绍的10中格式进行介绍。做参考或者有一些经验后用也许比较合适,至于具体实现,到时候再参考吧。
WordPress说,把我们的《服务条款》和《隐私声明》拿去用吧!
对于许多网络创业公司来说,起草网站的《服务条款》(Terms of Service)和《隐私声明》(Privacy Policy)是一件令人窘迫的事情。这两份文档属于法律文件,看起来平时不起什么作用,可是一旦和用户或者其他的公司发生了纠纷,并且有可能上升到诉讼层面,那么这两份文件的作用就发挥出来了。总的来说,法律文件都是防范于未然,尽量为公司免责。然而,请律师起草这些繁琐的条文需要花费一笔不小的费用以及不少的时间。对比多家网络公司发布在网站上的这两份文件,发现一些有趣的现象。 · 形形色色的《服务条款》 Digg的《服务条款》极为繁琐,共有十五则,其中第七则是关于版权的,详细讲了关于《新千年数字版权法案》(Digital Millennium Copyright Act,DMCA) 的许多情况,这让人不由得想起今年五月所发生的Digg叛乱事件。 Twitter在《服务条款》的最后还特别鸣谢Flickr,“这些服务条款的内容灵感来自Flickr,是他们许可的。”(These terms of service were inspired, with permission, by Flickr.”。想起Twitter在年初火爆的时候,网站上教用户如何使用字母D和符号@的FAQ都没有人写,热心的用户只能互相传授Twitter的使用技巧。而Flickr被Yahoo收购之后,点开《服务条款》的链接就直接跑到Yahoo的服务条款页面去了。如果是Pro用户身份登陆的话,则显示很长的服务条款,详细说明关于Pro用户的一些情况。比起《服务条款》,Flickr的《社区指南》是更为人知的文档。这个社区指南的第一条是:請和睦共處。本社群会员众多,背景各异,每个人均有自由使用本社群的权利,而彼此看待问题的角度与观点可能不同。因此,在与其它会员互动时请礼貌待人并相互尊重。 Do play nice. We’re a community of many types of people, who all have the right to feel comfortable and who may not think what you think, believe what you believe or see what you see. So, be polite [...]
对于许多网络创业公司来说,起草网站的《服务条款》(Terms of Service)和《隐私声明》(Privacy Policy)是一件令人窘迫的事情。这两份文档属于法律文件,看起来平时不起什么作用,可是一旦和用户或者其他的公司发生了纠纷,并且有可能上升到诉讼层面,那么这两份文件的作用就发挥出来了。总的来说,法律文件都是防范于未然,尽量为公司免责。然而,请律师起草这些繁琐的条文需要花费一笔不小的费用以及不少的时间。
对比多家网络公司发布在网站上的这两份文件,发现一些有趣的现象。
· 形形色色的《服务条款》
Digg的《服务条款》极为繁琐,共有十五则,其中第七则是关于版权的,详细讲了关于《新千年数字版权法案》(Digital Millennium Copyright Act,DMCA) 的许多情况,这让人不由得想起今年五月所发生的Digg叛乱事件。
Twitter在《服务条款》的最后还特别鸣谢Flickr,“这些服务条款的内容灵感来自Flickr,是他们许可的。”(These terms of service were inspired, with permission, by Flickr.”。想起Twitter在年初火爆的时候,网站上教用户如何使用字母D和符号@的FAQ都没有人写,热心的用户只能互相传授Twitter的使用技巧。
而Flickr被Yahoo收购之后,点开《服务条款》的链接就直接跑到Yahoo的服务条款页面去了。如果是Pro用户身份登陆的话,则显示很长的服务条款,详细说明关于Pro用户的一些情况。比起《服务条款》,Flickr的《社区指南》是更为人知的文档。这个社区指南的第一条是:
請和睦共處。
本社群会员众多,背景各异,每个人均有自由使用本社群的权利,而彼此看待问题的角度与观点可能不同。因此,在与其它会员互动时请礼貌待人并相互尊重。Do play nice.
We’re a community of many types of people, who all have the right to feel comfortable and who may not think what you think, believe what you believe or see what you see. So, be polite and respectful in your interactions with other members.
同样在被Yahoo收购之后,Del.icio.us的《服务条款》却还是保持简洁的风格。
最简洁的风格看来应该是Mahalo.com莫属。这是由Weblogs Inc.联合创始人Jason Calacanis离开AOL之后所创办的“人类搜索引擎”,他们的清单都保持在十个条目以下,每个条目大部分都只有一、两行。看起来就像是Google的服务条款的摘要了。
最为繁琐的应当是Google了,它的服务条款共有20则,以至于要开辟另外一个新页面专门显示服务条款的摘要。这份最后更新于2007年4月16日的服务条款,第一则的标题就是:“你与Google的关系”(Your relationship with Google)。
· 最酷的《服务条款》花落谁家?
哇,最酷的应该是WordPress.com了!刚刚发现开发WordPress开源Blog软件和运营WordPress.com的Automattic将“创作共用”(Creative Commons)的图标放在他们的《服务条款》和《隐私声明》上。他们说:
请注意,我们决定将如下的服务条款遵循创作共用(Creative Commons)—-保持一致(Share alike)的授权协议,这意味着欢迎大家把它“偷”去改头换面成自家宝贝!只是你需要像我们一样将修改后的内容做同样的声明,我们也乐意你在自己网站的任何地方加个链接到WordPress.com。我们花费了大量的金钱和时间弄出这个家伙来,大家现在可以省省事儿了:)
创作共用-保持一致(Creative Commons Share alike license),这个条款的要求是:
如果您改变、转换本作品或者以本作品为基础进行创作,您只能采用与本协议相同的许可协议发布基于本作品的演绎作品。
仔细一想,Automattic与自由文化运动的关系是很密切的,WordPress是一款开源的Blog软件,而Blogosphere则是支持自由文化运动的中坚力量,他们这样的举动也不足为奇。一间公司的品牌个性往往不是依靠宣传包装出来的,而是公司长期的做事风格营造出来的。言行一致是创建品牌的奠基石。
那么,大陆的网络创业公司,哪家会在花了大价钱请律师起草《服务条款》和《隐私声明》后,又将它们以“创作共用”(Creative Commons)方式授权出来呢?!
需求分析
需求分析是指理解用户需求,就软件功能与客户达成一致,估计软件风险和评估项目代价,最终形成开发计划的一个复杂过程。(这个和我在微软体验到的又不太一样,微软的需求分析大多是市场人员和用户协助小组的人去评估用户的接受程度,这一点也可以理解,因为公司的性质有根本差别)在这个过程中,用户的确是处在主导地位,需求分析工程师和项目经理要负责整理用户需求,为之后的软件设计打下基础。需求分析阶段结束后,要求得到:1.SRS文档(System Requirement Specification); 2.DRM 文档;3.Acceptance Plan.
从广义上理解:需求分析包括需求的获取、分析、规格说明、变更、验证、管理的一系列需求工程。
狭义上理解:需求分析指需求的分析、定义过程。
一、为什么要需求分析
需求分析就是分析软件用户的需求是什么.如果投入大量的人力,物力,财力,时间,开发出的软件却没人要,那所有的投入都是徒劳.如果费了很大的精力,开发一个软件,最后却不满足用户的要求,从而要重新开发过,这种返工是让人痛心疾首的.(相信大家都有体会)比如,用户需要一个for linux的软件,而你在软件开发前期忽略了软件的运行环境,忘了向用户询问这个问题,而想当然的认为是开发for windows的软件,当你千辛万苦地开发完成向用户提交时才发现出了问题,那时候你是欲哭无泪了,痕不得找块豆腐一头撞死.
需求分析之所以重要,就因为他具有决策性,方向性,策略性的作用,他在软件开发的过程中具有举足轻重的地位.大家一定要对需求分析具有足够的重视.在一个大型软件系统的开发中,他的作用要远远大于程序设计.
二、需求分析的任务
简言之,需求分析的任务就是解决”做什么”的问题,就是要全面地理解用户的各项要求,并准确地表达所接受的用户需求.
三、需求分析的过程
需求分析阶段的工作,可以分为四个方面:问题识别,分析与综合,制订规格说明,评审.
问题识别
就是从系统角度来理解软件,确定对所开发系统的综合要求,并提出这些需求的实现条件,以及需求应该达到的标准.这些需求包括:功能需求(做什么),性能需求(要达到什么指标),环境需求(如机型,操作系统等),可靠性需求(不发生故障的概率),安全保密需求,用户界面需求,资源使用需求(软件运行是所需的内存,CPU等),软件成本消耗与开发进度需求,预先估计以后系统可能达到的目标.
分析与综合
逐步细化所有的软件功能,找出系统各元素间的联系,接口特性和设计上的限制,分析他们是否满足需求,剔除不合理部分,增加需要部分.最后,综合成系统的解决方案,给出要开发的系统的详细逻辑模型(做什么的模型).
制订规格说明书
即编制文档,描述需求的文档称为软件需求规格说明书.请注意,需求分析阶段的成果是需求规格说明书(好象软考曾经考过这个问题),向下一阶段提交.
评审
对功能的正确性,完整性和清晰性,以及其它需求给予评价.评审通过才可进行下一阶段的工作,否则重新进行需求分析。
四、需求分析的方法
需求分析的方法有很多.这里只强调原型化方法,其它的方法如:结构化方法,动态分析法等(个人认为,对初学者不必深究这些方法,实际上我也从来没用过这些方法)在此不讨论.
原型化方法是十分重要的(是软考等常考的知识点).原型就是软件的一个早期可运行的版本,它实现了目标系统的某些或全部功能.
原型化方法就是尽可能快地建造一个粗糙的系统,这系统实现了目标系统的某些或全部功能,但是这个系统可能在可靠性,界面的友好性或其他方面上存在缺陷.建造这样一个系统的目的是为了考察某一方面的可行性,如算法的可行性,技术的可行性,或考察是否满足用户的需求等.如,为了考察是否满足用户的要求,可以用某些软件工具快速的建造一个原型系统,这个系统只是一个界面,然后听取用户的意见,改进这个原型.以后的目标系统就在原型系统的基础上开发.
原型主要有三种类型(软考考过):探索型,实验型,进化型.探索型:目的是要弄清楚对目标系统的要求,确定所希望的特性,并探讨多种方案的可行性.实验型:用于大规模开发和实现前,考核方案是否合适,规格说明是否可靠.进化型:目的不在于改进规格说明,而是将系统建造得易于变化,在改进原型的过程中,逐步将原型进化成最终系统。
在使用原型化方法是有两种不同的策略:废弃策略,追加策略.废弃策略:先建造一个功能简单而且质量要求不高的模型系统,针对这个系统反复进行修改,形成比较好的思想,据此设计出较完整,准确,一致,可靠的最终系统.系统构造完成后,原来的模型系统就被废弃不用.探索型和实验型属于这种策略。
追加策略:先构造一个功能简单而且质量要求不高的模型系统,作为最终系统的核心,然后通过不断地扩充修改,逐步追加新要求,发展成为最终系统。进化型属于这种策略.
五、需求分析的20条法则(本节摘自软件工程专家网)
客户与开发人员交流需要好的方法。下面建议20条法则,客户和开发人员可以通过评审以下内容并达成共识。如果遇到分歧,将通过协商达成对各自义务的相互理解,以便减少以后的磨擦(如一方要求而另一方不愿意或不能够满足要求)。
1、 分析人员要使用符合客户语言习惯的表达
需求讨论集中于业务需求和任务,因此要使用术语。客户应将有关术语(例如:采价、印花商品等采购术语)教给分析人员,而客户不一定要懂得计算机行业的术语。
2、分析人员要了解客户的业务及目标
只有分析人员更好地了解客户的业务,才能使产品更好地满足需要。这将有助于开发人员设计出真正满足客户需要并达到期望的优秀软件。为帮助开发和分析人员,客户可以考虑邀请他们观察自己的工作流程。如果是切换新系统,那么开发和分析人员应使用一下目前的旧系统,有利于他们明白目前系统是怎样工作的,其流程情况以及可供改进之处。
3、 分析人员必须编写软件需求报告
分析人员应将从客户那里获得的所有信息进行整理,以区分业务需求及规范、功能需求、质量目标、解决方法和其他信息。通过这些分析,客户就能得到一份“需求分析报告”,此份报告使开发人员和客户之间针对要开发的产品内容达成协议。报告应以一种客户认为易于翻阅和理解的方式组织编写。客户要评审此报告,以确保报告内容准确完整地表达其需求。一份高质量的“需求分析报告”有助于开发人员开发出真正需要的产品。
4、 要求得到需求工作结果的解释说明
分析人员可能采用了多种图表作为文字性“需求分析报告”的补充说明,因为工作图表能很清晰地描述出系统行为的某些方面,所以报告中各种图表有着极高的价值;虽然它们不太难于理解,但是客户可能对此并不熟悉,因此客户可以要求分析人员解释说明每个图表的作用、符号的意义和需求开发工作的结果,以及怎样检查图表有无错误及不一致等。
5、 开发人员要尊重客户的意见
如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍。共同合作能使大家“兼听则明”。参与需求开发过程的客户有权要求开发人员尊重他们并珍惜他们为项目成功所付出的时间,同样,客户也应对开发人员为项目成功这一共同目标所做出的努力表示尊重。
6、 开发人员要对需求及产品实施提出建议和解决方案
通常客户所说的“需求”已经是一种实际可行的实施方案,分析人员应尽力从这些解决方法中了解真正的业务需求,同时还应找出已有系统与当前业务不符之处,以确保产品不会无效或低效;在彻底弄清业务领域内的事情后,分析人员就能提出相当好的改进方法,有经验且有创造力的分析人员还能提出增加一些用户没有发现的很有价值的系统特性。
7、 描述产品使用特性
客户可以要求分析人员在实现功能需求的同时还注意软件的易用性,因为这些易用特性或质量属性能使客户更准确、高效地完成任务。例如:客户有时要求产品要“界面友好”或“健壮”或“高效率”,但对于开发人员来讲,太主观了并无实用价值。正确的做法是,分析人员通过询问和调查了解客户所要的“友好、健壮、高效所包含的具体特性,具体分析哪些特性对哪些特性有负面影响,在性能代价和所提出解决方案的预期利益之间做出权衡,以确保做出合理的取舍。
8、 允许重用已有的软件组件
需求通常有一定灵活性,分析人员可能发现已有的某个软件组件与客户描述的需求很相符,在这种情况下,分析人员应提供一些修改需求的选择以便开发人员能够降低新系统的开发成本和节省时间,而不必严格按原有的需求说明开发。所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不完全适合您所需的特性,这时一定程度上的需求灵活性就显得极为重要了。
9、 要求对变更的代价提供真实可靠的评估
有时,人们面临更好、也更昂贵的方案时,会做出不同的选择。而这时,对需求变更的影响进行评估从而对业务决策提供帮助,是十分必要的。所以,客户有权利要求开发人员通过分析给出一个真实可信的评估,包括影响、成本和得失等。开发人员不能由于不想实施变更而随意夸大评估成本。
10、 获得满足客户功能和质量要求的系统
每个人都希望项目成功,但这不仅要求客户要清晰地告知开发人员关于系统“做什么”所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与限制,一定要明确说明您的假设和潜在的期望,否则,开发人员开发出的产品很可能无法让您满意。
11、 给分析人员讲解您的业务
分析人员要依靠客户讲解业务概念及术语,但客户不能指望分析人员会成为该领域的专家,而只能让他们明白您的问题和目标;不要期望分析人员能把握客户业务的细微潜在之处,他们可能不知道那些对于客户来说理所当然的“常识”。
12、 抽出时间清楚地说明并完善需求
客户很忙,但无论如何客户有必要抽出时间参与“头脑高峰会议”的讨论,接受采访或其他获取需求的活动。有些分析人员可能先明白了您的观点,而过后发现还需要您的讲解,这时请耐心对待一些需求和需求的精化工作过程中的反复,因为它是人们交流中很自然的现象,何况这对软件产品的成功极为重要。
13、 准确而详细地说明需求
编写一份清晰、准确的需求文档是很困难的。由于处理细节问题不但烦人而且耗时,因此很容易留下模糊不清的需求。但是在开发过程中,必须解决这种模糊性和不准确性,而客户恰恰是为解决这些问题作出决定的最佳人选,否则,就只好靠开发人员去正确猜测了。
在需求分析中暂时加上“待定”标志是个方法。用该标志可指明哪些是需要进一步讨论、分析或增加信息的地方,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而标注上“待定”。客户要尽量将每项需求的内容都阐述清楚,以便分析人员能准确地将它们写进“软件需求报告”中去。如果客户一时不能准确表达,通常就要求用原型技术,通过原型开发,客户可以同开发人员一起反复修改,不断完善需求定义。
14、 及时作出决定
分析人员会要求客户作出一些选择和决定,这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等。有权作出决定的客户必须积极地对待这一切,尽快做处理,做决定,因为开发人员通常只有等客户做出决定才能行动,而这种等待会延误项目的进展。
15、 尊重开发人员的需求可行性及成本评估
所有的软件功能都有其成本。客户所希望的某些产品特性可能在技术上行不通,或者实现它要付出极高的代价,而某些需求试图达到在操作环境中不可能达到的性能,或试图得到一些根本得不到的数据。开发人员会对此作出负面的评价,客户应该尊重他们的意见。
16、 划分需求的优先级
绝大多数项目没有足够的时间或资源实现功能性的每个细节。决定哪些特性是必要的,哪些是重要的,是需求开发的主要部分,这只能由客户负责设定需求优先级,因为开发者不可能按照客户的观点决定需求优先级;开发人员将为您确定优先级提供有关每个需求的花费和风险的信息。 在时间和资源限制下,关于所需特性能否完成或完成多少应尊重开发人员的意见。尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对现实,业务决策有时不得不依据优先级来缩小项目范围或延长工期,或增加资源,或在质量上寻找折衷。
17、 评审需求文档和原型
客户评审需求文档,是给分析人员带来反馈信息的一个机会。如果客户认为编写的“需求分析报告”不够准确,就有必要尽早告知分析人员并为改进提供建议。更好的办法是先为产品开发一个原型。这样客户就能提供更有价值的反馈信息给开发人员,使他们更好地理解您的需求;原型并非是一个实际应用产品,但开发人员能将其转化、扩充成功能齐全的系统。
18、 需求变更要立即联系
不断的需求变更,会给在预定计划内完成的质量产品带来严重的不利影响。变更是不可避免的,但在开发周期中,变更越在晚期出现,其影响越大;变更不仅会导致代价极高的返工,而且工期将被延误,特别是在大体结构已完成后又需要增加新特性时。所以,一旦客户发现需要变更需求时,请立即通知分析人员。
19、 遵照开发小组处理需求变更的过程
为将变更带来的负面影响减少到最低限度,所有参与者必须遵照项目变更控制过程。这要求不放弃所有提出的变更,对每项要求的变更进行分析、综合考虑,最后做出合适的决策,以确定应将哪些变更引入项目中。
20、 尊重开发人员采用的需求分析过程
软件开发中最具挑战性的莫过于收集需求并确定其正确性,分析人员采用的方法有其合理性。也许客户认为收集需求的过程不太划算,但请相信花在需求开发上的时间是非常有价值的;如果您理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更为顺利。
“需求确认”意味着什么
在“需求分析报告”上签字确认,通常被认为是客户同意需求分析的标志行为,然而实际操作中,客户往往把“签字”看作是毫无意义的事情。“他们要我在需求文档的最后一行下面签名,于是我就签了,否则这些开发人员不开始编码。”
这种态度将带来麻烦,譬如客户想更改需求或对产品不满时就会说:“不错,我是在需求分析报告上签了字,但我并没有时间去读完所有的内容,我是相信你们的,是你们非让我签字的。”
同样问题也会发生在仅把“签字确认”看作是完成任务的分析人员身上,一旦有需求变更出现,他便指着“需求分析报告”说:“您已经在需求上签字了,所以这些就是我们所开发的,如果您想要别的什么,您应早些告诉我们。”
这两种态度都是不对的。因为不可能在项目的早期就了解所有的需求,而且毫无疑问地需求将会出现变更,在“需求分析报告”上签字确认是终止需求分析过程的正确方法,所以我们必须明白签字意味着什么。
对“需求分析报告”的签名是建立在一个需求协议的基线上,因此我们对签名应该这样理解:“我同意这份需求文档表述了我们对项目软件需求的了解,进一步的变更可在此基线上通过项目定义的变更过程来进行。我知道变更可能会使我们重新协商成本、资源和项目阶段任务等事宜。”对需求分析达成一定的共识会使双方易于忍受将来的摩擦,这些摩擦来源于项目的改进和需求的误差或市场和业务的新要求等。 需求确认将迷雾拨散,显现需求的真面目,给初步的需求开发工作画上了双方都明确的句号,并有助于形成一个持续良好的客户与开发人员的关系,为项目的成功奠定了坚实的基础。
六、点评需求分析误区
要想说什么是好的需求分析,不如说什么是不好的需求分析,知道什么是不好的,自然也就知道了什么是好的。以下就是一些不好的情况:
(1)创意和求实
毋庸质疑的,每个人都会为自己的一个新的Idea而激动万分,特别是当这个Idea受到一些根本不知道你原本要干嘛的人的惊赞时。但是请注意,当你激动得意的时候,你可能已经忘了你原本是在描述一个需求,而不是在策划一个创意、创造一个概念。很多刚开始做需求分析的人员都或多或少的会犯这样的错误,陶醉在自己的新想法和新思路中,却违背了需求的原始客观性和真实性原则。
永远别忘了:需求不是空中楼阁,是实实在在的一砖一瓦。
(2)解剖的快感
几乎所有搞软件的人,做需求分析的时候,一上来就会把用户告诉你的要求,完完整整的作个解剖,切开分成几个块,再细分成几个子块,然后再条分缕析。可是当用户迷惑的看着你辛辛苦苦做出来的分析结果问你:我想作一个数据备份的任务,怎么做?这时,你会发现,需要先后打开三个窗口才能完成这个任务。
永远别忘了:分解是必需的,但最终的目的是为了更好的组合,而不是为了分解。
(3)角度和思维
经常听到这样的抱怨:“用户怎么可以提出这样苛刻的要求呢?”。细细一了解,你会发现,用户只不过是要求把一个需要两次点击的功能,改成只有一次点击。这样会导致需要改变需求、改变编码、甚至重新测试,增加工作量。可是,如果换个角度来想想,这个功能,开发的时候只用了几次、几十次,可是用户每天都要用几百次甚 至几千次几万次,改动一下就减少了一半的工作量,对他来说,这样的需求难道会苛刻吗?
永远别忘了:没有任何需求是不对的,不对的只是你的需求分析。试着站在用户的思维角度想想,你的需求分析就会更加的贴近用户,更加的合理。软件应该是以人为本的。
(4)程序员逻辑
从程序员成长为系统分析员是一个普遍的轨迹,但并不是一个好的程序员就必然能成为一个好的系统分析员。一些程序员的固化逻辑,使得他们在做需求分析的时候往往钻进了一些牛角里面。比如说1/0逻辑(或者是说黑白逻辑),认为不是这样就是那样,没有第三种情况。可实际情况往往是,在一定的时候是这样,其它时候是那样。又比如穷举逻辑,喜欢上来就把所有一二三可能的情况列举出来,然后一个一个分别处理,每个占用三分之一的时间;可是实际的情况往往是,三分之一的情况占了99%的比例,其它两种情况一年都不会遇到一次。实际中还有很多这样的例子,不一一列举了。
永远别忘了:需求分析和程序设计不尽相同,合理、可行是才是重要的。跳出程序设计的圈子,站在系统的角度上来看问题,你的结论会截然不同。
原型方法论—关于软件原型方法若干问题的讨论
【内容摘要】1引子太多了!终于签下合同–>得到了“正式”的客户提供的“需求书”的几片纸–>凭借自己的理解立即投入开发–>“木已成舟”,生米终于熬成粥–>用户拒绝接受?–>艰难地修改,反复修改,开发人员厌倦了,而用户对系统用之无味,弃之可惜,遂成鸡肋。– ……
—————————————————————————–
1 引子
太多了!终于签下合同–>得到了“正式”的客户提供的“需求书”的几片纸–>凭借自己的理解立即投入开发–>“木已成舟”,生米终于熬成粥–>用户拒绝接受?–>艰难地修改,反复修改,开发人员厌倦了,而用户对系统用之无味,弃之可惜,遂成鸡肋。–>由此后期收款遥遥无期,软件公司不再和用户保持沟通–>互相埋怨,扯皮由此而生。或者,一个项目拆成为多期,从而收取一部分款项,而很多的开发都作废。这样的案例真是何其多也!
究其主要原因,与其说是没有搞定关键客户,或者项目管理不当,不如说是没有帮助客户解决其问题,对客户真正的需求研究不够。实际上,原型方法是解决此类问题、确保项目成功的最佳途径。
我在写此文的同时,也试图寻找资料,不知道是本就没有,还是自己所不幸而未找到。看来原型并没有明确的标准,而目前不同软件公司的理解和做法各不相同也就不奇怪了。但从软件过程的角度来考察,原型法仍有着通用的优化的做法。本文试图从作者的实践经验出发,对原型方法进行思考与探讨。
另外,本文是发散型的,在研究原型的同时,也讨论了原型相关的内容。原型本质上有些象是抛砖引玉,而本文也旨在抛砖引玉,但无意于一概地论定什么。
2 什么是原型
2.1 原型的定义
原型(prototype)即把系统主要功能和接口通过快速开发制作为“软件样机”,以可视化的形式展现给用户,及时征求用户意见,从而明确无误地确定用户需求。同时,原型也可用于征求内部意见,作为分析和设计的接口之一,可方便于沟通。
2.2 原型的主要价值
原型法主要价值是可视化,强化沟通,降低风险,节省后期变更成本,提高项目成功率。一般来说,采用原型法后可以改进需求质量;虽然投入了较多先期的时间,但可以显著减少后期变更的时间;原型投入的人力成本代价并不大,但可以节省后期成本;对于较大型的软件来说,原型系统可以成为开发团队的蓝图;另外,原型通过充分和客户交流,还可以提高客户满意度。
2.3 基本要求
对原型的基本要求包括:
* 体现主要的功能;
* 提供基本的界面风格;
* 展示比较模糊的部分,以便于确认或进一步明确,防患于未然。
* 原型最好是可运行的,至少在各主要功能模块之间能够建立相互连接。
2.4 处理方法
原型的处理方法基本上有2种不同类型,即抛弃型和演化型(不同的软件工程书籍称发不同,实质意义则类似)。可以抛弃原型,在取得的明确需求基础上重新开始设计与开发;也可在原型的基础上继续开发。一般小项目不采用抛弃型原型,否则成本和代价似乎会偏高。
2.5 表达工具
原型的表达工具可以有很多,如果是演化型的原型,当然优先选用软件本身的开发工具。否则还可以应用各种快速显示的工具,例如,HTML,Powerpoint等等,只要能够充分而形象地表达就可以了。
根据笔者的经验,在原型系统中,可以采用一些与常规不同的做法,例如,可以在界面上比较显著的地方写明当前模块或界面的主要目的,由哪些角色操作,能解决其什么问题。这么做可以使得用户或开发团队成员一开始就有非常清楚的概念;又如,对于决策分析,你可以直接把一些分析结果画成图,并且配上一些文字说明,这样可以避免输入大量初始数据,等等。
3 原型在软件过程的地位
软件的根本目的是实现用户的需求,提供用户日常使用,解决用户工作中有所不便的问题,提高其工作效率,改进质量,加强管理控制,最终直接或间接地提高其效益。因此软件开发本质上就是需求的处理和实现,而软件原型对需求确定来说具有非常重要的意义。原型方法包括2个基本过程,即原型制作和原型评价。
如果从需求角度看软件过程,我们不妨可以把软件过程这样划分:
3.1 需求收集和分析
搜集需求得到需求说明书,了解软件要做什么,做成什么样,解决用户什么问题。
这时候软件公司以书面文档方式提出,例如需求问询表等。
3.2 提供原型并进行评价
制定原型开发计划,根据用户需求及不确定的高风险部分进行原型开发,在内部进行原型评价,请客户进行原型评价,以保证确实反映了用户的真正想法。
3.3 实现需求
当前的软件开发过程常常采用迭代方式进行开发,逐步求精,以降低风险和成本。对迭代的次数,每次迭代的里程碑,要实现的目标,及可提交的成果必须有可验证的清晰的计划。项目管理是一种艺术,迭代规划及里程碑定义都是一种挑战、一种艺术,但项目管理不在本文讨论范围。
3.4 需求变更
需求变更是正常的,也是难免的,应允许用户和开发团队自身对需求进行变更。变更处理的关键在于跟踪和控制,如何使产生的影响应得到控制,这属于配置管理的内容,也不在本文讨论范围。
原型在软件过程中的定位如下图所示:
图1 软件原型的定位
实际上我们可以把原型看得更为广义一些。任何用户或者内部演示的材料,都可以看作为原型。例如,如果你的产品是某种通用的或者行业解决方案,虽然你其实还没有产品,但先做出一个原型,再加一个漂亮的白皮书,就可以在市场上进行预销售了。
对于抛弃型和演化型原型来说,也不是绝对的。演化型原型中必然会不断抛弃一些内容,而抛弃型原型,尽管在完成历史使命后不再使用,但很多思想以及部分设计还是可以继承的。
4 原型方法的一般过程
基于原型方法在整个需求过程中的地位,我们需要把原型法和需求处理放在一起进行讨论。采用原型法的一般过程如下图所示:
图2:原型法的处理过程
在上图中已经清楚地描述了原型的处理过程,值得一提的是,原型不仅用于给用户或者最终用户进行评议,同时完全可以在公司内部组织评议,看看我们周围吧,多数程序员对技术的兴趣远远高于对需求的兴趣,因此其对系统的理解并不会比市场人员或者项目经理理解的深多少。这里的公司内部人员角色可以包括很多,系统分析员/程序员自身、项目经理、部门经理、用户代表、领域专家、测试人员等等,不同的角色往往会在其不同立场对系统提出中肯的意见来。
另外值得注意的是界面设计的引入。我们认为将界面风格在原型阶段即进行基本确定是一种优化的做法,因为软件前期对界面的确定可以避免后期开发时对界面进行统一调整所带来的不必要的成本花费,良好的界面也可以使客户增加对系统的好感,当然,但愿用户不要只是欣赏界面而忽略了他们对系统功能的思考。要知道,如果仅仅是让用户看到美观的界面,那么整个原型几乎是白做了。
5 使用原型方法的相关问题探讨
5.1 为什么要采用原型法?
原型对一个项目取得成功具有重要的意义。俗话说:隔行如隔山,实际上软件公司很难保证其制作的软件正好就是用户所需要的,用户也很难一次性把其真实的要求完全提交,开始阶段提出的往往只是对系统的期望,和比较模糊的设想而已。而原型系统为用户提供了一个靶子,看着原型系统,用户往往就能进一步提出他们的真正想法。显然软件公司明确用户需求的最佳方式就是为用户提供原型并由用户进行评价。
也许,跳过原型可以节省时间和前期成本,但你应该注意到,跳过原型的话,后期变更的成本会明显增加。
5.2 为什么在需求说明书之外需要原型?
1)眼见为实,文字具有歧义性,不同的人理解都不相同;
2)最终用户往往在看到一套可运行的系统的基础上,才可能提出其真实的意见,如果到最终提交时才看到这样的系统就为时太晚。这也是以前无数软件开发留下的教训;
3)便于发现问题,及时纠正;
4)便于进一步展开,并取得用户的细节需求;
5)体现原型的其它功能:便于公司内部如经理、市场部等对软件提出意见,便于开发人员对整个产品达成统一认识,等等。对内部人员来说,同样地,一套形象的原型也远胜过一堆专业术语文字;也就是说,原型对软件公司内部也十分重要。这些评价工作无形之中改进了项目质量。
5.3 原型方法有什么风险?
任何方法都是有利有弊,在我们可以探讨一下原型方法可能存在的风险。以下是一般软件公司所担心的风险:需要付出前期进度和人力成本;由于程序员对问题的不了解而效率低下,受客户牵制而在原型上反复修改;因为仓促设计而做不利于进一步在其基础上继续开发;由于过早展示原型给客户,使得客户可能提高其期望值,并提出更多离谱的要求,等等。
值得一提的是原型方法的主要价值之一就是尽早揭示软件中可能存在的风险及不确定因素,尤其是关于用户需求一致性方面的风险。
5.4 原型方法和其它方法或过程的关系如何,是否一致?
生命周期法中并不包括原型,或者说没有明确提供原型的概念和定义。原型可以认为是需求分析中的一个子部分。另外,应该说原型方法是对生命周期法的有益补充和完善。
RUP中是最优化的统一软件过程,但RUP中似乎没有提到原型,RUP的核心过程是在迭代中精化。我个人的见解是,原型非常类似于第一次迭代的过程和结果。实际上,如果把原型看作为第一轮交付的成果,那么原型的很多不利之处,诸如花费前期成本等等,这些担心都将变得不复存在。
XP方法对原型非常推崇,这是因为XP方法非常强调需求的重要性,甚至要求客户参与开发过程。但原型方法和XP也有区别。XP是分批交付,先做一个几个功能点的版本,完成后再每个开发周期往上面加其它功能点,而原型法一般要求做出比较完整,能覆盖主要功能点的粗略的版本。XP方法仁者见仁,智者见智,不一而举。
5.5 如何避免项目团队做原型的时候出现部分人员闲置?
在项目管理中,对人力资源的调配应和项目进展相匹配。实际上在用户接触到原型制作的同时,可以进行项目计划、架构设计、技术培训以及技术难点攻关等等。
如果从广义上理解原型的话,架构设计者甚至可以设计出一种用户开发团队使用的所谓框架原型,包含了主要的设计成分、模板和示例。
比较理想的结果是,当原型完成后,需求分析、架构设计和界面风格设计都趋于完成,从这一点可以看到,原型方法可以作为快速软件开发的重要手段。
5.6 如果避免项目在原型上停滞不前?
应使用有经验的开发人员,避免因为程序员不熟悉业务而延误进度;不要在界面设计上犹豫不决而占据时间;如果用户对原型提出了很多意见,其中部分比较明确的意见可以在开发过程中进行实现;和客户的交流应该简洁明了,而不是似是而非;另外,原型方法在项目过程中占据的时间应该在项目计划中保留出来,而不仅仅是隐含在需求调研与分析的一个部分。
5.7 如何避免用户看了原型后漫无边际地提要求?
首先,应该充分尊重客户,想想其它行业的服务质量吧。有没有听说过这样的说法,项目管理也是客户满意度的管理;软件是一种对客户的关怀,等等。确实,客户提出的思路可能和你已经形成的思路不同,一下子打乱了你的思路,也许项目经理并不介意,但这确是让设计者特别心烦的事情。如果确有把握,或者你可以不做到原型中去。有时候,即使原型很完美,用户也会额外地提出一些意见,这也是人之常情。但不管怎样,你不能认为用户根本不懂软件,让他们到时用就行了,抱这样想法的多半会付出代价。
其次应该进行坦诚协商,多数用户其实都是通情达理的。如果你在签订合同时答应满足任何要求,而此时又无法忍受用户的要求,那么孰是孰非应是题外之意了。一般来说,比较合理的做法可以通过增加费用、延长进度或者把需求实现分阶段来提交,以保持工作的延续性。对有些软件,尤其是信息管理系统来说,客户的实施时间其实并不是主要的,客户最需要的不是及时,而是合用。
其实,客户有着很多种类型,确实,个别客户会参考同类产品来提要求,极个别用户并不真正懂得计算机技术而对技术路线、技术手段等提出其意见,等等。但我们为什么还可以反过来想一下,如果是等到软件全部提交的时候,这部分用户仍有会提出同样的意见。提早暴露并解决分歧,对双方睹是有利的。如果软件公司明知可能存在矛盾,仍然先做好,然后等到用户提出反对后,再提出补充收费,如果喜欢,也无话可说。
总之,原型应本着对软件需求的基本理解来做,这样才能预防不一致性的发生。尤其应该针对不清楚的地方制作原型,从而尽量暴露问题,引发用户的联想,不能回避问题,掩盖问题(以免用户提出太多的想法),很多问题虽然一时掩盖了,但最终还是要发生的。
5.8 如何避免在原型基础上继续开发时的可维护性降低?
问题是这样的,制作原型时常希望快速提供原型,往往不及对软件结构或者数据库进行细致设计。所以在此基础上继续设计和开发的话,有必要在开发前先进行调整。同时,在设计原型前就有必要确定,该原型是要抛弃的,还是要演化要继承的。对于要演化的原型,其设计不能过于粗略,显然这直接影响到今后的开发成本。
6 小结
原型方法是可视化的方法,已成为快速软件开发常用的手段。软件公司或部门一旦得到了原型方法的回报,就会坚持使用。原型不是绝对必要,但非常有意义。
本贴来自天极网群乐社区–http://q.yesky.com/group/review-17600505.html
天极产品设计流程
写这个的目地,主要是系统理下目前产品设计的流程,提醒自己尽量去避免一些常见的问题,也能让大家系统的了解天极网的产品设计流程。当然,不保证任何产品都能套用这套方式,主要还是跟据自己工作性质来定。也许这段文字会比较枯燥,希望阅读下去能给大家带来一些启发。
如果当中有问题及更好的方法,请邮件(peter.xiao999#gmail.com )或加我MSN(pitiaoxiao#hotmail.com)联系.
先从沟项目人员说起吧,项目需要沟通的部门基本是:需求部门(比如:产品经理,某频道负责人或主编) 、销售部、程序部。涉及到我这边主要有:UI(界面设计) 、UE(交互及用户体验) 、 UID(制作) 、SEO(搜索引擎优化)。
大多数产品都是由需求部门提出,当项目完成审批流程后,就会交由产品负责人直接和我们(目前天极网UE还处于起步阶段,我主要扮演UI及兼任UE的职责)进行沟通,进行可行性评估,经过N次讨论后确定结构、风格、功能、并确定开发周期及最终的上线时间。
每个产品主要经过以下几个阶段:
- 可行性评估
- 产品原型
- 产品界面设计
- 规范整理、功能实现
- 产品上线
- 分析报告、优化方案
针对每个环节细化,我将拿出近期的 ChinaByte产品库 项目来做进一步说明 ,相关地址:http://www.webdoc.com.cn/demo/p/
一 可行性评估
主要执行人员:UI、UE、需求部门、程序部
需沟通人员:销售部
当产品经理确定基本的思路后,会先会跟我们沟通,并说明这个产品的思路、受众及一些自己的想法.接着会拿来一个结构图来和我们探讨实现方面的可行 性。我们也会准备相关资料与其进行沟通,主要会从数据报告、功能性及可行性三方面下手,在探讨的同时会指出功能或结构上的一些问题,并提出改善方案,这步 一定得仔细,UI、UE深入探讨并尽可能考虑到每个实现的细节,待框架打好后,出好的产品很容易.但如果在可行性评估上出现隐患,余下的其它工作也将会遇 到诸多问题。
我们主要从以下三方面进行评估:
- 数据报告
通过99Click、Netratings、Counter三套系统来进行数据收集,并在分析报告中指出相应的问题。 - 功能性
站在用户角度上,对方案的结构及功能性进行评估,提出并解决操作上的问题。 - 可行性
每个产品初期都是感性的,但在不能保证每个功能都能按原有思路进行实现,具体还需要和相关技术 人员进行探讨、碰撞后形成最终的产品思路。
由于各人思考问题的角度不同, 这个环节常遇到大家意见不统一情况,在我接触的项目中,很多产品经理都会将个人喜好溶入到产品设计思路中,如"颜色用红吧,这样显得比较跳跃","按钮上 加下样式,太不吸引人…",跟据自己的经验判断,如果认为不可取,会尽最大能力去说服对方,当然前提是把自己的位置摆正,站在中立的角度上去审视产品。
顺便谈谈沟通,相信大家经常会遇到和产品经理矜持不下的情况,这时用理论及实际案例去说服对方基本是无效的。建议可以采用一对一的方式单独沟通,遇 到问题先记下来,放到会后进行单独讨论,人都是要面子的嘛。只要让对方意识到你是在帮他改善问题后,接下来的沟通就会比较轻松。在之前在做 Yesky产品库 时自己也经遇到这类问题。总之,说服的方式有很多种.无论是威逼还是利诱,前提一定是我的这种方式是可行的,实用的。
二 产品原型
主要执行人员:UI、UE、需求部门
需沟通人员:程序部、销售部
在产品原型方面,主要指的是黑白稿或线稿,除了颜色基本采用黑白的形式,最终出的产品原型将会和实际产品没区别。这个环节会拟定出产品页面的宽度,广告的形式,导航基本样式,各内容的区域的表现形式等…
当经过可行性评估阶段后,产品经理的思路和自己也基本达成共识,接下来将进行原型设计,我将主要分为三个步骤来实现:
1) 纸稿

一般情况下结构图都是采用word文档描绘,我选择笔和纸的方式,主要还是比较方便、易修改,有任何突发的思路只需要擦一下,就可以直接在已有的基础上进行调整,由于之前的讨论没有实物参照,在这个环节你一定会发现更多有趣的问题。
2) 线稿、黑白稿

当纸稿确定后,则由UI或UE使用做绘图工具来描绘黑白稿(我主要使用Photoshop来进行这个步骤,跟据个人习惯不同,大家的方式也有所区 别,比如淘宝UED Team及Baidu UE更多的则采用线稿的形式)。也许是做UI的原因,我习惯还是采用黑白稿,方便界面设计,在结构上也会精确到像素,比如:导航高度40px.头条采用 20px黑体,图片规格:104×85px,页面的各区域的留白为5px…等等,只有这样才会发现更多细节上的问题,当然到界面设计的同时你也会尝到更多 的甜头。
3) 原型

完成以上的二个步骤后,产品的基本功能,结构,规范都已经大致成型.这时你可以叫上程序部、销售部及需求部门产品经理,在白板上对着黑白稿做最终的讨论。经过二次、三次调整,最终定下完整的产品原型。
另外,值得提的一点是,在产品原型未确定前,千万别急着去做界面设计,因为之前的讨论主要会通过白板、Word或纸稿。在原型未确定前,有很多潜在 的问题表现不是很直白,比如:”窄了、窄了,完了,新闻列表只能放八个字”、”广告放不下了”、”数据提不出来,目前没这个接口…”。如果提前进入界面设 计的环节,一但有问题,就意味着重新又需要找产品经理、技术部、销售进行再次沟通,这个步骤是很烦琐的,也会让人很郁闷的。
三 产品界面设计
主要执行人员:UI、UE、需求部门
需沟通人员:UID、SEO
目前产品的雏形已基至的本成型,虽然还没华丽的外衣,但凹凸有至身型已隐约可见。下一步将进入界面设计阶段.设计师们也将再次体会到黑白稿给他带来的各种便利.
1) UI
我的习惯是,主要针对首页进行风格设计,并出3-4套界面,最终挑选出2套左右提交给需求部门,同时也会指出自己最满意一套,和需求部门进行二,三次碰撞后,最终拿出定稿。
更多请访问:http://www.webdoc.com.cn/demo/p/
2) UE
UE则开始针对原型进行操作上的优化调整,召集用户并组织头脑风暴,收集到相关意见后,由UE整理出交互及用户体验方面改善意见,并反馈给UI及需求部门。比如:”这个文字需要加下划线”、”按钮上不要加样式,反而没有点击的欲望了…”。
3) UID
UID即开始着手准备制作方面相关文档.并提出实现方面的意见.等待效果图最终确定后,则开始相关代码的编制(CSS+DIV、AJAX、Java)。
4) SEO
SEO则根据原型提出搜索引擎优化的意见,为制作阶段代码优化做准备.
这个阶段一定要保证与需求部门沟通到位,当产品界面最终定稿后,建议再组织一次讨论,这次用户面对着是实实在在的产品,所感受会和之前有所不同.对产品效果上来说,这次的讨论也会有不少收获。
四 界面设计规范及功能实现
主要执行人员:UI、UE、程序、SEO
需沟通人员:UE、销售
1) 设计规范
考虑到在动态实现方面,光凭效果图很难直接的给予表现,这时需要配合使用说明文档及设计规范规范来做辅助。比如按钮及文字链在触发前后的样式,文字间距…。如下图:

2) 代码及程序开发
由UID进行页面的代码开发(CSS+DIV),并需严格参考SEO理出的相关规范,针对一些AJAX的动态效果还需要程序部人员协助完成,当静态HTML完成后即由技术人员进行程序嵌套,并实现预期的功能。
这个阶段由UI、UE全程跟踪,保证HTML和设计稿最大限度相似前提下,对已实现的功能进行测试,并出交互设计改善文档,提交给技术人员。
五 产品上线
主要执行人员:需求部门
需沟通人员:UI、UE、程序、销售
这个阶段主要是内容的添加,主要由相关频道编辑完成,对于软性广告位这块还需要和销售进行协调。完成内容添加后,由需求部门、UI、UE进行核查,在保证和内容、功能完整后,进行整体上线。
六 分析报告及优化方案
主要执行人员:UE
需沟通人员:UE、UID、程序、需求部门、 销售
产品上线后,由UE进行数据及意见的收集,在二周后出相关改善文档,协调各部门进行优化的工作。
在产品设计中我基本上都是采用这套流程,也希望和大家同共探讨。
这篇文章没啥外链,还是来点吧,推荐看下 白鸦的Blog。
坚决抛弃powerdesigner建模
这几天新到一个公司,投入他们的产品线开发,几天下来发现旧系统分层结构中竟然没有BO层,任何VO的变动都会影响相应的业务层发生改变,可能变动仅仅就是加了一些字段。
整个公司统一采用powerdesigner做设计,完全就是忽视概念模型,通通的采用数据库建模,之前工作的一家公司也是一样的设计方式,甚至这边,很多公司都是这样,而且基本都是一些大公司。
郁闷的,整个系统最稳定的概念模型层没有,除了基本的曾删改,很多业务逻辑都需要通过SQL去实现,一旦VO或者业务逻辑发生小许改变,系统就变得很不稳定。
而且这些公司做的还都是移动电信BOSS之类的系统,业务极端复杂,数据库模型已经复杂到根本没办法很好的表现业务模型。理解起来非常费劲,简单的问题都被复杂化到无以忍受。根本没有可能进行组件级的复用,产品化起来太困难了,都是通过配置来写差异化代码。
个人觉得,项目设计中最重要的就是设计概念模型,抽象业务,坚决抛弃powerdesigner建模,不过倒是可以用它设计数据库实现,维护数据库更新。还有就是,OR-Mapping在设计中太重要了,就是要通过它强化对象模型,弱化数据库模型,我本人设计倒无所谓,就算不用OR-Mapping框架,也会按照这样的思想去做,但是开发新手往往做不到这点,没有OR-Mapping框架去限制他,往往项目搞久了,后面的东西不成样了,我总在公司强调在业务层建模,再去设计数据库,没办法,似乎大家都习惯了,认为设计数据库就是设计系统。
—-
很遗憾,目前的很多公司,不论大小,数据库建模还是基本都在用,也都在用java做很多面向过程的编程,他们要的不是过程,只是结果。做出来东西就是好的
——–
| 工具只是手段,重要的是思想。
思想是:面向对象的分析设计 如Evans DDD |
——–
这只是你对PowerDesinger不了解罢了,我一直都是用它来进行思考、设计的。谁说它没有概念模型,只是你不去设计而已。我使用PowerDesinger的设计步骤基本是这样的:先设计概念模型,然后通过概念模型直接生成数据库设计模型和POJO类设计模型,然后在生成好的模型基础上再做进一步改进
——–
可以用starUML,免费,开源,而且也比较小,比Rose小巧得多,而且也支持UML2.0,只是是英文版的,好像没有中文版。它绝对是免费的UML工具中比较好的一个了。

这里看
这里看
Recent Comments