今天,我学习了构建之法第八章软件需求,人们为了解决现实社会和生活中的各种问题,要求助于软件。人们的需求五花八门,那么软件团队如何才能准确而全面地找到这些需求呢?
需求分析1.获取和引导需求
软件团队需要找到 软件的利益相关者,了解和挖掘他们对软件的需求,引导他们表达出对软件的需求。
不同的项目需要不同的手段,这一步骤也被叫做“需求捕捉”,形容真正的需求稍纵即逝,需要靠火眼金睛和敏捷的身手来发现并抓住它们。另外,很多时候用户并不知道自己确切的需求,或者不愿意表达完整的需求,软件团队需要设身处地,替用户着想,引导出需求。有些需求在实现之前,并没有用户明确表达具体的需求(例如:没有用户说“我希望有一个偷菜的软件,我可以偷别人家的菜”),但是,成功的团队还是可以从“用户需要和朋友之间玩游戏,用户有证明自己能力的需求”这些角度出发,挖掘出需求。另外,软件团队可以分析技术的发展趋势以及产业的变化、社会发展的大趋势,推测用户会产生哪些新的需求。例如,看到全球定位系统(GPS)技术的成熟、地理信息系统的发展、私家车的普及和智能手机性能的不断提高,我们可以推测出利用手机给汽车导航将是一个普遍的需求
需求还可以来自各种 管理机构
例如一些互联网服务对不同年龄用户的内容管理\“敏感词屏蔽”、快速删除网上内容,等等
需求不仅来自外界,还可以来自 软件企业本身
软件企业=软件+商业模式。企业所采用的商业模式会对软件提出需求。一个免费的互联网服务到达一定规模后,企业就会考虑如何让这个服务带来收入,例如一个免费的互联网电子邮件服务会考虑对用户收费,支持几种不同等级的用户,在邮件中附带广告,或者在页面显示广告,等等。这些“需求”并不是来自用户,事实上绝大部分用户都反感这样的“需求”,但是企业需要一个能维持它生存和发展的商业模式,尽管这个模式的种种需求未必都是对用户有利的
需求还可以来自技术团队本身
团队在考虑软件的代码、架构、所依赖平台的长期演化的时候,会提出技术性的需求,包括代码的迁移、架构的演化、平台的变化,或者引入新的技术。例如,为了提高将来的开发效率,一个手机软件的开发者决定逐步引入跨平台的语言和框架;一个依赖客户端/服务器(Client/Server)架构的软件需要支持新的HTTPS协议;原来后台的数据服务使用了专用的数据库和专门的小型机,现在改为基于开源技术的软件和硬件;软件前端代码需要支持某种自动测试工具,以便更有效地进行自动测试,等等
有些需求的目的是要 更好地了解用户的行为和需求”“
例如,我们要在软件的各个功能点加上收集信息的代码,并在后台实现数据收集、整理、报告和数据挖掘(Data Mining)工作。此类技术在一些公司叫Telemetry—遥测技术。