当前位置: 首页 > 编程日记 > 正文

现代软件工程 第十章 【典型用户和场景】 练习与讨论

1. 讨论:下面的老板犯了什么错误?

user_study_hotel_room

只看用户的表面语言或行动还是不够的。我们还要找到用户语言行动背后的动机!

(图像来源: http://www.weibo.com/funnyshoelace)

2. 是否要文档

有人说,我们敏捷的团队,就喜欢直接的面对面的交流,不喜欢搞文档什么的,多好!

其实大多数情况下,留下文字说明是很有好处的,相对于后来的浪费和返工,当初花的时间真的是太值了。看下面的例子:

自习课时,教务主任匆匆走进来,告诉班长“帮我找两个人,我要班花”,同时两手在胸前做了一个抱花的动作,就走了。班长就组织全班投票评选起班花来,闹了一节课,搞了一些大数据,终于统一了意见,选出了班里最漂亮的两个MM。于是俩MM很羞涩的去找主任,主任说:“怎么是你们?男生都哪儿去了?好吧,跟我去后勤,我要搬花……”

可见,面对面直接的交流当然很敏捷, 但是还是要留下文档, 以明确用户的需求。

3.  ATM操作界面的用户

团队要设计一个银行自动柜员机 (ATM) 的操作界面, 这个柜员机摆在银行营业厅的外面。你觉得会有多少种用户来使用你的操作界面?

(提示:多于5种用户类型)

4.  练习:

你想写一个游戏,你知道游戏用户有哪些种类么?

参考答案:有些公司根据玩家游戏生命周期特点来划分玩家类型:

  1. 重度发烧友 (hard core) 玩家根据游戏安排日程
  2. 中度发烧玩家根据日常生活计划安排游戏时间
  3. 休闲玩家只在刚好有空的时候,才考虑以游戏作为消遣

这些定义很实用,因为它使我们明确了玩家对游戏的期待是什么。对于休闲的用户,你的游戏就不宜要求用户在开始游戏之前必须完成详细的注册或练习阶段。

5. 别做过头

场景驱动 (scenario driven) 的设计做过了头会是什么情况?一天,大家在讨论“吴小石头上货”这一场景时,二柱叫到:“停,别忙了,我有了场景!”他从桌子底下抽出一个模型,上面摆着用纸糊起来的房子、院子等,中间有几个人形的木头疙瘩,他指着其中一个木头疙瘩说,“这就是吴小石头,我们问他怎么做就行了!”

在你的项目中有做过头的情况么?

5. Spec 写作练习

怎么才能写好Spec?其实也不难,就是要把一件事情描述清楚,下面是一个练习:

如果你要给一个外星人描述怎么系鞋带, 写一个 “系鞋带“ 的spec (用英语), 你怎么写?

第一, 我们要定义好相关的概念

—what is “shoe”, “shoe laces”, “tied shoe laces”, and “untied shoe laces”  鞋, 鞋带, 系鞋带, 解鞋带都是什么概念

—Benefit of this feature “tie your shoe laces”。 系好鞋带的好处是什么

—The goal of the feature?                                    系鞋带的目标是什么?

—What does “success” look like?                       什么叫系好了?

—Unambiguous steps to achieve from “untied” to “tied”   明确的步骤来演示系鞋带的过程

这是两个同学写的系鞋带的spec: 例子1, 例子2。

第二, 规范好一些假设 (assumptions), 例如, 鞋带是已经穿好在鞋上的么? 什么样的鞋属于我们要处理的? 

imageimage

第三, 避免一些误解, 下面这个从技术上也是 ”鞋带绑紧了“,  但它是 “系好了”么? 打了死结算成功么? 要打多少个蝴蝶结才算好?

image

第四, 厘清一些边界条件,  下面的情况属于好的系鞋带状态呢,  还是不好的状态呢? 这需要PM/Dev/Test 协商达成一致意见。鞋带要打多紧才算好? 打好的鞋带能拖在地上么?

imageimageimage imageimageimageimageimage

第五, 描述主流的用户/软件交互步骤。

image

相关文章:

赠书 | 读懂生成对抗神经网络 GAN,看这文就够了

生成对抗神经网络(Generative Adversarial Nets,GAN)是一种深度学习的框架,它是通过一个相互对抗的过程来完成模型训练的。典型的GAN包含两个部分,一个是生成模型(Generative Model,简称G&#…

把Doc文档转换成rtf格式

先在项目引用里添加上对Microsoft Word 9.0 object library的引用。 using System; namespace DocConvert { class DoctoRtf { static void Main() { //创建一个word的实例 Word.Application newApp new Word.Application(); // 指定源文件和目标文件 object Source&quo…

中国书法的造型元素与原理 刘彦湖

为什么80%的码农都做不了架构师?>>> --------------------------------------------------------------------------------中国书法的造型元素与原理 刘彦湖 中国书法是用最基本的元素遵从中国人特有的形式原则建构起来的大厦。 对于元素及其品质的认…

融云任杰:强互动,RTC 下一个“爆点”场景 | 拟合

从无序中寻找踪迹,从眼前事探索未来。2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

推荐一个个人感觉比较有吸引力的网站

2019独角兽企业重金招聘Python工程师标准>>> 廖雪峰的官方网站 转载于:https://my.oschina.net/AaronCN/blog/294293

C# 2进制、8进制、10进制、16进制...各种进制间的轻松转换

在.NET Framework中,System.Convert类中提供了较为全面的各种类型、数值之间的转换功能。其中的两个方法可以轻松的实现各种进制的数值间的转换: Convert.ToInt32(string value, int fromBase): 可以把不同进制数值的字符串转换为数字&#x…

solrj操作单机solr

2019独角兽企业重金招聘Python工程师标准>>> 在目前的生产过程中全文检索技术应用越来越广,其中涌现了一批非常好得开源搜索引擎框架,如solr,elasticsearch等等。其中我工作使用最多的是solr,并在此对之前工作做一个总结。 solr的…

基于微软开源深度学习算法,用 Python 实现图像和视频修复

‍‍作者 | 李秋键编辑 | 夕颜出品 | AI科技大本营(ID:rgznai100)图像修复是计算机视觉领域的一个重要任务,在数字艺术品修复、公安刑侦面部修复等种种实际场景中被广泛应用。图像修复的核心挑战在于为缺失区域合成视觉逼真和语义合理的像素&…

C#实现光盘做启动盘

一 :编程思想 1、创建启动盘 插入要创建的启动盘,程序自动检测光驱中光盘,利用WMI(Windows管理架构:Windows Management Instrumentation)读取该光盘的序列号(具有唯一性)&#xf…

为云服务立规矩——首批可信云服务认证名单公布

俗话说,没有规矩不成方圆。在云服务蓬勃发展的今天,无论从规范行业发展,还是为用户提供保障,推动政府云服务采购的角度来说,云服务市场都需要立规矩。7月15日至16日,以“可信中国云,未来新生态”…

Java:多个文档合并输出到一个文档

多个文档合并输出到一个文档 方法:Java NIO package First;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.channels.FileChannel; import java.nio.channels.WritableByteChannel;public class Test {pu…

线性表之顺序表(C语言实现)

线性表是从数据元素的逻辑结构上定义的. 这种数据元素的逻辑结构的特征如下: 1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素. 2.第一个元素无前驱元素,但有后继元素. 3.最后一个元素有前驱元素,单无后继元素. 可以抽象为如下表述: 元素1元素2元素3元素4元…

C# POP3编程

POP3的使用很简单,所以.net没有向SMTP那样给出相应的类来控制. 废话少说,程序员最需要的使代码,:)! 1.打开VS.NET 2003. 2.新建一个WinForm Application. 3.添加命名空间 using System; using System.Drawing; using System.Collections; using System.ComponentModel; usi…

终于有人把 Python 讲清楚了!

Python因为其优越的特性广泛应用于数据分析、人工智能、Web开发、后端开发、自动化测试/运维、爬虫等领域,也得到了很多企业的青睐。甚至连BATZJ的技术大牛,都无可否认Python现在对于一个程序员发展的重要性!最近一两年,我身边也有…

ASP.NET Core的配置(5):配置的同步[设计篇]

本节所谓的“配置同步”主要体现在两个方面:其一,如何监控配置源并在其变化的时候自动加载其数据,其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步;其二、当Configuration对象承载的配置放生变换的时候如何向…

C#分析数据库结构,使用XSL模板自动生成代码

<html> <head> <TITLE>分析数据库结构,自动生成代码</TITLE> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> </head> <frameset cols"237,767" rows"*"> <…

超棒整理 | Python 关键字知识点大放送

作者 | 黄伟呢来源 | 数据分析与统计学之美其实前面我已经为大家总结了《Python系统关键字 “超全总结” 及其 “含义”》。今天呢&#xff0c;我将对每一个关键字列出一个例子&#xff0c;供大家参考学习和记忆。1、and、or、notand、or、not关键字都是逻辑运算符&#xff0c;…

linux下java进程占用高问题分析过程

2019独角兽企业重金招聘Python工程师标准>>> 1.用top命令找出占用cpu高的进程&#xff0c;记录下pid 2.用top -H -p pid(上面的pid)查看该进和下各线程占用cpu的情况&#xff0c;找出占用cpu高的线程pid 3.printf "%x\n" pid(上面线程的pid)打印出对应的十…

AWS - Couldformation 初探

AWS里面&#xff0c;所有的管理界面的功能都可以通过API或者JSON脚本实现&#xff0c;这样的好处是很容易的就和cloudwatch一起实现各种HA和autoscaling的应用。豆子初次使用cloudformation&#xff0c;写了一个简单JSON来创建一个EBS的Volume。我的模板定义的很简单&#xff0…

清华团队让 AI 写诗“更上一层楼”,诗歌图灵测试迷惑近半数玩家

作者 | 黄珊来源 | 数据实战派比特币外挖无穷洞&#xff0c;机神犹未休。卡中窥币影&#xff0c;池里验沙流。屡载吸金主&#xff0c;孤深渍盗求。方知区块链&#xff0c;本是古来游。这首诗歌来自一支清华团队开发的古诗 AI。它的创作才华可不仅限于此。再看下面这首诗&#x…

js中Dom元素及获取方法

DOM基础对象documentdocument.documentElement html部分document.head document.titledocument.body body部分获取元素对象方法document.getElementById(); 通过id找到对象document.getElementsByTagName(); 通过标签名找到对象并放到数组集合中document.getElementsByNam…

JavaBean简单及使用

一、JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件&#xff0c;在JSP的开发中可以使用JavaBean减少重复代码&#xff0c;使整个JSP代码的开发更简洁。JSP搭配JavaBean来使用&#xff0c;有以下的优点&#xff1a; 1.可将HTML和Java代码分离&#xff0c;这主要是为…

华为发布《AR洞察与应用实践白皮书》,提出用5G点燃AR,用AR照亮5G

[中国&#xff0c;深圳&#xff0c;2021年06月17日] 今日&#xff0c;在华为共赢未来5GAR全球峰会&#xff08;Better World Summit&#xff09;上&#xff0c;华为运营商BG首席营销官蔡孟波&#xff0c;发表了主题演讲《5GAR&#xff0c;让梦想照进现实》&#xff0c;提出用5G…

C#中虚函数,抽象,接口的简单说明

虚函数&#xff1a;由virtual声明&#xff0c;它允许在派生类中被重写&#xff0c;要重写方法&#xff0c;必须先声名为virtual public class myclass { public virtual int myint() { 函数体&#xff1b;} } class myclass1:myclass { public override int myint() { 函数体1&…

【开源】博客园文章编辑器4.0版发布

源起 最近个人时间多起来了&#xff1b; 于是打算持续写一点东西&#xff1b; 前面写了两篇关于riot.js的东西&#xff1b; 被博客园的领导移出首页了&#xff1b; 原因之一是排版不整齐&#xff1b; 确实是不整齐&#xff0c;这我认&#xff0c; 然而&#xff0c;我自己可是博…

C#中Timer组件用法

Timer组件是也是一个WinForm组件了&#xff0c;和其他的WinForm组件的最大区别是:Timer组件是不可见的&#xff0c;而其他大部分的组件都是都是可见的&#xff0c;可以设计的。Timer组件也被封装在名称空间System.Windows.Forms中&#xff0c;其主要作用是当Timer组件启动后&am…

微软全球副总裁洪小文:应对数字化转型挑战,跨界共创正当时

2021年6月16日&#xff0c;以“跨界共创”为主题的第四届微软亚洲研究院创新论坛在北京举办。今年&#xff0c;大会讨论的主题围绕“跨界创新”&#xff0c;数十家来自不同行业的企业代表&#xff0c;与微软亚洲研究院的计算机科学家就跨领域融合创新、共创精神推进数字化转型、…

Away3d 骨骼动画优化

很多朋友说Away3D 的骨骼数限制在32根&#xff0c;确切的说应该是Stage3D 的限制。在 AGAL2.0之前 VC寄存器是128个&#xff0c;每个vc常量寄存器最大只能容纳4位&#xff0c;transform占用一个4*4的矩阵&#xff0c;所以如果把一个transform存进vc里面&#xff0c;需要到4个寄…

postgresql中COPY的用法

一.测试创建表&#xff1a;[postgrescacti ~]$ cat test.sql CREATE TABLE weather ( city varchar(80), temp_lo int, temp_hi int, prcp real,date date);二.导入test.sql文件生成表&#xff1a;testdb01> \i test.sql***(Single step mode: verify command)*************…

C#中虚方法重载

在&#xff23;&#xff03;中&#xff0c;进行虚方法的重载有些体会&#xff0c;现与大家分享。 首先请大家看看下面的例子&#xff0c; using System; abstract public class contact { public virtual string prinf() { return ("这是虚方法"); } } publi…