软件系统设计-作业1

作业要求

https://jinqiqing-bucket.oss-cn-nanjing.aliyuncs.com/pdf/assignment-1.pdf

Task1: Quality Attribute Scenarios

Extensibility(可扩展性) vs. Maintainability(可维护性)

1. Extensibility 可扩展性通用方案与具体方案
Portion of Scenario Possible Values
Source 用户、开发者、管理员
Stimulus 需要在现有系统的基础上添加新的功能或改进现有功能,系统需要满足新的需求和环境变化;
Stimulus Artifact 代码、接口、组件、模块
Environment 新的功能需求;新的技术环境;新的操作系统;新的硬件设备
Response 修改/添加现有的代码或新的代码
添加新的组件或模块
对接口进行改进或添加新的接口
Response Measure 所需的时间和人力成本
新的代码和现有代码的兼容性
新的组件或模块的兼容性
新的接口或改进后的接口与现有系统的兼容性
新的代码或接口的可测试性
image-20241215210159138
2. Maintainability 可维护性通用方案与具体方案
Portion of Scenario Possible Values
Source 用户、开发者、维护者、管理员
Stimulus 需要对现有系统进行修改或维护以满足新的需求或修复现有问题;
Stimulus Artifact 代码、文档、测试用例、数据库、配置文件
Environment 安全漏洞;系统bug;新的运行环境;新的需求
Response 修复 bug、更新代码、添加新功能
更新文档、重新设计数据库
测试代码和系统
Response Measure 所需的时间和人力成本
有百分之多少的代码被修改
修改后的代码、文档、数据库或配置文件与现有系统的兼容性
修改后的系统的可测试性、可维护性、易读性
image-20241215210214801

Reliability(可靠性) vs. Recoverability(可恢复性)

1. Reliability 可靠性通用方案与具体方案
Portion of Scenario Possible Values
Source 用户、系统
Stimulus 系统在正常或异常情况下需要始终提供正确的结果或行为;
Stimulus Artifact 软件、硬件、数据
Environment 不同的负载;各种输入和操作;不同的操作系统和硬件平台
Response 系统应该在进行任务时保持一致的行为,并且在所有条件下都能正确地完成其任务
系统应该具有适当的错误处理和容错能力,以避免或减轻故障的影响
系统应该具有充分的安全性,以保护用户数据和系统资源的机密性、完整性和可用性
Response Measure 平均无故障时间、故障率、可靠性增长率
异常处理时间、恢复时间
错误率、安全漏洞数量、数据泄露等安全相关指标
image-20241215210229099
2. Recoverability 可恢复性通用方案与具体方案
Portion of Scenario Possible Values
Source 系统、管理员
Stimulus 系统需要在发生故障或意外情况时能够快速恢复并最小化损失;
Stimulus Artifact 软件、硬件、数据
Environment 各种故障或事故场景,包括硬件故障、软件错误、自然灾害、人为错误等
Response 系统应该在出现故障或错误时,及时发现问题并进行相应的处理,比如重启系统、自动备份数据等,确保系统尽快恢复正常
系统应该能够检测到和恢复从网络和其他外部资源中发生的错误和故障
系统应该具有充分的备份和恢复机制,以确保在系统故障或崩溃时能够恢复数据和配置
Response Measure 恢复时间、数据完整性、数据恢复率
系统备份频率、备份完整性、备份恢复时间等备份相关指标
系统可扩展性和可配置性,以便在发生故障时进行系统配置更改
image-20241215210311543

Task2: Tactics

image-20241215210613760

image-20241215210635593

Task3: Quality Attribute Debate

可扩展性(Extensibility)、可移植性(Portability)、可测试性(Testability)这三个质量属性与可维护性(Maintainability)有着密切的联系。

可扩展性(Extensibility)是指软件系统的设计和实现,能够方便地添加新的功能或修改现有功能,而不会对系统的整体结构和代码的复杂度产生过大的影响。一个具有高可扩展性的系统可以有效地应对未来的变化和需求,降低后期开发的成本和风险。

一个具有高可扩展性的系统往往比较容易维护,因为在设计和实现过程中,高可扩展性通常需要考虑代码的模块化、分层和接口的规范化,从而使得系统的结构和逻辑更加清晰和易于理解。这样,即使在后续的维护和升级过程中需要修改或扩展系统功能,也能够更加容易地实现,不容易产生副作用或破坏系统的整体稳定性。这些都有利于系统的可维护性。

另一方面,一个具有高可维护性的系统也往往具有较高的可扩展性,因为在设计和实现过程中,高可维护性通常需要考虑代码的可读性、可理解性和可维护性,从而使得系统的结构和逻辑更加清晰和易于维护。这样,即使需要扩展或修改系统功能,也能够更容易地理解和修改代码,从而不容易引入错误或产生副作用。

可移植性(Portability)是指软件系统在不同的硬件和软件环境中能够顺利运行,而不需要修改或重新编写代码。一个具有高可移植性的系统可以在不同的平台上进行部署和使用,增强了系统的灵活性和可用性。

具有高可移植性的软件系统通常更易于维护,因为为了实现可移植性,软件系统往往需要遵循一些通用的编程规范和标准,如使用标准的接口、数据结构、文件格式等等,这些规范和标准使得系统更加易于理解和维护。此外,具有高可移植性的软件系统也更易于调试和测试,因为这些系统可以在不同的平台和环境下运行和测试,从而使得问题更容易被发现和解决。

另一方面,具有高可维护性的软件系统也具有较高的可移植性,因为在设计和实现过程中,高可维护性通常需要考虑代码的可读性、可理解性和可维护性,从而使得代码更加规范和易于维护。这些代码规范和标准也使得代码更加具有可移植性,因为这些规范和标准通常是跨平台和环境的,不会受到特定平台和环境的限制。

可测试性(Testability)是指软件系统的设计和实现,方便进行测试,包括单元测试、集成测试和系统测试等各种测试方法。一个具有高可测试性的系统可以提高测试的效率和准确性,从而降低软件缺陷和错误的风险。当系统需要进行维护和修改时,测试可以帮助开发人员及时发现和修复缺陷,降低维护的成本和风险,提高系统的可维护性。

具有高可测试性的软件系统往往具有较高的可维护性,因为在设计和实现过程中,为了实现可测试性,通常需要将系统分解成较小的模块,并为每个模块编写独立的测试用例。这样可以帮助开发人员更加清晰地了解系统的功能和结构,并能够更容易地找到和解决问题。同时,为了编写有效的测试用例,代码的可读性、可理解性和可维护性也需要得到保证,从而使得代码更易于维护。

另一方面,具有高可维护性的软件系统也可能具有较高的可测试性,因为在设计和实现过程中,高可维护性通常需要考虑代码的可读性、可理解性和可维护性,从而使得代码更加规范和易于维护,而这些代码规范和标准也使得代码更加具有可测试性,因为可测试性通常需要代码的可读性和可理解性。