CPT203-Software Engineering: Project Managent 项目管理
目录
1.项目管理概览
1.1项目管理的重要性
1.2项目管理标准Criteria for Project Management
1.3项目管理中的挑战 Challenges in Project Management
1.4项目经理职责 Manager’s Responsibilities
1.5 好的项目经理的能力Abilities of A Good Project Manager
2.风险管理 Risk Management
2.1风险管理过程 Risk Management Process
2.1.1风险识别 Risk Identification
2.1.2 风险分析 Risk Analysis
2.1.3 风险规划 Risk Planning
2.1.4 风险监控 Risk Monitoring
3.人员管理 Managing People
3.1重要性
3.2关键因素
3.3激励人员Motivating People - - 动机 Motivation
4.团队合作Teamwork
4.1.1重要性
4.1.2创建一个有凝聚力的团队的好处:
4.1.3影响团队效能的因素 Influencial Factors
4.1.4一个有凝聚力的团队 A Team of Cohesiveness
4.2 选择团队成员 Selecting group members
4.4团队沟通Group communications
5.持续改进Continuous Improvement
5.1定义
5.2持续改进的特点Continuous Improvement Charateristics
5.3持续改进的策略Strategies for Continuous Improvement
5.3.1敏捷方法论 Agile Methodologies
5.3.2持续集成和持续交付(CI/CD)Continuous Integration and Continuous Delivery
5.3.3
5.4持续改进的度量指标 Metrics for Continuous Improvement
1.项目管理概览
1.1项目管理的重要性
- 软件工程的重要组成部分An essential part of software engineering
- 项目需要被管理,因为专业的软件工程总是受到组织预算和时间表的限制。Projects need to be managed because professional software engineering is always subject to organizational budget and schedule constraints
- 确保软件项目满足并克服这些限制,同时交付高质量的软件。Ensure that the software project meets and overcomes these constraints as well as delivering high-quality software.
- 良好的管理不能保证项目成功,但是糟糕的管理可能会导致:Good management cannot guarantee project success BUT a bad management may result
·延误交付 Late deliver
·成本增加 Increase cost
·未能满足客户的期望 Fail to meet the expectations of customers
1.2项目管理标准Criteria for Project Management
- 按照约定的时间向客户交付软件。Deliver the software to the customer at the agreed time.
- 将总体成本控制在预算之内。Keep overall costs within budget.
- 交付满足客户期望的软件。Deliver software that meets the customer’s expectations.
- 维护一个快乐且运作良好的开发团队。Maintain a happy and well-functioning development team.
1.3项目管理中的挑战 Challenges in Project Management
- 产品是无形的The product is intangible
·软件无法被看到或触摸。Software cannot be seen or touched
- 大型软件项目通常是一次性项目Large software projects are often ‘one-off’ projects
·从以前的项目中学到的经验可能无法转移到新项目中。Lessons learned from previous projects may not be transferable to new projects
- 软件流程是可变的且具有组织特异性Software processes are variable and organization specific
·软件流程在不同组织之间差异很大,无法可靠地预测特定的软件流程何时可能导致开发问题。software processes vary quite significantly from one organization to another -> cannot reliably predict when a particular software process is likely to lead to development problems.
1.4项目经理职责 Manager’s Responsibilities
- 项目规划 Project Planning
·规划、估算和安排项目开发,分配任务给人手,并监督他们。Planning, estimating and scheduling project development, assigning people to tasks, and supervising them.
- 报告Reporting
·向客户和开发软件的公司的经理报告项目进展。Reporting on the progress of a project to customers and to the managers of the company developing the software
- 风险管理Risk management
·评估可能影响项目的风除,监控这些风险,并在出现问题时采取行动。Assess the risks that may affect a project, monitor these risks, and take action when problems arise
- 人员管理 People management
·为团队选择合适的人员并建立工作方式。Choose people for their team and establish ways of working
- 建议书撰写 Proposal writing
·撰写建议书以赢得执行某项工作的合同。 Writing a proposal to win a contract to carry out an item of work
1.5 好的项目经理的能力Abilities of A Good Project Manager
- 激励:能够通过“推动或拉动”的方式鼓励技术人员发挥他们的最佳能力。]Motivation. The ability to encourage (by “push or pull”) technical people to produce to their best ability.
- 组织:能够塑造现有流程(或发明新流程),使得初始概念能够转化为最终产品。Organization. The ability to mold existing processes (or invent new ones) that will enable the initial concept to be translated into a final product.
- 创意或创新:即使在必须在为特定软件产品或应用设定的界限内工作时,也要能够鼓励人们创造和感到有创意。Ideas or innovation. The ability to encourage people to create and feel creative even when they must work within bounds established for a particular software product or application
- 问题解决:有效的软件项目经理能够诊断技术和组织问题。Problem solving. An effective software project manager can diagnose the technical and organizational issues
- 管理身份:一个好的项目经理必须能够掌控项目。他们必须有信心在必要时承担控制权,并且有信心让优秀的技术人员跟随他们的直觉。Managerial identity. A good project manager must take charge of the project. They must have the confidence to assume control when necessary and the assurance to allow good technical people to follow their instincts.
- 影响力和团队建设:有效的项目经理必须能够“读懂”人;他们必须能够理解口头和非口头信号,并对应这些信号发出者的需求做出反应。Influence and team building. An effective project manager must be able to “read” people; they must be able to understand verbal and nonverbal signals and react to the needs of the people sending these signals.
2.风险管理 Risk Management
- 风险管理涉及预见可能影响项目进度或正在开发软件质量的风险,并随后采取行动以避免这些风险。Risk management involves anticipating risks that might affect the project schedule or the quality of the software being developed, and then taking action to avoid these risks.
- 三种相关类型的风险:
·项目风险:影响项目进度或资源的风险(例如,失去一位经验丰富的设计师)。Project risks: Risks that affect the project schedule or resources (e.g., loss of an experienced designer).
·产品风险:影响正在开发软件的质量和性能的风险(例如购买的组件未能按预期执行)Product risks: Risks that affect the quality or performance of the software being developed (e.g., failure of a purchased component to perform as expected).
·商业风险:影响开发或采购软件的组织的风险(例如,竞争对手的新产品)。Business risks: Risks that affect the organization developing or procuring the software (e.g., a new product from competitors).
2.1风险管理过程 Risk Management Process
- 风险识别:识别可能的项目、产品和商业风险。Risk identification: identify possible project, product, and business risks
- 风险分析:评估这些风险发生的可能性和后果。Risk analysis: assess the likelihood and consequences of these risks
- 风险规划:制定应对风险的计划,要么避免风险,要么最小化其对项目的影响。Risk planning: plans to address the risk, either by avoiding it or minimizing its effects on the project
- 风险监控:定期评估风险和风险缓解计划,并在对风险了解得更多时对这些计划进行修订。Risk monitoring: regularly assess the risk and your plans for risk mitigation and revise these when you learn more about the risk
2.1.1风险识别 Risk Identification
- 风险识别是风险管理过程的第一阶段。Risk identification is the first stage of the risk management process.
- 它涉及识别可能对软件工程过程、正在开发的软件和开发组织构成重大威胁的风险。It is concerned with identifying the risks that could pose a major threat to the software engineering process, the software being developed, and the development organization.
- 团队流程和/或项目经理的召集。Team process and/or project manager’s call
2.1.2 风险分析 Risk Analysis
- 考虑每个已识别的风险,并对该风险发生的可能性和严重性做出判断。To consider each identified risk and make a judgment about the probability and seriousness of that risk
- 可能性 Probability
·非常低(<10%),
·低(10–25%),
·中等(25–50%),
·高(50–75%),或非常高(>75%)。
- 严重性 Seriousness
·灾难性(威胁项目的生存),catastrophic (threaten the survival of the project)
·严重(会导致重大延误),serious (would cause major delays),
·可容忍(延误在允许的应急范围内),tolerable (delays are within allowed contingency),
·微不足道。insignificant
2.1.3 风险规划 Risk Planning
- 描述:
·考虑每个已识别的关键风险,并为管理这些风险制定策略。To consider each of the key risks that have been identified, and develops strategies to manage these risks
·思考如果已识别的风险发生,可以采取哪些行动来最小化对项目的干扰。To think of actions that you might take to minimize the disruption to the project if the problem identified in the risk occurs
·考虑在监控项目的过程中可能需要收集的信息,以便能够预见问题。To think about information that you might need to collect while monitoring the project so that problems can be anticipated
- 三类策略 Three categories of strategies
·规避策略:遵循这些策略意味着风险发生的可能性将被降低。(例如,有缺陷的组件)Avoidance strategies: Following these strategies means that the probability that the risk will arise will be reduced. (e.g., Defective components)
·减轻策略:遵循这些策略意味着风险的影响将被减少。(例如,员工生病)Minimization strategies: Following these strategies means that the impact of the risk will be reduced. (e.g., Staff illness)
·应急计划:遵循这些策略意味着你已为最坏的情况做好准备,并有相应的策略来应对。(例如,组织财务问题)Contingency plans: Following these strategies means that you are prepared for the worst and have a strategy in place to deal with it. (e.g., Organizational financial problems)
2.1.4 风险监控 Risk Monitoring
- 风险监控是检查你对产品、流程和商业风险的假设是否发生变化的过程。Risk monitoring is the process of checking that your assumptions about the product, process, and business risks have not changed.
- 定期评估每个已识别的风险,以决定该风险发生的可能性是增加还是减少。(可能性)Regularly assess each of the identified risks to decide whether or not that risk is becoming more or less probable. (Probabilty)
- 同时考虑风险的影响是否发生了变化。(严重性)Also think about whether or not the effects of the risk have changed. (Seriousness)
3.人员管理 Managing People
3.1重要性
- 在软件组织中工作的人才是其最宝贵的资产。People working in a software organization are its greatest assets
·招聘和留住优秀人才成本很高。Costs a lot to recruit and retain good people
·确保组织能够从其投资中获得尽可能好的回报。Ensure that the organization gets the best possible return on its investment
3.2关键因素
- 一致性:项目团队中的人员应该以相似的方式对待。 Consistency: People in a project team should all be treated in a comparable way.
- 尊重:不同的人有不同的技能,管理者应该尊重这些差异。Respect: Different people have different skills and managers should respect these differences.
- 包容性:当人们感觉到别人倾听他们并考虑他们的建议时,他们就能有效地贡献。Inclusion: People contribute effectively when they feel that others listen to them and take account of their proposals.
- 诚实:应该对团队中进展顺利和不顺利的事情保持诚实。Honesty: Should always be honest about what is going well and what is going badly in the team
3.3激励人员Motivating People - - 动机 Motivation
- 作为项目经理,你需要激励与你共事的人员,使他们能够发挥最大的能力。A project manager, you need to motivate the people that work with you so that they contribute to the best of their abilities.
- 动机意味着组织工作和工作环境,以鼓励人们尽可能有效地工作。Motivation means organizing the work and the working environment to encourage people to work as effectively as possible.
- 个性类型也影响动机。Personality type also influences motivation.
·任务导向的人,他们由他们所做的工作所激励。在软件工程中,这些人是由软件开发的智力挑战所激励的。Task-oriented people, who are motivated by the work they do. In software engineering, these are people who are motivated by the intellectual challenge of software development
·自我导向的人,他们主要被个人成功和认可所激励。他们对软件开发感兴趣,作为实现自己目标的手Self-oriented people, who are principally motivated by personal success and recognition. They are interested in software development as a means of achieving their own goals段。
·互动导向的人,他们由同事的存在和行动所激励。随着软件开发变得更加以用户为中心,互动导向的个体越来越多地参与到软件工程中。Interaction-oriented people, who are motivated by the presence and actions of co-workers. As software development becomes more user-centered, interaction-oriented individuals are becoming more involved in software engineering.
4.团队合作Teamwork
4.1.1重要性
- 让一个大群体中的每个人共同解决一个单一问题是不可能,大型团队通常被分成若干小组。It is clearly impossible for everyone in a large group to work together on a single problem, large teams are usually split into a number of groups
- 组建一个具有正确技术技能、经验和个性平衡的团队是一个关键的管理任务。Putting together a group that has the right balance of technical skills, experience, and personalities is a critical management task.
- 在一个有凝聚力的团队中,成员认为团队比团队中的个体成员更重要。In a cohesive group, members think of the group as more important than the individuals who are group members.
4.1.2创建一个有凝聚力的团队的好处:
- 团队可以建立自己的质量标准。因为这些标准是通过共识建立的,它们比外部强加于团队的标准更有可能被遵守。The group can establish its own quality standards Because these standards are established by consensus, they are more likely to be observed than external standards imposed on the group.
- 个体相互学习和支持。团队中的人们相互学习。由于鼓励相互学习,因无知而产生的抑制被最小化。Individuals learn from and support each other People in the group learn from each other. Inhibitions caused by ignorance are minimized as mutual learning is encouraged.
- 知识共享。如果团队成员离开,可以维持连续性。团队中的其他人可以接管关键任务,确保项目不会受到过多干扰。Knowledge is shared Continuity can be maintained if a group member leaves. Others in the group can take over critical tasks and ensure that the project is not unduly disrupted.
- 鼓励重构和持续改进。团队成员集体工作,提供高质量的结果并解决问题,而不考虑最初创建设计或程序的个体。Refactoring and continual improvement is encouraged Group members work collectively to deliver high-quality results and fix problems, irrespective of the individuals who originally created the design or program.
4.1.3影响团队效能的因素 Influencial Factors
- 一个团队是否有效,在一定程度上取决于项目的性质和执行工作的组织。Whether or not a group is effective depends, to some extent, on the nature of the project and the organization doing the work.
- 然而,除了项目和组织问题之外,还有三个通用因素影响团队工作:However, apart from project and organizational issues, there are three generic factors that affect team working:
·团队中的人The people in the group
·团队的组织The group organization
·技术和管理沟通Technical and managerial communications
4.1.4一个有凝聚力的团队 A Team of Cohesiveness
- 优秀的项目经理应该总是努力鼓励团队凝聚力Good project managers should always try to encourage group cohesiveness
·组织社交活动 Organize social events
·给团队命名,建立团队身份和领地Naming the group and establishing a group identity and territory
·明确的团队建设活动,如体育和游戏Explicit group-building activities such as sports and games
·具有包容性 Be Inclusive
4.2 选择团队成员 Selecting group members
- 许多软件工程师主要受工作本身的激励。因此,软件开发团队通常由对如何解决技术问题有自己想法的人组成。Many software engineers are motivated primarily by their work. Software development groups, therefore, are often composed of people who have their own ideas about how technical problems should be solved.
- 具有互补性格的团队可能比仅根据技术能力挑选的团队工作效果更好。A group that has complementary personalities may work better than a group that is selected solely on technical ability.
·受工作激励的人可能是技术最强的。People who are motivated by the work are likely to be the strongest technically
·自我导向的人可能最擅长推动工作向前发展以完成任务。People who are self-oriented will probably be best at pushing the work forward to finish the job.
·互动导向的人有助于促进团队内部的沟通。People who are interaction-oriented help facilitate communications within the group
4.3团队组织Group organization
- 团队的组织方式影响该团队所做的决策、信息交换的方式以及开发团队与外部项目利益相关者之间的互动。The way that a group is organized affects the decisions that are made by that group, the ways that information is exchanged, and the interactions between the development group and external project stakeholders.
- 需要考虑的组织问题:
·项目经理应该是团队的技术领导吗?
·谁将参与做出关键技术决策,这些决策将如何做出?
·与外部利益相关者和公司高层管理的互动将如何处理?
·如何整合不在同一地点的团队成员?
·如何在团队中共享知识?
4.4团队沟通Group communications
- 团队成员之间以及与其他项目利益相关者之间进行有效和高效的沟通是绝对必要的。It is absolutely essential that group members communicate effectively and efficiently with each other and with other project stakeholders.
·团队成员必须交换他们工作状态的信息、已经做出的设计决策,以及对之前设计决策的更改。Group members must exchange information on the status of their work, the design decisions that have been made, and changes to previous design decisions.
·他们需要解决与其他利益相关者出现的问题,并通知这些利益相关者系统、团队和交付计划的变更。They have to resolve problems that arise with other stakeholders and inform these stakeholders of changes to the system, the group, and delivery plans.
·良好的沟通也有助于增强团队凝聚力。团队成员开始理解团队中其他人的动机、优点和弱点。Good communication also helps strengthen group cohesiveness. Group members come to understand the motivations, strengths, and weaknesses of other people in the group.
- 沟通的效率和效果受到以下因素的影响:
·团队规模:随着团队规模的增大,成员之间的有效沟通变得更加困难。Group size As a group gets bigger, it gets harder for members to communicate effectively
·团队结构:在非正式结构的团队中,人们的沟通比在具有正式,层级结构的团队中更有效。Group structure People in informally structured groups communicate more effectively than people in groups with a formal, hierarchical structure.
·团队组成:具有相同性格类型的人可能会发生冲突,因此沟通可能会受到阻碍。Group composition People with the same personality types may clash and, as a result, communications can be inhibited.
·物理工作环境:工作场所的组织是促进或阻碍沟通的一个主要因素。The physical work environment The organization of the workplace is a major factor in facilitating or inhibiting communications.
·可用的沟通渠道:面对面交流、电子邮件、正式文件、电话以及Web 2.0技术,如社交网络和维基。The available communication channels face-to-face, e-mail messages, formal documents, telephone, and Web 2.0 technologies such as social networking and wikis.
5.持续改进Continuous Improvement
5.1定义
- 指的是随着时间的推移,通过渐进式的改进或突破性改进,不断努力增强流程、产品或服务。Refers to the ongoing effort to enhance processes, products, or services incrementally over time or through breakthrough improvements.
- 这是一种系统性的方法,旨在提高效率、减少浪费、提高质量和为客户提供更大的价值。It is a systematic approach aimed at increasing efficiency, reducing waste, improving quality, and delivering greater value to customers
- 在软件工程的背景下:
·定期评估和完善软件开发流程。Regularly evaluating and refining software development processes
·利用利益相关者、用户和系统监控的反馈。Leveraging feedback from stakeholders, users, and system monitoring.
·纳入小的迭代变化或重大创新,以:Incorporating small, iterative changes or significant innovations to:
> 提高代码质量。Enhance code quality
> 优化工作流程。Optimize workflows
> 减少技术债务。Reduce technical debt
> 提高团队成员之间的协作。Improve collaboration among team members.
5.2持续改进的特点Continuous Improvement Charateristics
- 渐进式进步:关注随时间积累的小而持续的变化。Incremental Progress: Focus on small, consistent changes that accumulate over time.
- 反馈驱动:依赖于测试、用户和监控的反馈循环。Feedback-driven: Relies on feedback loops from testing, users, and monitoring.
- 目标导向:针对质量、性能或团队生产力的可衡量改进。Goal-oriented: Targets measurable improvements in quality, performance, or team productivity
- 协作性:涉及所有利益相关者参与改进过程,促进共同责任。Collaborative: Involves all stakeholders in the improvement process, promoting shared responsibility.
- 循环性:改进是一个持续的、迭代的过程,而不是一次性的努力。Cyclic: Improvement is an ongoing, iterative process rather than a one-time effort.
5.3持续改进的策略Strategies for Continuous Improvement
5.3.1敏捷方法论 Agile Methodologies
- 强调迭代开发、协作和对变化的响应能力。团队通过被称为冲刺或迭代的周期交付小的、渐进式的改进。Emphasizing iterative development, collaboration, and responsiveness to change. Teams deliver small, incremental improvements through cycles called sprints or iterations.
- Scrum:进行冲刺回顾会议,以评估和提高团队绩效。 Scrum: Conduct sprint retrospectives to evaluate and improve team performance.
·例如:使用JIRA在每个冲刺中识别不清晰的任务描述和需求。Use JIRA to identify unclear task descriptions and requriements in each Sprint
- 类似地:Kanban - 可视化任务以识别瓶颈。Similarily: Kanban - Visualize tasks to identify bottlenecks
5.3.2持续集成和持续交付(CI/CD)Continuous Integration and Continuous Delivery
- CI/CD自动化了代码变更的集成(CI)和部署到生产环境(CD)的过程,确保了更快的交付和更高的可靠性。CI/CD automates the process of integrating code changes (CI) and deploying them to production environments (CD), ensuring faster delivery and higher reliability.
- 持续集成:开发人员频繁地将他们的代码变更集成到共享的代码库中。每次集成都会触发自动构建和测试,以确保新变更不会破坏现有的代码库。Continuous Integration: Developers frequently integrate their code changes into a shared repository. Automated builds and tests are triggered for each integration to ensure that the new changes do not break the existing codebase.
- 例如:自动构建 - 对于Java应用程序,使用Maven或Gradle在代码库中的每次提交后编译项目。
- 持续交付:持续交付扩展了CI,通过自动将代码变更部署到暂存环境进行进一步测试。它确保应用程序始终处于可部署状态。Continuous Delivery: Continuous Delivery extends CI by automatically deploying code changes to a staging environment for further testing. It ensures that the application is always in a deployable state.
- 例如:部署到暂存环境 - 自动将构建产物(例如,Docker镜像)部署到暂存环境(模拟生产设置的预生产环境)。
5.3.3
- 重构Refactoring
·重构是重新组织现有代码的过程,目的是提高其可读性、可维护性和性能,而不改变其外部行为。The process of restructuring existing code to improve its readability, maintainability, and performance without changing its external behavior.
- 监控和反馈Monitoring and Feedback
·持续跟踪应用程序性能,同时收集用户或系统输入的反馈,以确定改进的领域。(例如,跟踪API响应时间并在异常时触发警报,收集用户对新功能或错误的看法。)Continuously tracking application performance, while feedback gathers user or system input to identify areas for improvement. (e.g., Track API response times and trigger alerts for anomalies and Collect insights from users about new features or bugs.)
- 知识共享Knowledge Sharing
·在团队内分享最佳实践、经验教训和专业知识,以提高技能和一致性。Sharing best practices, lessons, and expertise within the team to improve skills and consistency
- A/B测试
·比较两个版本的功能,以确定哪个基于用户交互表现更好。(例如,评估“添加到购物车”与“立即购买”按钮的效果。)Compares two versions of a feature to determine which performs better based on user interaction. (e.g., evaluate "Add to Cart" vs. "Buy Now" buttons)
5.4持续改进的度量指标 Metrics for Continuous Improvement
- 度量指标有助于跟踪流程的有效性,识别改进领域,并衡量持续改进的进展。Metrics help track the effectiveness of processes, identify areas for improvement, and measure the progress of continuous improvement
- 对于开发:For Development
- 变更所需时间:从代码提交到在生产环境中部署所需的时间。Time for Changes: Time taken from a code commit to deployment in production
- 周期时间:从开始工作到任务完成所需的时间。Cycle Time: Time taken from the start of work on a task to its completion
- 部署频率:新代码部署到生产环境的频率。Deployment Frequency: How often new code is deployed to production.
- 对于产品质量:For Product Quality
- 缺陷密度:每单位代码的缺陷数量(例如,每1000行代码的缺陷数)。Defect Density: The number of defects per unit of code (e.g., defects per 1,000 lines of code)
- 平均恢复时间:从故障中恢复所需的平均时间。Mean Time to Recovery: Average time taken to recover from a failure
- 逃逸缺陷:部署到生产环境后发现的缺陷。Escaped Defects: Defects that are found after deployment to production
- 对于团队生产力:For Team Productivity
- 速度:团队在一个冲刺期间完成的工作量,以故事点或任务来衡量。Velocity: The amount of work completed by a team during a sprint, measured in story points or tasks
- 进行中的工作:目前正在进行的任务数量。Work in Progress: The number of tasks currently in progress
- 流程效率:在任务上花费的活跃时间与总时间(活跃+闲置)的比率。Flow Efficiency: The ratio of active time to total time (active + idle) spent on a task.
- 对于客户和用户:For Customer and User
- 客户满意度:对产品或功能的直接客户满意度度量。Customer Satisfaction: A direct measure of customer satisfaction with a product or feature
- 净推荐值(NPS):衡量客户向他人推荐产品的可能性。Net Promoter Score: Measures the likelihood of customers recommending the product to others
- 功能采用率:积极使用新发布功能的用户百分比。Feature Adoption Rate: Percentage of users actively using a newly released feature