《编码大全》学习笔记 ——前期

参考资料:Steve McConnell《编码大全》第2版
纯笔记,无思考
程序员是软件食物链的最后一环。架构师吃掉需求,设计师吃掉架构,程序员消化设计。
国际化:Internationalization。由于Internationalization首尾两个字符 I和N之间有18个字母,所以又称为I18n。
本地化:Localization。又称为L10n。
1. 软件构建

软件构建是软件开发的核心活动,是每个项目中必不可少的工作。

软件构建的主要活动包括:详细设计、编码、调试、集成、开发者测试(包括单元测试和集成测试)。
 

2. 前期准备

前期准备之于软件开发,好比打地基之于修房子,其重要性不言而喻。

前期工作的中心目标就是降低风险:一个好的项目规划者能够尽可能早地将主要的风险清除掉,使项目的大部分工作能够尽可能平稳地进行。

(1) 问题定义: 问题定义只定义“问题是什么”,不解决问题。
(2) 需求明确
(3) 如何应对构建期间需求的变更

  • 利用需求核对表评估需求的质量:如果需求不够好,可以考虑停止工作,退回去,把需求做好了再继续前进。
  • 确保每一个人都知道需求变更的代价:考虑整理一份进度表和成本估计表,让客户对需求变更的代价有更直观的认识。
  • 建立一套变更控制程序:好处是你只需在特定时候处理变更,不至于手忙脚乱;而客户也知道你打算处理他们的提议,而不是置之不理。
  • 使用能适应变更的开发方法:某些开发方法可让“对需求变更响应”能力最大化,如演进交付。
  • 放弃项目
  • 注意项目的商业价值:某个需求作为功能特色或许不错,但是也需要评估一下是否会增加商业价值。

(4) 架构:软件架构师软件设计的高层部分,用于支撑更细节的设计框架。

架构的重要性:架构的质量决定了系统的”概念完整性",后者决定了系统的最终质量。一个经过慎重考虑的架构为从顶层到底层维护系统的概念完整性提供了必备的结构和体系,为程序员提供了指引。

架构的典型组成部分

  • 程序组织:架构应该定义程序的主要构造块,明确定义每个构造块的责任,构造块之间的通信规则。
  • 主要的类:架构应该详细定义所用的主要类,指出每个主要类的责任,以及该类如何与其它类交互。
  • 数据设计:架构应该描述所用到的主要文件和数据表的设计,详细定义所用数据库的高层组织结构和内容。
  • 业务准则、用户界面设计
  • 资源管理:架构应该描述一份管理稀缺资源的计划。稀缺资源包括数据库连接、线程、句柄、内存等。
  • 安全性:架构应该描述实现设计层面和代码层面的安全性方法。在制定编码规范时应该时刻劳记安全性,包括处理缓冲区的方法、处理非信任数据的准则、保护内存中的秘密数据等。
  • 性能、可伸缩性、互用性、国际化/本地化、输入输出、错误处理、容错性、架构的可行性、关于『买』还是『造』的决策、复用的决策、变更策略等
  • 架构的总体质量:好的架构设计应该与待解决的问题和谐一致。在查看架构的时候,应该是愉快的,因为它给出的解决方案看上去既自然又容易。
    ① 架构应该描述所有主要决策的动机,谨防『我们向来这么做』的自认为有理的说法。
    ② 优秀的软件架构很大程度上与机器和编程语言无关。
    ③ 架构应该踏在对系统『欠描述/underspecifying』和『过度表述/overspecifying』之间的分界线上。
    ④ 架构应该明确指出风险区域,并解释为什么这些区域有风险,以及采取哪些步骤可使风险最小化。
发布了103 篇原创文章 · 获赞 41 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/u012800825/article/details/104223514