大二上软件工程导论课程复习
整理ppt,课件等等。
Waterfall model (瀑布模型)
The waterfall model is a plan-driven process. When you encounter a problem at a certain stage, you solve the problem under the current stage.
瀑布模型是一个由计划驱动的过程。当您在某个阶段遇到问题时,您可以在当前阶段下解决该问题。但要注意的是瀑布模型不能回到上一个阶段。
适用场景
- 产品简单或总量小,可以明确找到每个阶段的所有潜在问题
- 所有潜在问题可以在每个阶段进行预测。
- 外部原因导致,比如多个公司共同开发且公司之间交流成本昂贵
Incremental development model (增量开发模型)
Specification, development, and validation activities are interleaved rather than separate, with rapid feedback across activities.
规范、开发和验证活动是交错的,而不是分开的,跨活动具有快速的反馈。
优点
- 适用于敏捷开发
- 具备快速的反馈
- 能更早的由客户使用并从中获得价值
- 实现需求变更的成本降低了
缺点
- 整个流程不可视
- 如果系统发展迅速,每个版本的文档没有成本效益
- 系统结构会随着新的增量而退化
- 不支持大型复杂,长寿命系统
Integration and Configuration (集成和配置)
经常被重用
- 特定环境下的应用程序
- 组件或集成包开发对象的集合(python第三方库)
- web服务
优点
- 降低成本,提高速度
- 减少测试负荷,保证产品质量
缺点
- 可能有需求无法实现
- 可能失去对系统演化控制,因为新版本不受控制
Project management (项目管理)
目标
- To deliver the software to the customer at the agreed time. 按时交货
- To keep overall costs within budget 缩紧腰包
- To deliver software that meets the customer’s expectations. 按质交货
- To maintain a coherent and well-functioning development team. 找好队友
Project planning
PMs are responsible for planning, estimating, and scheduling project development and assigning people to tasks. PMs supervise the work to ensure that it is carried out to the required standards. 工头监督
Risk management
PMs have to assess the risks that may affect a project, monitor these risks, and take action when problems arise. 工头风控
People management
PMs are responsible for managing a team of people. They have to choose people for their team and establish ways of working that lead to effective team performance. 工头招人
Requirements (需求)
Functional requirements (功能性需求)
These are statements of services the system should provide, how the system should react to particular inputs, and how the system should behave in particular situations.
就是系统对于输入的应对
Non-functional requirements (非功能性需求)
- Non-functional requirements usually specific or constrain characteristics of the system as a whole. They may relate to emergent system properties such as reliability, response time, and memory use. 可靠性,效应时间,内存等等
Requirements engineering process
过程:
- Requirements elicitation 需求引出,发现需求
- Requirements specification 将需求规范化为标准形式
- Requirements validation 需求验证
System Modeling (系统模型)
When we discuss the system with stakeholders, document the system, or generate a system implementation, we may use the graphical structural model.
Context models
showing the relationships between the systems in the environment
Business process model
showing human and automated processes in which particular software systems are used.
Interaction models
- showing Interactions between the software being developed and other systems in its environment.
- showing interactions between the components of a software system
Structural model
Behavioural model
showing what happens or what is supposed to happen when a system responds to a stimulus from its environment.
Architectural design (架构设计)
Architectural design decisions
During the architectural design process, system architects have to make a number of structural decisions that profoundly affect the system and its development process.
Architectural views
4+1views.
Architectural patterns
Layered architecture (分层架构)
Organizes the system into layers, with related functionality associated with each layer.
- when building new facilities on top of existing systems;
- when the development is spread across several teams with each team responsibility for a layer of functionality;
- when there is a requirement for multilevel security.
Repository architecture
All data in a system is managed in a central repository that is accessible to all system components.
- When a system in which large volumes of information are generated that has to be stored for a long time.
- You may also use it in data-driven systems where the inclusion of data in the repository triggers an action or tool.
Client–server architecture
The system is presented as a set of services, with each service delivered by a separate server.
- When data in a shared database has to be accessed from a range of locations.
Design Patterns (设计模式)
A software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design.
Someone has already solved your problems. So, you can exploit the wisdom and lessons learned by other developers who’ve been down the same design problem road and survived the trip.
Instead of code reuse, with patterns you get experience reuse.
Strategy Pattern (策略模式)
Defines a family of algorithms, encapsulates(封装) each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
Observer Pattern
Decorator Pattern
Adapter Pattern
至于这个就太抽象了,不知道是个啥模式:
Software Testing
- The purpose of testing is to show that a program does what it is intended to do and to discover program defects(缺点) before it is put into use.
- When you test software, you execute a program using artificial data. Then, you check the results of a test run for errors, anomalies(异常), or information about the program’s non-functional attributes.
Development testing (开发测试)
三个阶段:
- Unit testing – code testing
- Component testing – interface testing
- System testing — interaction testing, use case based
Test-driven development process
步骤:
- Start by identifying the increment or functionality that is required. This should normally be small and implementable in a few lines of code.
- Write a test for this functionality and implement it as an automated test. This means that the test can be executed and will report whether or not it has passed or failed.
- Run the test, along with all other tests that have been implemented. Initially, you have not implemented the functionality, so the new test will fail. This is deliberate(有意的) as it shows that the test adds something to the test set.
- Implement the functionality and re-run the test. This may involve refactoring(重构) existing code to improve it and add new code to what’s already there.
- Once all tests run successfully, move on to implement the next chunk of functionality.
优点:
- Code coverage.
- Regression testing(回归测试)易查新错
- Simplified debugging (简化测试)易找bug
- System documentation (系统文档)易读
Release testing
- The system development team should not be responsible for release testing. 不背锅!!!
Requirements-based testing (基于需求的测试)
Requirements-based testing is a systematic approach to test-case design where you consider each requirement and derive a set of tests for it. ( A general principle of good requirements engineering practice is that requirements should be testable. )
基于需求的测试是测试用例设计的系统方法,您考虑每个需求并为其导出一组测试。(良好要求工程实践的一个一般原则是,要求应该是可测试的。)
Scenario testing (场景测试)
- A scenario is a story that describes one way in which the system might be used.
- When you use a scenario-based approach, you are normally testing several requirements within the same scenario. Thus, as well as checking individual requirements, you are also checking that combinations of requirements do not cause problems.
Performance testing (性能测试)
- Once a system has been completely integrated, it is possible to test for emergent properties, such as performance and reliability. Performance tests have to be designed to ensure that the system can process its intended load. 一旦一个系统被完全集成,就有可能测试紧急特性,如性能和可靠性。必须设计性能测试,以确保系统能够处理其预期的负载。
- This usually involve running a series of tests where you increase the load until the system performance becomes unacceptable. This approach is also known as stress testing. Stress testing helps to: 1.Test the failure behaviour of the system. Stress testing checks that overloading the system causes it to “fail-soft’’ rather than collapse under its load. 2.Reveal defects that only show up when the system is fully loaded. Although it can be argued that these defects are unlikely to cause system failures in normal use, there may be unusual combinations of circumstances that the stress testing replicates.
翻译:
- 测试系统的故障行为。压力测试检查系统过载导致”软件失败”,而不是在其负载下崩溃。
- 显示仅在系统完全加载时才会显示的缺陷。虽然可以认为这些缺陷在正常使用中不太可能导致系统故障,但可能存在压力测试重复的异常情况组合。
Software evolution (软件演变)
过程
Legacy system(遗留系统)
Legacy systems are older systems that rely on languages and technology that are no longer used for new systems development.
四种选择:
- Scrap the system completely. 报废
- Leave the system unchanged and continue with regular maintenance. 定期维护
- Reengineer the system to improve its maintainability. 重开
- Replace all or part of the system with a new system.换个新的
Types of software maintenance(软件维护类型)
Software maintenance is the general process of changing a system after it has been delivered.
三种类型的软件维护:
- Fault repairs to fix bugs and vulnerabilities修bug修漏洞
- Environmental adaptation to adapt the software to new platforms and environments. 使其适应新的平台和环境
- Functionality addition to add new features and to support new requirements. 增加功能应付新需求
Quality management(质量管理)
ISO 9001 framework – the standards for developing software standards ———->ISO 9001框架-开发软件标准的标准
Reviews and inspections (审查和检查)
审查是指对该团队的成果是否遵循质量标准
检查是指检查代码,找bug~
Configuration management (结构管理)
Version management
Keeping track of the multiple versions of system components and ensuring that changes made to components by different developers do not interfere with each other.
Centralized version control (集中式版本控制)
Developers check out components or directories of components from the project repository into their private workspace and work on these copies in their private workspace. When their changes are complete, they check-in the components back to the repository.
将仓库的组件拷到私人工作区再修改,修改结束后再放回仓库
Distributed version control (分布式版本控制)
A ‘master’ repository is created on a server that maintains the code produced by the development team.Instead of checking out the files that they need, a developer creates a clone of the project repository that is downloaded and installed on their computer. Developers work on the files required and maintain the new versions on their private repository on their own computer. When changes are done, they ‘commit’ these changes and update their private server repository. They may then ‘push’ these changes to the project repository.
……没啥好说的,就是GitHub项目管理的那种方式
System building
The process of assembling program components, data and libraries, then compiling these to create an executable system.
组装组件,编译生成可执行系统
Change management (变更需求)
Keeping track of requests for changes to the software from customers and developers, working out the costs and impact of changes, and deciding the changes should be implemented.
出生行为
Release management(发布管理)
Preparing software for external release and keeping track of the system versions that have been released for customer use.
Software reuse
Reuse-based software engineering(基于重用的软件工程)
目的:设计更快,花费更少
Software reuse may introduce additional costs and risks to software maintenance and evolution.额外风险
- Application frameworks
- Software product lines
- Application system reuse
Application frameworks(框架)
Frameworks are moderately large entities that can be reused. They are somewhere between system and component reuse.
Frameworks are a sub-system design made up of a collection of abstract and concrete classes and the interfaces between them.
The sub-system is implemented by adding components to fill in parts of the design and by instantiating the abstract classes in the framework.
Base systems for a software product line
Application system reuse(应用系统重用)
An application system product is a software system that can be adapted for different customers without changing the source code of the system.
Application systems have generic features and so can be used/reused in different environments.
Application system products are adapted by using built-in configuration mechanisms(配置机制) that allow the functionality of the system to be tailored(定制) to specific customer needs.
Agile development(敏捷开发)
The objectives of agile software development are to deliver functionality quickly, respond quickly to changing specifications and minimise development overheads.
Development Process with Story Cards
- Consumers create story cards.
- Dev team releases stories (i.e. the updated system version) early and often.
Extreme Programming(极限编程)
以更好的响应用户需求变化为目标,更强调软件开发的可适应性而不是可预测性
Refactoring (重构)
Examples of refactoring include the reorganization of a class hierarchy to remove duplicate(重复的) code, the renaming of attributes and methods, and the replacement of similar code sections, with calls to methods defined in a program library.
Test-first development (test driven development)
逆天编程方式,
传统的:
- Analyse the business logic, then, implement the function for the logic
- Create test cases to test the function
逆天的:
- Create test cases
- Write code only to let the function pass the test; just ignore the business logic!
Pair programming(结对编程)
两个程序员用一台机子编程…..一个告诉另一个怎么敲,另一个只负责敲
- Two programmers code simultaneously, but use one computer with one keyboard.
- In each pair, one programmer (navigator) tells the other programmer (driver) what to code, and the driver use the keyboard to program.
Scrum
Scrum is a framework to manage an agile project.
管理敏捷项目的框架
- 3 Roles — Product owner, ScrumMaster, Development team
- StandUp Meeting — A daily short meeting of the Scrum team that reviews progress and prioritizes work to be done that day..
- Sprint — A development iteration (usually 2 to 4 weeks long).
- Scrum Board — A Scrum board gives a quick, easy view of the items within the sprint, that the development team is currently working on and has already completed.