1. 23种设计模式
2. 代码规范(OC与禅)
3. 标准
1. 正确性(Correctness) 系统满足规格说明和用户目标的程度,即在预定环境下能正确地完成预期功能的程度。 如软件有没有按照需求规格来完成,计算出的结果是否正确,计算结果是否精确。
2.健壮性/鲁棒性(Robustness) 健壮性是指在异常情况下如硬件发生故障、输入的数据无效或操作错误等软件能够正常运行的能 力。 健壮性有两层含义:一是容错能力,二是恢复能力。 容错是指发生异常情况时系统不出错误的能力,对于应用于航空航天、武器、金融等领域的这类高风险 系统,容错设计非常重要。 而恢复则是指软件发生错误后(不论死活)重新运行时,能否恢复到没有发生错误前的状态的能力。 例如:因输入数据不正确,引起系统异常,这是容错能力不高引起的健壮性问题;操作系统死机了,重 启后能够正常使用,说明具有一定恢复能力,具有一定的健壮性;数据库发生故障后,再次启动时一般能 够恢复到正常的状态,恢复能力比较好。
3. 可靠性(Reliability) 软件系统在一定的时间内无故障运行的能力。 可靠性是一个与时间相关的属性,指的是在一定环境下,在一定的时间段内,程序不出现故障的概率, 因此是一个统计量,通常用平均无故障时间(MTTF, mean-time to fault)来衡量。 可靠性不同于正确性和健壮性,软件可靠性问题通常是由于设计中没有料到的异常和测试中没有暴露的 代码缺陷引起的。 例:由于某个地方数据库连接没有释放,在长时间运行的时候,出现活动的数据库连接数过多,造成系 健壮性/鲁棒性(Robustness) 健壮性是指在异常情况下(如硬件发生故障、输入的数据无效或操作错误等),软件能够正常运行的能统越来越慢,甚至系统停止服务。
4. 性能(Performance) 性能是指软件及时提供相应服务的能力。 具体而言, 性能包括速度、 吞吐量和持续高速性三方面的要求: 速度往往通过平均响应时间来度量; 吞吐量通过单位时间处理的交易数来度量; 持续高速性是指保持高度处理速度的能力。 效率(Efficiency)指软件对CPU 处理能力和存储能力这两大类计算机资源的使用效率。效率和性能反 映了同一问题的“表”、“里”,性能为“表”,效率为“里”。 如系统运算一个报表,需要很长时间,这就是性能问题。
5.安全性(Security) 指软件同时兼顾向合法用户提供服务,以及阻止非授权使用软件及资源的能力。 安全性既属于技术问题又属于管理问题。一般地,如果黑客为非法入侵花费的代价(考虑时间、费用、 风险等多种因素)高于得到的好处,那么这样的系统就可以认为是安全的。 例:有人可以访问非授权的资源,这就是安全性问题。
6.易用性(Usability) 易用性是指用户使用软件的容易程度。 软件的易用性要让用户来评价。 例:对于一般用户而言,Windows 的易用性比Linux 的高。
7. 可用性(Availability) 指的是产品对用户来说有效、易学、高效、好记、少错和令人满意的程度,即用户能否用软件完成他的 任务,效率如何,主观感受怎样。ISO 9241-11 国际标准对可用性作了如下定义:产品在特定使用环境下为特定用户用于特定用途时所具 有的有效性(effectiveness)、效率(efficiency)和用户主观满意度(satisfaction)。其中: 有效性:用户完成特定任务和达到特定目标时所具有的正确和完整程度; 效率:用户完成任务的正确和完整程度与所使用资源(如时间)之间的比率; 满意度:用户在使用产品过程中所感受到的主观满意和接受程度。
8.互操作性(Interoperability) 指本软件与其他系统交换数据和相互调用服务用以协同运作的难易程度。 例:利用 Web
Service 增加软件的互操作性。
9. 易理解性(Understandability) 理解和使用系统的难易程度。
10.可扩展性(Extensibility)/灵活性(Flexibility)/适应性(Adaptability)/可伸缩性(Scalability) 反映软件适应“变化”的能力。调整、修改或改进正在运行的软件系统以适应新需求、变化了的需求 的难易程度。 例:如报销系统原来不需要总经理审批,现在要改为总经理审批,可扩展性强的系统不需要作太多 调整;如用户和数据量增加时,通过增加服务器来提高系统性能,这样可伸缩性比较强。
11.可重用性(Resuability) 重用软件或其中一部分的难易程度。
12.可测试性(Testability) 对软件测试以证明其满足需求规约的难易程度。
13. 可维护性(Maintainability) 为修改 Bug、增加功能、提高质量而诊断并修改软件的难易程度。
14.可移植性(Portability) 软件不经修改或稍加修改就可以运行于不同软硬件环境的难易程度,主要体现为代码的可移植性。
4.原则(六大原则)
单一职责原则:实现类要职责单一;
里氏替换原则:不要破坏继承体系;
依赖倒置原则:面向接口编程;
接口隔离原则:设计接口的时候要精简单一;
迪米特法则:降低耦合;
5.具体实施
前期以代码抽查为主,后期加入机器检测(搭建基于Sonar的iOS代码质量检测系统)。