来自:华章出版社 2017-05-02 803
前 言Designing the Requirements: Building Applications that the User Wants and Needs在对IT应用程序开发思考了大约15年之后,我终于写出了这本书。20世纪90年代后期,我开始做IT架构,当时写了一本名叫《IT Architecture and Middleware: Strategies for Building Large, Scalable Systems》的书(那本书的第2版是与Peter Bye合写的,于2004年出版,现在还可以买到)。那本书讲的是构建集成应用程序(integrated application)所需的技术,以及怎样确保应用程序的可扩展性、高可用性以及安全性。那时还有其他一些人也持有类似想法,由于我们的基本思路是向开发者提供一些可复用的服务,使其能够通过集成技术来迅速拼装应用程序,因此,业界把Peter与我所提出的那种解决方案称为面向服务的架构(Service Oriented Architecture,SOA)。SOA显然有很多优势,但实际上并没有发挥太大作用,因为其中好像缺了点什么。我从一开始就怀疑,缺少的那个东西,应该是应用程序的开发。换句话说,我们没办法很好地回答“怎样开发SOA应用程序”这个问题。此问题也可以表述为:“有人向我提出了一些要求,我该怎样确保最后得到的是一套SOA解决方案,而不是一个单独的应用程序呢?”接下来的几年里,我对于架构问题想得少了一些,而对应用程序的开发问题,则想得比较多。我刚开始编写应用程序,是在20世纪70年代后期。从那以后,我主要是在系统与环境软件的领域中进行bug修复及设计工作,我花了很多时间去修整数据管理软件,偶尔也会修复几个编译器或操作系统的bug。在这个过程中,我对系统软件的设计与编程有所接触。其后,我开始从事数据库和资源库的设计工作(对于版本控制问题,我有很多话要讲,但奇怪的是,没几个人愿意听)。到2000年的时候,我对计算机技术的很多方面都已经有了一些经验,但由于自己并没有直接从事大量的应用程序设计与编程工作,因此我还无法坦然地走到应用程序开发者面前,指出他们的做法是彻底错误的。那时的程序开发专家对架构并没有多少兴趣,而是在开发方法上面彼此较劲。有些人崇尚BDUF(big design up front,大设计先行),他们提倡根据UML(Unified Modeling Language,统一建模语言)来做设计,提倡要安排好设计的结构,要用良好的文档描述这套设计,并且要在质量控制流程的监督之下完成整个设计。还有一些人崇尚敏捷(agile),他们认为应该尽快交付软件,然后通过一系列短期的迭代来对软件进行完善,使其满足利益相关者的需求。这两派的关键分歧,在于开发者与利益相关者之间究竟是什么关系。BDUF派认为两者是契约关系,认为软件开发项目应该有一个正规的需求收集环节,而敏捷派则认为应该把软件的功能分成小块,只有在准备实现某个小块的时候,才需要去制定详细的需求,而且认为应该在当前这一小块完工之后,就尽快把可用的软件拿给利益相关者去看。他们希望能够从利益相关者那里不断地获得反馈意见,并据此对软件开发的走向持续进行微调,以便最终实现出正确的产品。笔者试着把这种敏捷开发方法讲给IT领域之外的人听,那些人觉得这不太可靠,然而敏捷派对BDUF派的批评,则确实引起了共鸣。因为利益相关者在没有看到实际运行的软件之前,确实不太了解他们当时提出的那个程序到底会做成什么样。合约并没有一种神奇的能力,可以保证做出来的IT程序一定会讨人喜欢。前言[第1章 情境驱动设计入门1.1 对需求进行设计](https://yq.aliyun.com/articles/109062)[1.2 什么是设计1.2.1 专项的设计1.2.2 有计划的设计1.2.3 工程化的设计1.2.4 设计方法小结](https://yq.aliyun.com/articles/109073)1.3 像工程学那样来开发IT应用程序1.4 重视IT架构1.5 小结[第2章 设计体系2.1 为什么应该建立设计体系](https://yq.aliyun.com/articles/109290)[2.2 情境设计2.2.1 任务2.2.2 用户组2.2.3 数据表2.2.4 任务之间的消息2.2.5 任务之间的依赖关系2.2.6 把所有元素统合起来2.2.7 对情境设计做分析](https://yq.aliyun.com/articles/109296)2.3 集成设计2.4 技术设计2.5 用户界面设计2.6 数据库设计2.7 实现2.8 这样做真的是工程化的设计吗2.9 小结[第3章 复用现有的方法及做法3.1 敏捷3.1.1 个体与交互胜过流程与工具3.1.2 可行的软件胜过繁杂的文档3.1.3 客户协作胜过合同谈判3.1.4 响应变化胜过遵循计划3.1.5 小结](https://yq.aliyun.com/articles/109321)3.2 逆向设计[3.3 用例3.3.1 原子性3.3.2 设计层次不明确3.3.3 用例本身比较模糊3.3.4 大型的用例文档难以理解3.3.5 用例对工程化的设计起不到帮助作用3.3.6 小结](https://yq.aliyun.com/articles/109326)3.4 成本估算问题3.5 BDUF为什么如此笨重3.6 迭代3.7 品质3.8 测试与检验3.9 把现有的做法运用到情境驱动设计之中3.10 学习型的组织3.11 小结第4章 大型应用程序所面临的问题4.1 应用程序的大小体现在多个维度上4.2 大型项目所面临的问题4.2.1 需求问题4.2.2 缺乏终端用户的支持4.2.3 技术设计有问题4.2.4 采购与外包4.3 能够避免大型的项目吗4.4 小结第5章 应用程序与业务的关系5.1 理解业务流程5.2 不能表示为流程的应该怎么办5.2.1 业务服务5.2.2 资源管理5.2.3 评审与监测5.3 用更广阔的视角来观察5.4 将商业策略运用到应用程序的开发中5.4.1 开发速度5.4.2 在成本、性能、可用性之间权衡5.4.3 试验性的商业计划5.4.4 利益要等多久才能变现5.4.5 安全需求5.4.6 针对现有的企业文化来做设计5.4.7 为公司所追求的文化气氛而做设计5.4.8 为计划的变更留出余地5.4.9 为打造学习型的组织提供支持5.4.10 非商务型的应用程序5.5 分析5.5.1 流程的格式是否正确5.5.2 对依赖关系进行分析5.5.3 目标分析5.6 小结第6章 应用程序与用户的关系6.1 添加详情6.1.1 任务细节6.1.2 任务片段6.1.3 共同目标组6.1.4 数据表6.1.5 消息6.1.6 非功能型的需求6.1.7 使用情境设计的人6.2 确定各类用户6.2.1 办理业务流程的用户6.2.2 对工作进行监控的管理型用户6.2.3 使用本程序数据的其他应用程序的用户6.2.4 执行数据分析的用户6.2.5 执行应用程序管理工作的用户6.3 对情境设计进行分析6.3.1 流程层面的分析6.3.2 任务细节分析6.3.3 数据表详情分析6.3.4 用户组详情分析6.3.5 消息详情分析6.4 对情境设计进行评审6.5 小结第7章 应用程序与其他IT项目的关系7.1 集成设计7.1.1 应用程序7.1.2 服务7.1.3 数据库7.2 服务接口设计7.2.1 定义服务接口7.2.2 设计可复用的服务7.3 现有的应用程序7.3.1 确定现有的应用程序7.3.2 替换现有的应用程序7.3.3 用现有的应用程序来制作服务7.4 回顾设计流程7.5 小结第8章 用户界面设计与易用性8.1 逻辑用户界面8.2 把任务描述转化为单击操作8.3 易用性8.3.1 功能8.3.2 信息8.3.3 导航8.3.4 文本8.3.5 帮助8.3.6 直观而亲切的应用程序8.3.7 针对易用性进行设计8.3.8 监测易用性8.4 事务与任务完整性8.5 用户界面设计与其他细节设计之间的关系8.6 小结第9章 数据库设计9.1 数据库设计9.2 数据库设计理论9.3 程序员与数据库设计者之间的关系9.4 数据访问服务9.5 NoSQL9.6 小结第10章 技术设计的原则10.1 单服务器环境下的高性能原则10.1.1 缓存10.1.2 多线程与多元处理10.2 多服务器环境下的高性能原则10.2.1 前端并行10.2.2 后端并行10.3 高弹性原则10.4 测试与性能评估的必要性10.5 技术设计的流程10.6 小结第11章 技术设计的结构11.1 程序结构11.2 什么是框架11.3 各种编程语言11.4 选择编程语言及框架11.4.1 选择与公司的技能组合相匹配的语言11.4.2 选择可以满足应用程序性能目标的语言11.4.3 选择可以满足集成需求的语言11.4.4 如果需要进行小组合作,请选择有利于小组合作的语言11.4.5 在选择编程语言的同时,选择相应的版本控制软件及项目管理软件11.4.6 选择与自己的开发方法相协调的语言11.5 对框架进行扩展11.6 实现通用的功能11.7 小结第12章 安全设计12.1 IT应用程序的安全原则12.1.1 认证12.1.2 访问控制12.1.3 用户管理12.1.4 安全保护12.1.5 安全监控12.2 每一种设计之中的安全因素12.2.1 情境设计12.2.2 集成设计12.2.3 用户界面设计12.2.4 数据库设计12.2.5 技术设计12.3 安全编程12.4 小结第13章 应用程序开发展望13.1 情境驱动设计如何改变应用程序开发13.2 情境驱动设计的机遇13.2.1 新工具13.2.2 情境设计与驱动设计13.2.3 用户界面设计与数据库设计13.2.4 技术设计13.3 应用程序开发所面对的挑战13.3.1 灵活性13.3.2 运营13.3.3 正确性13.3.4 品质13.3.5 职业精神13.4 小结附录A 情境设计核对表参考资料
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。