引言
需求分析阶段需要经历两个步骤:首先,提出问题的人说一些话,以告诉帮助他解决问题的人他要干什么,这就是“问题陈述”,即通过语言或者文字对某个关注点的细节进行表述。然后,解决问题的人和提出问题的人进行沟通,以确证这个问题的细节,这就是“探索需求”,这是一个反复沟通的过程。
需求分析在现代软件开发中的地位日趋重要,这也意味着我们认为现今的需求过程尚不完善。这种不完善很大程度上体现在“问题陈述”和“人们真正想要的东西”之间的差距上,或者说,“问题陈述”没有能够陈述清楚“人们真正想要的东西”。
在过去几年,软件过程和软件工程流行的时代,很多人已经被时尚所左右,言必称自动化,开口即软件工程,仿佛所有的开发问题都已经解决。更有甚者,有人还认为需求分析中的歧义的根源是因为“人”的参与。有人认为“人”的不确定性导致了“陈述”的不确定性,由此导致了“人”提出的“问题陈述”的歧义。并且,他们认为只要排除掉需求分析过程中的人的因素,然后用一种严格论证、高度自动化的、规范的方法论来进行分析,就能够消除这种歧义了。
但是,我们无法“剔除”具有严重不确定性的“顾客”;同样,我们实在不能不把顾客当人看待的。
自动化方法干的是“大事情”。40年前需要很多个星期才能完成的工作量,今天只需要一个小时就能够搞定。而且,由于自动化工具的发展,我们还开始挑战那些在以前想都不敢想的系统。然而,随着工具的进步,软件产品在可用性方面的口碑却并没有多少提高。
对于那些需求明确、陈述无歧义、一定程度上模式化了的内容,自动化方法非常擅长;但是也还有一些涉及到人性心理方面的棘手问题却无法用这些方法来解决。换句话说,只要是有规律的、统一的开发过程,自动化方法非常擅长;而在不同项目或产品之间的差异和个性化,则需要更细致的分析。
我们不妨做一个简单的计算。
规模为S的项目中有P%的问题为公共问题,有Q%(Q+P=100)的问题为个性问题。
在时间T1时,我们每解决一个公共问题需要投入T,每解决一个个性问题需要投入M。解决个性问题在整个项目中所占的投入为:R1=M×Q/(T×P+M×Q)。
在时间T2时,我们每解决一个公共问题需要投入t,每解决一个个性问题需要投入m。解决个性问题在整个项目中所占的投入为:R2=m×Q/(t×P+m×Q)。
从T1到T2,自动化水平提高了,于是有T>>t,公共问题和个性问题的比例变化很小,而且对于每个个性问题的投入也变化很小,即有M≈m。从而可以得到R1<
这表明,随着自动化水平的急剧提高,我们在个性问题方面的投入比例也急剧提高。
个性问题,亦即是人性方面的因素反而随着自动化程度提高而愈显得重要了。这一特征在那些具有多年开发经验的人们当中早已成为了共识。也就是说,经验丰富的专家们在技术任务上的投入少了,而在人性因素方面的投入更多了。
语言和符号系统
语言是我们表达思想的工具,也是某种文化的载体。在开发系统方法中,我们也有语言,那就是符号系统。相信所有人都碰到过因为语言不通而产生的交流障碍;同样,在符号系统上,我们也碰到了交流障碍。
语言文字所传递的信息包括“内涵”和“外延”两部分。人们在说话传递信息时,往往会附加上各种语态、表情、动作作为对其所说语音的外延;甚至我们可以认为,因为我们来自各个不同的省份县市,各种不同的方言乡音也传递了丰富的外延。
于是,对于同样的事件或需求,我相信没有任何两个人的描述是完全一致的。承认这一点对于我们直面需求分析的困难会有很大的帮助。
我们这里给出优秀符号系统的两个重要要求(当然这仅仅是众多要求中的两个),以帮助我们将来使用这些符号。例如说,首先符号系统要能够比较全面地表述我们所碰到的绝大部分问题;其次为了适合产品开发的过程化,符号系统的表述结果要比较轻易保存和修订。这也是对一个优秀的CASE和CAD工具的基本要求:在任何时候都可以保留并修改我们当前的结果。实际上,几乎所有的符号系统本身是不可能完全“直观”和“易读”的。
假如,要让所有相关人员都能够理解某种符号系统,那么,最直接的办法就是培训这些相关人员。下面的步骤可以测试一下当前的映射图到底有多直观:
1、把每一幅映射图展示给那些不知道这种符号系统的人来看。这种方法能够揭示出符号系统中不直观的地方。当然,也有可能揭示的是这个映射图中需要表达的那部分信息本身的不直观。
2、让每个人用自己熟悉的符号系统重新描述一遍对映射图的理解,然后再让一个理解这两种符号系统的人来核对。这样可以揭示映射图中的一些人为的假设。
3、使用某种能够把别的符号系统自动转换成某种“标准”的符号系统的自动化工具。
上面讲到了因为不同的符号系统导致的对映射图的理解的分歧,这就相当于由于语言不通而导致了交流障碍。最直接最常见的办法就是推迟需求工作的进度,先让大家都来学习这种语言(或符号系统)。但是,这也是不切合实际的,因为这样有可能还会让大家失去对需求过程的爱好和冲动。经验表明,把这些学习时间安排为需求阶段的一部分会好一些,因为这时候我们可以一边学习语言,一边解决问题。
非凡地,我们需要指出,任何一种符号系统都不可能百分之百地反映需求。下面提出了一些关于如何让开发者较好地表述需求的语言的建议。
1、在生活(或开发项目)当中,我们往往会碰到一些不明是由的旁人(非专业人员)横加职责,他们往往不愿意或者不屑于花时间来了解设计过程的时候,这时候,建议雇用一个明白事理而又口齿伶俐的调解人会比较有效。
2、人们不愿意参与设计过程的一个重要原因是现在的所谓“专业设计人员”的高高在上的姿态。千万要注重顾客和旁人(实际上是决定事态结果的裁决者)仅仅是对开发过程不了解,他们在别的方面(比如说法律、业务等)却是专家,这也是需要他们参与的原因。
3、一部分自动化过程的固执而忠实的拥趸认为他们的“直观”的符号系统很轻易被别人看懂。这时候,不妨让他给小组里外的成员培训一下他的符号系统。
4、对于同一个需求过程中的两批不同背景的专家,经常会倾向于说两种不同的符号系统。那么最好的办法就是用两种不同的符号系统都表述一遍。
5、用一种大家都能听懂的语言来作为正式文档的语言会比较有效,那么在需求过程中也最好事先指定一种“大家都能理解的”符号系统作为正式文档。假如谁不懂的话,就让他去学好了。
6、不同母语之间的翻译会有优劣之分,同样不同符号系统之间的翻译也有优劣。优劣的背后就是分歧,也就是歧义。需求过程经历了从真正最终用户——用户代表——需求分析员——需求规格说明书这么一长串的步骤,每一步都是一种翻译,因此保证每一个步骤都是最优的就显得格外重要了。
7、需要注重的是,需求过程并不完全是瀑布式的。随着过程的深入,我们极有可能会像老牛一样进行反刍。
更多的请看:http://www.QQread.com/windows/2003/index.Html引言
需求分析阶段需要经历两个步骤:首先,提出问题的人说一些话,以告诉帮助他解决问题的人他要干什么,这就是“问题陈述”,即通过语言或者文字对某个关注点的细节进行表述。然后,解决问题的人和提出问题的人进行沟通,以确证这个问题的细节,这就是“探索需求”,这是一个反复沟通的过程。
需求分析在现代软件开发中的地位日趋重要,这也意味着我们认为现今的需求过程尚不完善。这种不完善很大程度上体现在“问题陈述”和“人们真正想要的东西”之间的差距上,或者说,“问题陈述”没有能够陈述清楚“人们真正想要的东西”。
在过去几年,软件过程和软件工程流行的时代,很多人已经被时尚所左右,言必称自动化,开口即软件工程,仿佛所有的开发问题都已经解决。更有甚者,有人还认为需求分析中的歧义的根源是因为“人”的参与。有人认为“人”的不确定性导致了“陈述”的不确定性,由此导致了“人”提出的“问题陈述”的歧义。并且,他们认为只要排除掉需求分析过程中的人的因素,然后用一种严格论证、高度自动化的、规范的方法论来进行分析,就能够消除这种歧义了。
但是,我们无法“剔除”具有严重不确定性的“顾客”;同样,我们实在不能不把顾客当人看待的。
自动化方法干的是“大事情”。40年前需要很多个星期才能完成的工作量,今天只需要一个小时就能够搞定。而且,由于自动化工具的发展,我们还开始挑战那些在以前想都不敢想的系统。然而,随着工具的进步,软件产品在可用性方面的口碑却并没有多少提高。
对于那些需求明确、陈述无歧义、一定程度上模式化了的内容,自动化方法非常擅长;但是也还有一些涉及到人性心理方面的棘手问题却无法用这些方法来解决。换句话说,只要是有规律的、统一的开发过程,自动化方法非常擅长;而在不同项目或产品之间的差异和个性化,则需要更细致的分析。
我们不妨做一个简单的计算。
规模为S的项目中有P%的问题为公共问题,有Q%(Q+P=100)的问题为个性问题。
在时间T1时,我们每解决一个公共问题需要投入T,每解决一个个性问题需要投入M。解决个性问题在整个项目中所占的投入为:R1=M×Q/(T×P+M×Q)。
在时间T2时,我们每解决一个公共问题需要投入t,每解决一个个性问题需要投入m。解决个性问题在整个项目中所占的投入为:R2=m×Q/(t×P+m×Q)。
从T1到T2,自动化水平提高了,于是有T>>t,公共问题和个性问题的比例变化很小,而且对于每个个性问题的投入也变化很小,即有M≈m。从而可以得到R1<
这表明,随着自动化水平的急剧提高,我们在个性问题方面的投入比例也急剧提高。
个性问题,亦即是人性方面的因素反而随着自动化程度提高而愈显得重要了。这一特征在那些具有多年开发经验的人们当中早已成为了共识。也就是说,经验丰富的专家们在技术任务上的投入少了,而在人性因素方面的投入更多了。
语言和符号系统
语言是我们表达思想的工具,也是某种文化的载体。在开发系统方法中,我们也有语言,那就是符号系统。相信所有人都碰到过因为语言不通而产生的交流障碍;同样,在符号系统上,我们也碰到了交流障碍。
语言文字所传递的信息包括“内涵”和“外延”两部分。人们在说话传递信息时,往往会附加上各种语态、表情、动作作为对其所说语音的外延;甚至我们可以认为,因为我们来自各个不同的省份县市,各种不同的方言乡音也传递了丰富的外延。
于是,对于同样的事件或需求,我相信没有任何两个人的描述是完全一致的。承认这一点对于我们直面需求分析的困难会有很大的帮助。
我们这里给出优秀符号系统的两个重要要求(当然这仅仅是众多要求中的两个),以帮助我们将来使用这些符号。例如说,首先符号系统要能够比较全面地表述我们所碰到的绝大部分问题;其次为了适合产品开发的过程化,符号系统的表述结果要比较轻易保存和修订。这也是对一个优秀的CASE和CAD工具的基本要求:在任何时候都可以保留并修改我们当前的结果。实际上,几乎所有的符号系统本身是不可能完全“直观”和“易读”的。
假如,要让所有相关人员都能够理解某种符号系统,那么,最直接的办法就是培训这些相关人员。下面的步骤可以测试一下当前的映射图到底有多直观:
1、把每一幅映射图展示给那些不知道这种符号系统的人来看。这种方法能够揭示出符号系统中不直观的地方。当然,也有可能揭示的是这个映射图中需要表达的那部分信息本身的不直观。
2、让每个人用自己熟悉的符号系统重新描述一遍对映射图的理解,然后再让一个理解这两种符号系统的人来核对。这样可以揭示映射图中的一些人为的假设。
3、使用某种能够把别的符号系统自动转换成某种“标准”的符号系统的自动化工具。
上面讲到了因为不同的符号系统导致的对映射图的理解的分歧,这就相当于由于语言不通而导致了交流障碍。最直接最常见的办法就是推迟需求工作的进度,先让大家都来学习这种语言(或符号系统)。但是,这也是不切合实际的,因为这样有可能还会让大家失去对需求过程的爱好和冲动。经验表明,把这些学习时间安排为需求阶段的一部分会好一些,因为这时候我们可以一边学习语言,一边解决问题。
非凡地,我们需要指出,任何一种符号系统都不可能百分之百地反映需求。下面提出了一些关于如何让开发者较好地表述需求的语言的建议。
1、在生活(或开发项目)当中,我们往往会碰到一些不明是由的旁人(非专业人员)横加职责,他们往往不愿意或者不屑于花时间来了解设计过程的时候,这时候,建议雇用一个明白事理而又口齿伶俐的调解人会比较有效。
2、人们不愿意参与设计过程的一个重要原因是现在的所谓“专业设计人员”的高高在上的姿态。千万要注重顾客和旁人(实际上是决定事态结果的裁决者)仅仅是对开发过程不了解,他们在别的方面(比如说法律、业务等)却是专家,这也是需要他们参与的原因。
3、一部分自动化过程的固执而忠实的拥趸认为他们的“直观”的符号系统很轻易被别人看懂。这时候,不妨让他给小组里外的成员培训一下他的符号系统。
4、对于同一个需求过程中的两批不同背景的专家,经常会倾向于说两种不同的符号系统。那么最好的办法就是用两种不同的符号系统都表述一遍。
5、用一种大家都能听懂的语言来作为正式文档的语言会比较有效,那么在需求过程中也最好事先指定一种“大家都能理解的”符号系统作为正式文档。假如谁不懂的话,就让他去学好了。
6、不同母语之间的翻译会有优劣之分,同样不同符号系统之间的翻译也有优劣。优劣的背后就是分歧,也就是歧义。需求过程经历了从真正最终用户——用户代表——需求分析员——需求规格说明书这么一长串的步骤,每一步都是一种翻译,因此保证每一个步骤都是最优的就显得格外重要了。
7、需要注重的是,需求过程并不完全是瀑布式的。随着过程的深入,我们极有可能会像老牛一样进行反刍。
更多的请看:http://www.qqread.com/windows/2003/index.html引言
需求分析阶段需要经历两个步骤:首先,提出问题的人说一些话,以告诉帮助他解决问题的人他要干什么,这就是“问题陈述”,即通过语言或者文字对某个关注点的细节进行表述。然后,解决问题的人和提出问题的人进行沟通,以确证这个问题的细节,这就是“探索需求”,这是一个反复沟通的过程。
需求分析在现代软件开发中的地位日趋重要,这也意味着我们认为现今的需求过程尚不完善。这种不完善很大程度上体现在“问题陈述”和“人们真正想要的东西”之间的差距上,或者说,“问题陈述”没有能够陈述清楚“人们真正想要的东西”。
在过去几年,软件过程和软件工程流行的时代,很多人已经被时尚所左右,言必称自动化,开口即软件工程,仿佛所有的开发问题都已经解决。更有甚者,有人还认为需求分析中的歧义的根源是因为“人”的参与。有人认为“人”的不确定性导致了“陈述”的不确定性,由此导致了“人”提出的“问题陈述”的歧义。并且,他们认为只要排除掉需求分析过程中的人的因素,然后用一种严格论证、高度自动化的、规范的方法论来进行分析,就能够消除这种歧义了。
但是,我们无法“剔除”具有严重不确定性的“顾客”;同样,我们实在不能不把顾客当人看待的。
自动化方法干的是“大事情”。40年前需要很多个星期才能完成的工作量,今天只需要一个小时就能够搞定。而且,由于自动化工具的发展,我们还开始挑战那些在以前想都不敢想的系统。然而,随着工具的进步,软件产品在可用性方面的口碑却并没有多少提高。
对于那些需求明确、陈述无歧义、一定程度上模式化了的内容,自动化方法非常擅长;但是也还有一些涉及到人性心理方面的棘手问题却无法用这些方法来解决。换句话说,只要是有规律的、统一的开发过程,自动化方法非常擅长;而在不同项目或产品之间的差异和个性化,则需要更细致的分析。
我们不妨做一个简单的计算。
规模为S的项目中有P%的问题为公共问题,有Q%(Q+P=100)的问题为个性问题。
在时间T1时,我们每解决一个公共问题需要投入T,每解决一个个性问题需要投入M。解决个性问题在整个项目中所占的投入为:R1=M×Q/(T×P+M×Q)。
在时间T2时,我们每解决一个公共问题需要投入t,每解决一个个性问题需要投入m。解决个性问题在整个项目中所占的投入为:R2=m×Q/(t×P+m×Q)。
从T1到T2,自动化水平提高了,于是有T>>t,公共问题和个性问题的比例变化很小,而且对于每个个性问题的投入也变化很小,即有M≈m。从而可以得到R1<
这表明,随着自动化水平的急剧提高,我们在个性问题方面的投入比例也急剧提高。
个性问题,亦即是人性方面的因素反而随着自动化程度提高而愈显得重要了。这一特征在那些具有多年开发经验的人们当中早已成为了共识。也就是说,经验丰富的专家们在技术任务上的投入少了,而在人性因素方面的投入更多了。
语言和符号系统
语言是我们表达思想的工具,也是某种文化的载体。在开发系统方法中,我们也有语言,那就是符号系统。相信所有人都碰到过因为语言不通而产生的交流障碍;同样,在符号系统上,我们也碰到了交流障碍。
语言文字所传递的信息包括“内涵”和“外延”两部分。人们在说话传递信息时,往往会附加上各种语态、表情、动作作为对其所说语音的外延;甚至我们可以认为,因为我们来自各个不同的省份县市,各种不同的方言乡音也传递了丰富的外延。
于是,对于同样的事件或需求,我相信没有任何两个人的描述是完全一致的。承认这一点对于我们直面需求分析的困难会有很大的帮助。
我们这里给出优秀符号系统的两个重要要求(当然这仅仅是众多要求中的两个),以帮助我们将来使用这些符号。例如说,首先符号系统要能够比较全面地表述我们所碰到的绝大部分问题;其次为了适合产品开发的过程化,符号系统的表述结果要比较轻易保存和修订。这也是对一个优秀的CASE和CAD工具的基本要求:在任何时候都可以保留并修改我们当前的结果。实际上,几乎所有的符号系统本身是不可能完全“直观”和“易读”的。
假如,要让所有相关人员都能够理解某种符号系统,那么,最直接的办法就是培训这些相关人员。下面的步骤可以测试一下当前的映射图到底有多直观:
1、把每一幅映射图展示给那些不知道这种符号系统的人来看。这种方法能够揭示出符号系统中不直观的地方。当然,也有可能揭示的是这个映射图中需要表达的那部分信息本身的不直观。
2、让每个人用自己熟悉的符号系统重新描述一遍对映射图的理解,然后再让一个理解这两种符号系统的人来核对。这样可以揭示映射图中的一些人为的假设。
3、使用某种能够把别的符号系统自动转换成某种“标准”的符号系统的自动化工具。
上面讲到了因为不同的符号系统导致的对映射图的理解的分歧,这就相当于由于语言不通而导致了交流障碍。最直接最常见的办法就是推迟需求工作的进度,先让大家都来学习这种语言(或符号系统)。但是,这也是不切合实际的,因为这样有可能还会让大家失去对需求过程的爱好和冲动。经验表明,把这些学习时间安排为需求阶段的一部分会好一些,因为这时候我们可以一边学习语言,一边解决问题。
非凡地,我们需要指出,任何一种符号系统都不可能百分之百地反映需求。下面提出了一些关于如何让开发者较好地表述需求的语言的建议。
1、在生活(或开发项目)当中,我们往往会碰到一些不明是由的旁人(非专业人员)横加职责,他们往往不愿意或者不屑于花时间来了解设计过程的时候,这时候,建议雇用一个明白事理而又口齿伶俐的调解人会比较有效。
2、人们不愿意参与设计过程的一个重要原因是现在的所谓“专业设计人员”的高高在上的姿态。千万要注重顾客和旁人(实际上是决定事态结果的裁决者)仅仅是对开发过程不了解,他们在别的方面(比如说法律、业务等)却是专家,这也是需要他们参与的原因。
3、一部分自动化过程的固执而忠实的拥趸认为他们的“直观”的符号系统很轻易被别人看懂。这时候,不妨让他给小组里外的成员培训一下他的符号系统。
4、对于同一个需求过程中的两批不同背景的专家,经常会倾向于说两种不同的符号系统。那么最好的办法就是用两种不同的符号系统都表述一遍。
5、用一种大家都能听懂的语言来作为正式文档的语言会比较有效,那么在需求过程中也最好事先指定一种“大家都能理解的”符号系统作为正式文档。假如谁不懂的话,就让他去学好了。
6、不同母语之间的翻译会有优劣之分,同样不同符号系统之间的翻译也有优劣。
优劣的背后就是分歧,也就是歧义。需求过程经历了从真正最终用户——用户代表——需求分析员——需求规格说明书这么一长串的步骤,每一步都是一种翻译,因此保证每一个步骤都是最优的就显得格外重要了。
7、需要注重的是,需求过程并不完全是瀑布式的。随着过程的深入,我们极有可能会像老牛一样进行反刍。