CPT203 W5

This is the note of CPT203 W5.
This week is mainly about Human Aspect and SE Principles.
其实感觉这周主要说的是如何处理团队中的人际关系问题。和如何提高团队的运作效率。


Lecture

CHARACTERISTICS OF A SOFTWARE ENGINEER

  • Master the technical stuff, learn and apply the skills required to understand the problem, design an effective solution, build the software, and test it to develop the highest quality possible. Manage change, communicate with stakeholders, and use appropriate tools in the appropriate situations 掌握技术知识,学习和应用所需的技能,以理解问题,设计有效的解决方案,构建软件,并测试它,以开发最高质量。管理变更,与涉众沟通,并在适当的情况下使用适当的工具
  • But there are other things that are equally important. Erdogmus [Erd09] identifies seven traits that are present when an individual software engineer exhibits “superprofessional” behavior. 但还有其他同样重要的事情。Erdogmus指出了当一个软件工程师表现出“超级专业”的行为时,会出现七种特征。

SEVEN TRAITS OF EFFECTIVE SOFTWARE ENGINEER

  • sense of individual responsibility 个人责任感
  • has an acute awareness of the needs of others 对他人的需要有敏锐的意识
  • honest and brave to face the truth 诚实而勇敢地面对真理
  • exhibits resilience under pressure 在压力下表现出弹性
  • has a heightened sense of fairness 有高度的公平感
  • exhibits attention to detail 表现出对细节的关注
  • pragmatic 务实

THE PSYCHOLOGY OF SOFTWARE ENGINEERING

  • teams often establish artificial boundaries that reduce communication and, as a consequence, reduce the team effectiveness. 团队经常人为设定界限,减少沟通,结果降低了团队的效率。
  • a set of “boundaries spanning roles” that allow members of a software team to effectively move across team boundaries and hence improve team effectiveness 一套“跨越角色的边界”,允许软件团队成员有效地跨越团队边界,从而提高团队效率 (Ambassador, Scout, Guard, Sentry, Coordinator)

THE SOFTWARE TEAM

  • We tend to use the word team fairly loosely in the business world, calling any group of people assigned to work together a “team.” But many of these groups just don’t seem like teams. They don’t have a common definition of success or any identifiable team spirit. What is missing is a phenomenon that we call jell. - Tom DeMarco and Tim Lister [DeM98]
  • A jelled team is a group of people so strongly knit that the whole is greater than the sum of the parts . . . Once a team begins to jell, the probability of success goes way up. The team can become unstoppable, a juggernaut for success . . . They don’t need to be managed in the traditional way, and they certainly don’t need to be motivated. They’ve got momentum. - Tom DeMarco and Tim Lister [DeM98] 一个凝聚的团队是一群紧密结合在一起的人,整体大于部分的总和

THE JELLED TEAM

  • estabilsh a sense of purpose 建立目标感
  • inclucate a sense of involvement that allows every member to feel that his skillset and contributions are valued 融入一种参与感,让每个成员都感到自己的技能和贡献是有价值的
  • foster a sense of trust 培养信任感
  • encourge a sense of improvement 鼓励一种改进的感觉
  • diverse in the sense they combine a variety of different skill sets 多样化的意思是他们结合了各种不同的技能

PRINCIPLES THAT GUIDE SOFTWARE PROCESS

  • The software process provides software engineer a road map for getting to a successful destination 软件过程为软件工程师提供了通往成功目的地的路线图
  • The following core principles can be applied to software process 以下核心原则可以应用到软件过程中
    PRINCIPLES THAT GUIDE SOFTWARE PROCESS

PRINCIPLES THAT GUIDE PRACTICE

  • We said that software process provides software engineer a road map for getting to a successful destination. Practice provides software engineer with the detail you’ll need to drive along the road. 软件过程为软件工程师提供了通往成功目的地的路线图。实践为软件工程师提供了沿着道路行驶时需要的细节。
  • Software engineering practice has a single overriding goal—to deliver on-time, high-quality, operational software that contains functions and features that meet the needs of all stakeholders. To achieve this goal, you should adopt a set of core principles that guide your technical work. 软件工程实践有一个最重要的目标——交付准时、高质量、可操作的软件,其中包含满足所有涉众需求的功能和特性。为了实现这个目标,您应该采用一组指导技术工作的核心原则。
  • The following set of core principles are fundamental to the practice of software engineering. 下面的一组核心原则是软件工程实践的基础。
    • Divide and conquer 分而治之
    • Understand the use of abstraction 理解抽象的使用
    • Strive for consistency 努力保持一致性
    • Focus on the transfer of information 关注信息的传递
    • Build software that exhibits effective modularity 构建具有有效模块化的软件
    • Look for patterns 寻找模式
    • When possible, represent the problem and its solution from a number of different perspectives 如果可能,从多个不同的角度阐述问题及其解决方案
    • Remember that someone will maintain the software 会有人维护软件

在客户需求被分析和建模之前,需要通过沟通的渠道收集这些信息。

  • Listen 听
  • Prepare before you communicate 沟通前做好准备
  • Someone should facilitate the activity 应该有人来协助这项活动
  • Face-to-face communication is best 面对面的交流是最好的
  • Take notes and document decisions 做笔记,记录决定
  • Strive for collaboration 争取合作
  • Stay focus; modularizes your discussion 保持注意力;模块化讨论
  • Use drawing whenever something is unclear 如果有不清楚的地方,就画出来
  • Move on 不要停留太长时间在无意义的东西上
  • Negotiation is not a contest or a game. It works best when both parties win 谈判不是一场竞赛。当双方都赢的时候效果最好

计划活动包括一组管理和技术实践,使软件团队能够在实现其战略目标和战术目标的过程中定义路线图。

  • Understand the scope of the project 了解项目的范围
  • Involve stakeholders in the planning activity 让利益相关者参与规划活动
  • Recognize that planning is iterative 认识到计划是迭代的
  • Estimate based on what you know 基于你所知道的进行估计
  • Consider risk as you define your plan 在定义计划时考虑风险
  • Be realistic 认清现实
  • Adjust garnularity as you define the plan 在定义计划时调整粒度
  • Define how you intend to ensure quality 确定你打算如何确保质量
  • Describle how you intend to accommodate change 描述你打算如何适应变化
  • Track the plan frequently and adjust as required. 经常跟踪计划,并根据需要进行调整。

References

  1. XJTLU CPT203 Week5 slides
作者

Felix Chen

发布于

2021-10-14

更新于

2021-10-15

许可协议

评论