- A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.”
Consider: Make sure you have a solid suite of tests. first refactor to make it easy to add the feature, then add the feature. refactoring changes the programs in small steps, so if you make a mistake, it is easy to find where the bug is.
Prototype, Proof-of-Concept and Skeleton System 原型，概念验证和骨架系统
What is Software Engineering?
“Software engineering is an engineering discipline that is concerned with all aspects of software production from initial conception to operation and maintenance.”
What is Software Process?
“The systematic approach that is used in software engineering is sometimes called a software process. A software process is a sequence of activities that leads to the production of a software product.”
A simplified and abstracted representation of a software process is called a software process model.软件过程的简化和抽象表示称为软件过程模型。
- A software process model is often called a Software Development Life Cycle (SDLC) model
- software process models E.g., V-model, Spiral model, RAD (Rapid Application Development) model, Agile model, Waterfall model, Increment model, etc.
- Process Paradigms ：Each of them can be extended and adapted to create more specific software engineering processes. They can also be seen as process frameworks.
The Importance of Software Engineering
- To be able to produce reliable and trustworthy systems economically and quickly. 可以经济和快速地生产可靠可信的系统。
- It is usually cheaper, in the long run, to use software engineering methods and techniques.从长远来看，使用软件工程方法和技术通常更便宜。
Software type 软件类型
- Stand-alone applications独立应用程序
Applications that run on personal computers, mobile devices or mainframes • For example, Adobe Photoshop, Windows Calculator, etc.
- Interactive transaction-based applications交互式应用程序
Applications that run on a remote computer, but accessed by users from their own computers • For example, Web applications, Taobao Apps, cloud-based services, etc
- Embedded control systems 嵌入式控制系统
Software that control and manage hardware devices such as refrigerator temperature control, microware cooking functions, oil pump control, etc.冰箱温度控制，微波炉烹饪功能，油泵控制等。
- Batch processing systems 批量处理系统
- Application systems that process data in large batches
For example, cell phone billing systems, staff salary payment systems, bank transaction processing systems, etc.
- Entertainment systems 娱乐系统
• Most of these systems are games that can run on personal computers or special console hardware, e.g., Xbox, PS4, Nintendo Switch, etc.
- System for modeling and simulation 仿真与建模系统
Application systems developed for scientists and engineers to model and simulate physical processes, chemical reactions, protein folding, visualization, etc. 用于生物学，工程系等领域，模拟等
- Data collection and analysis systems 数据收集和分析系统
- Software systems that collect data from their environment and send that data to other systems for processing
For example, data warehouse, data lake, big data analytics systems, sensor data processing systems, etc. 如数据仓库、数据湖、大数据分析系统、传感器数据处理系统等。
- Systems of systems 子系统/内置系统
Systems or subsystems used in the large-scale enterprise or organizations.大型企业或组织中使用的系统或子系统。
For example, Enterprise Resource Planning (ERP) system, or systems that are composed from other discrete systems.
Software Engineering Fundamentals 软件工程基本原则
Use managed and understood development process, this may depend on the type of software to be developed.
Organize and plan the development process.
The software system should behave as expected, without failures
The software system should be available有效的 when it it is required
It should be safe and secure
Understand the expectations期望 from different stakeholders利益相关者
Balance conflict矛盾的 requirements
Deliver交付 the software system within the allocated budget and time 在分配的预算和时间内交付软件系统
Management & Reuse 管理与复用
Effective use of existing resources, this may include staffs, skills, available technologies and software
Concept Map 概念图
Fundamental Activities in General Process Models 通用流程模型中的基本活动
- Software Specification 软件规范
- Software Development 软件开发
- Software Validation 软件校验
- Software Evolution 软件进化
The Waterfall Model 瀑布模型
- Embedded Systems
Software needs to interface with hardware systems
Usually, hardware is inflexible; it is often inconvenient to delay decisions on the software's functionality until it is being implemented
Critical Systems 关键系统
There is need for extensive广泛 safety and security analysis of the software specification and design
The software specification and the design documents must be complete
Safety related problems are usually expensive to correct
Large Software Systems 大型软件系统
Multiple partners jointly developing the software system, complete specifications may be needed to allow for the independent development of different subsystems.
- It is simple and easy to manage due to the rigidity of the model. • It encourages verification and validation at all phases. • It gives equal weight to both development and testing.
It is not suitable where the requirements are at a moderate to high-risk of changing. • It is not suggested for long and complex object-oriented software projects.
Incremental Development 增量开发
With each increment the product evolves with enhancements being added every time until the final version is completed. Code is written and tested in smaller pieces, thus reduces risks associated with the process.
- Reduced cost for implementing requirements changes.
Receiving feedback early
- Early delivery of partially working product
- The process is not visible
- System structure tends to degrade退化 as new increment are added
The Spiral Model 螺旋模型
- Determine Objectives
- Identify and resolve risks
- Development and Test
- Plan the next iteration
- Reducing the amount of software to be developed
- Reducing the cost and risks
- Faster delivery交付 of the software
- The requirements compromises妥协 may drift the original idea of the system
- Limited control over the system evolution对系统演化控制力有限
Applicability of Software Models 开发模型的实用性
Rational Unified Process 统一软件开发流程
- Inception 奠基
Envision the product scope, vision, and business case.
Construction and Transition 施工建设和过度