我是“软件学院”但不是“软件工程学院”专业的,有一些方面可能会让“软件工程”专业的学生觉得“概念不清晰”,一些方面可能又让“计算机学院”的学生觉得“基础没学好”,我的方法是基于直接的观察、对比而进行合理化的论述,欢迎交流、补充和批评。
引百度百科的说法:
软件需求是(1)用户解决问题或达到目标所需条件或权能(Capability)。 (2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或权能。 (3)一种反映上面(1)或(2)所述条件或权能的文档说明。它包括功能性需求及非功能性需求,非功能性需求对设计和实现提出了限制,比如性能要求,质量标准,或者设计限制。
我想要尤其指出,这里的“权能”的概念(Capability),在英语中跟“电容”(capacitance)有着相似的首字母。
为了清楚,下面我们把“权能”即capability读作“卡帕比利醍”。
从法律和社会运行来看,“卡帕比利醍”实现了软件从社会到计算机,又从计算机回到社会的根本通道甚至全部通道。
很多软件需求分析不够专业,就是对合方在软件中的卡帕比利醍的理解是僵死的、机械的、不适用的、不全面的,这个问题很多项目经理同学其实已经做了很多值得探讨的论述,但目前似乎还谈不上很系统化。
我觉得卡帕比利醍的把握的困难至少有时间、空间、社会、内外部环境这些方面。
== 时间 ==
时间上的困难在于,随着时迁物转,卡帕比利醍可能已经扩大或者缩小。所以很多好的卡帕比利醍的研究,是耐得住时间的考验的。例如水木,水木将“为用户提供有价值的信息”提高到站规的层面,不知道这是不是水木在漫长的中国互联网历史中仍然保持着巨大的成功的主要原因。
不专业的卡帕比利醍的分析,往往体现为产品经理的朝令夕改,迷失自我,放弃成功。很多人不知道卡帕比利醍的分析是一项很专业的工作,远远看了几眼就以为自己看到了历史的终结,本来好的项目也给做坏了,投资人还蒙在鼓里。
新手包括我,对卡帕比利醍的理解可能有太多脱离实际的地方,又可能很多地方做的还不够,而时间在这个方面又不等人。这是很可以吸取教训的。
== 空间 ==
我们主要讨论系统外部环境,而且主要是系统外部的自然环境。社会环境和人的因素放到下一个小节。
空间怎么能影响软件需求的卡帕比利醍呢?一些“飞捷”分子,是不相信空间对卡帕比利醍的影响的。但是这其实并不存在事实的困难,例如你的软件要在农田实现智能化的耕种,你却不知道具体的农田自然环境对控制算法特定的要求。又例如你要做一个地图导航软件,你却没有地理空间数据。
空间对卡帕比利醍的影响,如果硬分为空间影响卡帕比利醍较大的软件,及空间影响卡帕比利醍较少的软件,显然“地理信息系统”就是一类空间对软件卡帕比利醍影响很大的情况。而比如说编辑器,似乎主要是自然环境通过影响人的心理来影响的。
这个方面我的理解还太浅,欢迎大手补坑。
③ 社会,内外部环境……
这些方面太琐碎,我们先略过。
接着我们回到操作系统的讨论来。一般说的windows,经过这么多年的发展,好像已经具有了三个不同切面的意义:
① 一种信息技术。历史来看,windows是随着中国打开国门,作为信息时代的先进生产力的那种意思被介绍的,这个切面来说的windows在国内传播的远超很多人的想象。而且,windows在这个点上对中国是负责任的、有诚信的,做了很多历史上有客观重大意义的从最低层到最高层的工作。
② 作为一种跟开放操作系统尤其是linux对立的运行工作环境。这主要是在一些用过linux的用户那里的理念。这主要是windows的闭源问题,一方面很难从他的内部去了解,一方面又让一些人从安全自主可控的方面找到了攻击点。
③作为一种操作系统的实例。这主要是科研工作者尤其是操作系统研究人员和很多有传承自早期计算机使用的经验那些人的观点。在这个切面上,是真的知道什么东西可以算windows独创,什么是linux特有,以及全面的操作系统概念的各种的历史的内涵的。
我们可以看到,这些工作其实并没有人做:
① 突破以windows的能力为典型的信息技术的理解。也就是说,好像没有人从“linux是一种信息技术”的角度去建构linux……最近看到一些资料,已经有人又在这个方向上了。
② 开放的否定和封闭性的再次肯定。前几年linux用户好像还打了鸡血似得鼓吹开放、反对封闭。这几年很多人出来反思开放是不是也有问题,例如可控性、开放和安全、开放和效率。而windows为什么选择了封闭性,是不是鼓吹所谓的“商业公司要不计一切极端盈利”是真的懂?是不是没有历史的原因windows就是邪恶的?
③ 明晰的操作系统和生产生活、社会生活、娱乐生活的关系是怎么被创造、把握和实现的?那种将不同的操作系统作为不同的“客观事物”的角度在学理上是抓住了操作系统作为客体的统一性的,但是现在来看,主体的方面的阐述似乎太少。
请注意,这三者直接都很跟作为软件的操作系统的卡帕比利醍有着很重大的关键性。
== 最广泛的卡帕比利醍是信息技术==
(作为计算机软件的)操作系统是一种信息技术,这差不多是操作系统最抽象、最广泛的卡帕比利醍。实际上任何的软件都可以认为具有作为信息技术的卡帕比利醍,但我们先回到操作系统。这就是说,操作系统本身就是一种信息时代的一种面向信息处理的方式,而且这不仅仅是作为客体的方面,还包括它的运行一种信息技术的有所为有所不为的取舍的方面,还包括它的介入生产世界社会活动的途径、方式、质效、特殊性,等等。(下面再说)。就此我们可以指出,其实不仅仅Windows是一种信息技术,linux也是一种信息技术,就是Android,iPhone同样是一种信息技术。
== 操作系统作为运行工作环境的卡帕比利醍 ==
这方面,很多介绍操作系统的书已有涉猎。在这种意义上,操作系统跟浏览器,编辑器,微信公众号平台,等等,甚至没有区别,即都是一种特定的运行工作环境,提供了一种可以实现用户希望的活动的工具给用户。
当然,具体来说又是实践的。例如一种说法认为操作系统的位置是“应用软件和硬件的连接”,但我并不同意这是操作系统的决定性的定义。而且我们可以注意到不同的“运行工作环境平台”。
这个方面的内容比较庞大,先略去了。
== 作为一种操作系统的实例的各种操作系统的卡帕比利醍 ==
很容易发现,不同的操作系统对自身的卡帕比利醍的定义,这种定义的组织,以及如何去实现这种组织,是不一样的,而且对于还在发展的操作系统来说,其卡帕比利醍甚至是在演化的。
在这里,我们似乎可以得到一个结论,问题不在于哪个操作系统更好,问题在于不同的操作系统的卡帕比利醍是什么。同样的,决定软件的根本属性的东西,不是软件的某个部分,无论是他的前端还是后台,而是他如何理解他作为用户的信息生活的一部分的卡帕比利醍。
== 总结 ==
最后,我们提出一个简单的框架来作为讨论软件的卡帕比利醍的一种方式。
(1)软件的权能规则。(卡帕比利醍规则)。这就是说软件允许做什么和不做什么,这包括软件的一切功能,兼容性,支持方面,平台适应,特定要求切面和应用特点,等等。
(2)软件的权能规则的实现方式。(卡帕比利醍规则的实现方式)。这包括软件的一切模块,一切理论的实践的内外部实现的规定、协议、软件部门、软件工作部门、软件运行条件,等等。
(3)软件的权能规则的软件实现形态。(卡帕比利醍规则的软件实现形态。)这包括代码,文档,运行环境,运营环境条件,一切可以为用户感知的软件物理化客体等等。
这个分析的框架不是唯一的。这个框架还比较缺乏内涵,欢迎各位有识之士公布、揭露。
最后我们回到操作系统来看,虽然操作系统被认为是一种“系统软件”,同时操作系统也是一种计算机应用软件。不同的操作系统可能有着不同的卡帕比利醍,而不同的卡帕比利醍可能又有着相同的点,他们整体地构成了操作系统大家族的不同成员。
--
修改:darkk FROM 223.72.70.*
FROM 223.72.70.*