软件随想录(local.joelonsoftware.com/wiki)-2000年10月03日 无痛功能规格 - 第二篇: 规格是什么? - Painless Functional Specific

本文主要是介绍软件随想录(local.joelonsoftware.com/wiki)-2000年10月03日 无痛功能规格 - 第二篇: 规格是什么? - Painless Functional Specific,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2000年10月03日 无痛功能规格 - 第二篇: 规格是什么? - Painless Functional Specifications. Part 2: What's a Spec?

 

The Joel on Software Translation Project:无痛功能规格(二)

From The Joel on Software Translation Project

Jump to: navigation, search

无痛功能规格 - 第二篇:规格是什么?

作者:周思博 (Joel Spolsky)
译:Paul May 梅普华
编辑:Jeff Wang 王家麒
October 3, 2000
A part of Joel on Software, http://www.joelonsoftware.com


(你看过第一篇吗?如果还没有可以到这里。)

这一系统的文章是在探讨功能规格而非技术规格(译注:也称为工程规格)。人们常会把这两者搅混。我不知道是否有其他标准术语,不过我个人的用法如下:

    1. 功能规格纯粹由使用者的角度来描述产品如何运作。它不管东西是怎么做出来的。功能规格会述及功能,还会详述画面、功能表、对话框等等。
    2. 技术规格则是描述程序內部的实现。它会说明数据结构、关连式数据库模型、程序语言及工具的选用、演算法等等。

当你从头设计一个产品时,最重要的一点就是要确定使用者的体验。要显示什么样的画面,运作的逻辑为何,要达成什么功能。再来还要考虑如何达成。如果产品本身要做什么都还没决定,争论要用哪种程序语言是完全没有意义的。我在这个系列中只会讨论功能规格

我写了一篇简短的规格范例,应该能让你大致了解一份良好功能规格的重点。在我们继续之前请先读这份规格范例。

读完了吗?

一定还没有。现在就去读完再回来,这样我们才能讨论一份良好规格所应具备或不应包含的东西。我会在这里等你。谢谢。

(耐心地等待...)

San_Juan_Old_City.jpg

噢,很好。你回来了。

下面列出一些我在每份规格上都会放的项目。

一段声明。纯粹自卫用。如果你写一段文字说「这份规格还没完成」,别人就不会冲进你办公室把你的头咬掉。等时间流逝规格开始完整时,你可以改写成「就我所知这份规格已经够完整了,不过有什么漏掉了,请告诉我」这提醒我每份规格都需要:

一位作者。有些公司认为规格应该要由整组人来写的。如果你尝试过团体写作,就知道那是最可怕的酷刑。团体写作就留给拥有大批新出厂哈佛毕业生的管理顾问公司吧,他们需要做大量的虚工才能收取巨额费用。你的规格应该由一个人负责并撰写。产品规模很大时就切成几区,让不同人写各区的规格。其他公司认为把个人名字放在规格上会让他「独占功劳」,会太过自我本位,不是良好的「团队合作」模式。胡说。人们对被指派的工作应该要同时有责任所有权。如果规格有问题,在规格上印上大名的规格负责人应该要负责解决。

脚本。当你在设计产品时,一定要想出某些真实存正的状况以及人们使用的方法。否则最后就会设计出一个完全没有真实用途的产品(就像Cue?Cat)。替你的产品选好客户群,针对每种客户想像一个完全虚构而又完全典型的使用者,用很典型的方式使用产品。我的UI设计书(可以在在线免费取得)中的第9章讨论虚构使用者和情境的建立。这些使用者或情境就是用在这里的。状况定得愈清楚愈真实,针对真实或虚构使用者的设计就愈好。这也正是我会放入这么多虚构细节的缘故。

非目标。当你和整组人一起建立产品时,通常每个人都会各有所好,因而产生各式各样真正或虚构的必备心爱功能,如果要将这些功能全部都做出来,恐怕永远做不完而且要花很多很多的钱。所以你必须马上开始删功能,而删功能的最佳方法就是利用规格的「非目标」章节,列出我们不打算做的东西。非目标可能是个不会具备的功能(「没有精神感应式介面!」),也可能是较一般性的定义(「我们不在意这个版本的效能。这个产品跑得多慢都没关系。如果第二版时间够,我们会把效率最佳化。」)这些非目标很容易引起争议,不过尽早把它们曝露出来却是非常重要的。就像老乔治布希说的:「绝对不会做!」

概要。这就像是规格书的目录。它可以是张简单的流程图,也可以是段广泛的架构讨论。大家会先读这部份知道大致轮廓,再来看细节才有意义。

细节、细节、细节。最后会进到细节。除非必须了解特定的细节,否则大多数人都会略过这一部份。当你在设计一个网络服务时,有个好方法就是把所有可能的画面都取个正式的名称,再对每个画面用一整章巨细糜遗地详述细节。

细节是功能规格中最重要的部份。由范例规格中,你可以注意到我对登入页面各种错误状况有极为详细的说明。当邮件地址错误时要怎么做?密码错误时要怎么做?这所有的错误状况,都会对应到将要撰写的真实程序代码,不过更重要的是这些状况都会对应到某人必须做的决策。某个人必须决定遗忘密码时的处理方式。由于不决定就无法写程序,所以规格就必须把决定写下来。

未定义项目。第一版的规格有未定义项目是正常的。我在写初版草稿时总是有很多未定义项目,不过我都会标示出来(加上特殊格式便于寻找),如果可以的话还会讨论各种可选用的方案。等程序人员开始作业时,所有未定义项目都必须处理干凈。(你可能认为,先让程序员从简单的项目做起,你稍后再把未定义项目定清楚。这是个坏主意。光是处理程序人员实现程序时出现的问题就够了,根本不会记得还有些旧问题有待处理。另外解决重大项目时所用的方法也可能会严重影响到程序的写法。)

旁注。在写规格时要记住你会有各种不同的读者:程序员、测试人员、行销人员、技术作者等等。当你在撰写时可能会想到一些只对某类读者有用的小资料。举例来说,我会把写给程序员看的讯息(通常描述某些技术实现细节)标成「技术注解」。行销人员直接跳过而程序人员就会细读。通常我的规格里满满都是「测试注解」,「行销注解」和「文件编写注解」

规格必须是活的。某些程序团队会有一种「瀑布」心态:我们会一次就把整个程序设计好,所以把规格写好印出来丟给程序员就可以收工回家了。对这种想法我只能说:「哈哈哈哈哈哈哈哈!」

这种作法正是规格如此不受欢迎的原因。很多人都对我说:「规格根本没用,因为没有人会照著做。规格总是过时而且从来无法反映产品。」

El_Yunque_Waterfall.jpg

原谅我。你的规格可能总是过时又不能反映产品。不过我的规格可是时常更新的。只要产品还在开发而又出现新的决策,就会持续进行更新。规格总会反映我们对产品运作的最佳认知。只要在程序完成时(也就是所有功能完备但尚未测试除错)规格才会冻结不变。

为了让大家好过一点,我不会每天重新发行规格。通常我会在服务器上放一份最新版供大家参考。遇到特别的里程碑时,我会印一份出来,里面加上修订标记让大家不必重读整份文件(他们可以快速地发现修订标记以便找出变更所在)。

谁该写规格?请看第三篇。

这些网页的內容为表达个人意见。
All contents Copyright 1999-2002 by Joel Spolsky。All Rights Reserved。

 

这篇关于软件随想录(local.joelonsoftware.com/wiki)-2000年10月03日 无痛功能规格 - 第二篇: 规格是什么? - Painless Functional Specific的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885336

相关文章

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

录音功能在哪里? 电脑手机等设备打开录音功能的技巧

《录音功能在哪里?电脑手机等设备打开录音功能的技巧》很多时候我们需要使用录音功能,电脑和手机这些常用设备怎么使用录音功能呢?下面我们就来看看详细的教程... 我们在会议讨论、采访记录、课堂学习、灵感创作、法律取证、重要对话时,都可能有录音需求,便于留存关键信息。下面分享一下如何在电脑端和手机端上找到录音功能

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?