软件构造笔记——第一章 软件构建的质量目标

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/lll_90/article/details/92155237

1.内部质量和外部质量的区别:
最重要的是外部质量,因为它是用户直接可以感受到的;而对其起着决定性作用的是内部质量。
2.正确性和健壮性:取决于规格说明。
符合规格说明的即为正确,异常即为规格说明没有涉及的部分,而错误是不符合规格说明。
3.可拓展性:软件的体系结构越简单,模块的自治性越强就越容易适应外部变化(可拓展性)
4.可复用性与兼容性:
可复用性类似于库的功能;
兼容性强调程序之间的信息交互(如不同操作系统中的文件格式不同,导致另一个操作系统中不能直接阅读另一个系统上传输过来的文件,这就涉及到兼容性);
解决不兼容问题的关键:标准化协议(文件格式、数据结构、用户交互接口(操作系统类型相关))
5.效率:软件对硬件尽可能少的需求能力;
注意:效率是以正确性为前提的,而其他可拓展性、可复用性则可以和它进行折中;
提高效率可进行极致优化的方面:算法、I/O、内存管理;
6.可移植性不仅仅包括物理上的硬件环境,还包括软硬件环境;
7.易用性:包括安装、运行、监控的容易性;
8.功能性:过多的功能造成质量目标一致性的缺失,影响易用性;
解决方式:通过质量提升技术保证增加功能时,其他质量不变、debug来提高质量;在开发过程中,保证最先选择的质量目标的优先地位不变;
9.时效性 可验证性、完整性、可修复性
10.经济性:不超过预算。

性能折中
完整性 vs 易用性 (完整性防止信息的非法访问、篡改)
经济性 vs 功能性 (经济性 和预算相关)
效率性 vs 可移植性 (高效要求与特定硬件环境完美契合)
效率性 vs 可复用性 (可复用性要求解决问题更具有普遍性,而不是针对某一特定问题)
经济性 vs 可复用性
时效性 vs 可拓展性 (为了短时间内满足客户需要,常使用可变性较低的快速应用开发技术)
小结:效率性与特定软硬件环境有关,效率越高,耦合越紧(利用某环境的特性优势)

可靠性包括正确性、健壮性;模块化可以解决可拓展性与可复用性问题。

提高OOP质量的方法,这里只给出容易忽略的地方。
1.正确性:封装 简化每个模块的功能
2.健壮性:封装 错误处理
3.可拓展性:信息隐藏 模块封装
4.可复用性:模块化 使用设计模式(就是后面学的啦)
5.兼容性:标准化模块与接口
6.可移植性:信息隐藏 抽象
7.易用性:GUI组件 框架
8.效率:复用组件(对特定系统有封装后的标准化接口,既满足了效率,有具有通用性)
9.经济性:复用
10.功能性:增强可拓展性

在我们实际软件开发中,要提高下列质量目标,实际可行的措施有:
1.可理解性:
代码层面:添加注释,为方法增加specification,变量的命名、代码风格等
组件层面:包、文件、工作空间的组织、命名
在执行过程中,使用Log、Trace等。

2.可复用性:
代码层面:ADT、OOP的实现与接口分离,类的继承,参数泛型化,使用设计模式,成员对象之间的组合、代理关系,方法的重载、重写等等。
组件层面:类库、框架的使用。

3.健壮性的保证:
代码层面:错误异常处理,断言的使用,防御性编程,测试优先编程
组件:单元测试
开发的一个阶段:进行回退形测试
运行时:通过观察堆栈进行debug,查看某个阶段的Logging,或者Tracing

4.运行时的性能保证:
代码层面:使用设计模式;
运行时的时间空间复杂度进行调优,某一阶段对代码进行性能调优;
运行时,组件:分布式系统,多线程程序。

猜你喜欢

转载自blog.csdn.net/lll_90/article/details/92155237