1.质量是评价设计师工作的关键
质量才是软件设计师的工作重点。满足功能需求只是一个软件设计方案的必备条件,但只有满足功能需求并且坚固的软件设计方案才是好的设计,它的设计师才是优秀的设计师。在所有工程领域中,能够流传后世被广为借鉴的都是坚固的工程设计,这一点毋容置疑。在通常情况下,比较两个设计方案好坏的主要标准就是坚固性,以质量高的一方为佳。
一定要清楚地认识到,评价一个设计师的标准不是他能否实现一个功能,而是他能否以高质量的方式实现一个功能。一个好的软件设计师应能够依据成本、人力、时间、资源等项目的工程环境,为满足明确的功能需求,给出一个足够高质量的软件设计方案。软件设计相关的理论、方法、技术、原则等也都是为了提升软件设计方案的质量而得以存在和传播的。
2.软件设计要满足哪些质量
软件产品的质量是多维度的。系统为满足显式的及隐含的要求而需要具备的要素称为质量。为了度量一个系统的质量,人们通常会选用系统的某些质量要素进行量化处理,建立质量特征,这些特征称为质量属性。为了根据质量属性描述和评价系统的整体质量,人们从很多质量属性的定义当中选择了一些能够相互配合、相互联系的特征集,它们被称为质量模型。IEEE1061-1992和ISO/IEC 9126-1(参见附录)定义了软件系统的质量模型。
从IEEE1061-1992和ISO/IEC 9126-1的质量模型可以看出,虽然实质内容基本相同,但人们对质量特征的选择和定义存在着很大差异。除此之外,对于不同的软件系统来说,其关注的质量属性也是不同的,通常只是整个质量模型中的一个子集。
3.常见的质量要求
实践中最为常见的质量属性是易用性、可维护性、性能、可靠性和灵活性等,如图1-8所示。
图1-8 常见的质量要求及其重要性
4.不同规模软件系统的质量差异
大型软件系统与小型软件系统在复杂度上有质的不同,影响它们复杂度的因素有着很大的区别。以建筑为例,如果建筑者的任务是搭建一面临时性的墙壁,那么其复杂度主要取决于墙壁预期的功能用途。但是如果建筑者需要盖一个平房式的普通民居,那么除了功能用途之外,坚固性、成本等因素也会影响工程的复杂度。如果建筑者的任务是建成一栋几十层的大厦,那么防火、抗震、通风、采光、周围环境、工期等更多的因素都会加入进来,影响工程的复杂度。如果要建立另一个迪拜塔,那么气流、时间差等也会成为影响复杂度的因素。
与建筑同理,不同规模软件系统的质量因素是不同的,主要可以分为三个层次(如图1-9所示)。
图1-9 不同规模软件系统的质量因素差异
1)开发一个只需要五六个类和近千行代码的软件就像搭建一面临时性墙壁,能够正确、精准实现适合的功能即可。本书后面将这些与功能性相关的质量统称为正确性,不再细分正确、精准和适合。
2)开发“以应用为中心”的中大规模软件系统就像盖一个平房式的普通民居,成本和可修改性等因素也会成为软件开发时需要面对的问题。成本取决于软件系统的易理解、易开发和易测试性。可修改性与可复用性、可扩展性和灵活性通常正向变化,升则同升、降则同降,可以认为它们是一个质量组。
3)大型复杂软件系统的开发就像建立一栋大厦,可靠性、效率、可移植性、市场特性、人员与分工等更多的因素会加入进来,极大地增加了软件系统开发的复杂度。
按照软件规模计,20世纪70年代中期之前的软件设计主要关注功能正确性质量集,当时的软件系统规模还比较小。20世纪70年代中期到20世纪90年代中期的软件设计主要关注成本质量集和可修改性质量集,这个阶段的软件系统规模主要是中大规模。20世纪90年代中期之后大规模软件系统成为主流,软件设计(尤其是软件体系结构)开始关注安全、可靠、性能等更复杂的质量因素。