软件系统[软件工程]
What’s the link?
They all involve outdated (legacy) software technology.
All have had huge socio-economical impact.
Prompting national lockdowns.
Spreadsheet workflow error led to thousands of preventable infections and deaths.
Huge losses of citizen data through early exploitation of Log4J bug.
All required an urgent (re-)engineering effort.
CovidSim had not been “renovated” over their lifetimes.
… and the PHE Excel workflow built in legacy technology from the outset.
Successful software systems age, and last for decades.
The ability to maintain and renew big old systems is an important skill.
链接是什么?
它们都涉及过时的(遗留的)软件技术。
所有这些都产生了巨大的社会经济影响。
促使全国封锁。
电子表格工作流程错误导致数千人感染和死亡。
早期利用Log4J漏洞造成公民数据的巨大损失。
所有这些都需要紧急(重新)工程努力。
CovidSim在他们的一生中没有被“翻新”。
……以及从一开始就内置于传统技术的PHE Excel工作流。
成功的软件系统会老化,并持续几十年。
维护和更新大型旧系统的能力是一项重要技能。
软件系统
Users, misusers, developers, managers
Frontend / interfaces Web / Windows / CLI
Modules, packages
Data storage
Libraries, components
Methods, functions
Compilers, interpreters
Virtual machines
Operating Systems
Hardware platforms & devices
viewpoint:
Collection of patterns, templates, and conventions for constructing one type of view.
Defines the relevant stakeholders, and the relevant guidelines, principles and template models for
constructing the views.
Context:
Describes the relationships, dependencies, and interactions between the system and its environment.
Functional:
Functional elements, their responsibilities and interactions. Traditionally the starting point for an architectural
description.
Information:
How the architecture stores, manipulates, manages and distributes information. Content, structure, ownership, latency etc.
Concurrency并发性:
Maps functional elements to concurrency units to clearly identify which parts of the system are synchronous or
asynchronous.
Development:
How does the architecture support development - building, testing, maintaining, and enhancing the system.
Deployment部署:
What environment will the system be deployed to? Dependencies on the runtime environment, network connections.
Operational:
How the system will be operated, administered, etc.
Accessibility:
The ability of the system to be used by people with disabilities.
Availability & Resilience弹性:
Ability to be operational as and when required, and to handle failures that could affect availability.
Development Resource:
Ability to be designed, build, deployed, and operated within constraints around people, budget, time, materials.
Evolution:
Ability to be flexible in the face of inevitable不可避免的 change, balanced against costs of providing this
flexibility.
Internationalisation:
Ability to be independent from any particular language, country or cultural group.
Location:
Ability to overcome problems brought about by the location of its elements and distances between
them.
Performance & Scalability:
Ability to predictably execute within mandated performance profile, and handle increasing volumes.
Regulation:
Ability to conform to local and international laws, quasi-legal regulations, company policies, etc.
Security:
Ability to reliably control, monitor, and audit who can perform what mechanisms on what resources.
Usability:
Ease with which people can interact with the system and work effectively.
Hardware:
Can be physically difficult to extract; Embedded components can include hidden logic; Difficult to reverse-engineer if not documented
Operating Systems
Constantly evolving to incorporate changes in hardware.
Vendors eventually remove support for older versions.
Can force the issue when OS support is relied upon.
Can be challenging to adapt legacy code to New filesystems; Changes in security mechanisms.; Removal of support for particular hardware
Compilers, Virtual Machines, Interpreters编译器、虚拟机、解释器
Often tailored to hardware and OS combinations.
Often associated with development kits.
Can require change for many reasons: Deprecation of language features; Removal of support; License changes; Changes in application needs
Source code
Invariable increase in scale and complexity.
Some of which is essential to implement necessary features.
Some of which is accidental - to work around poor design choices.
Code structure is continuously changing.
Impossible to maintain a fixed, reliable document of architecture or design.
Developer knowledge of the system rapidly becomes outdated
Source Code
Definitive record of software structure and behaviour.
Commonly changed when system is reengineered.
Difficult to understand because it is:
Big - hundreds of thousands or millions of lines of code.
Complex - highly interconnected.
Poorly designed - having deteriorated over decades.
Loaded with latent information about what the system should be doing:
Identifiers - variable, method, and class names.
Dependencies - calls between functions indicate hidden relationships