单元一:Starting a Software Project
No Silver Bullet:“没有银弹”理论。Silver Bullet也可以翻译成“万金油”。 没有银弹是指没有任何一项技术或方法可使软件工程的生产力在十年内提高十倍。 来自《No Silver Bullet Essence and Accidents of Software Engineering》。
课文翻译:
听写:《人月神话》和《没有银弹》
Frederick P. Brooks是美国北卡罗来纳大学教堂山分核计算机科学领域的教授。他被称为“IBM360大型机之父”,在该系统开发阶段,他担任项目经理;之后在设计阶段,他担任该操作系统软件项目的经理。
他的作品《人月神话》是软件工程中在人为因素方面最经典的著作之一。本书自1975年首次出版以来,软件工程师们几乎人手一本。正是在这本书中,Brooks 做出了著名的论断“往进度滞后的软件项目中增加人手,只会使进度更加滞后”,这之后被称作“Brooks 法则”。在本书第一次出版后的40年间,软件工具和开发环境可能发生了许多变化,然而在协同工作以及个人与集体本性中的特有非线性规模经济却一点都没有改变。
此外,Brooks也因其论文没有银弹而享誉世界。这篇文章原本是1986年发表在IFIPS上的论文,在1987年又重新发表在IeEe计算机杂志上,随后收入《人月神话》第二版中。在此文中,银弹用来比喻使计算机的软件成本像硬件成本那样迅速降低的东西《没有银弹》的发行量很高,而且引起了热论。它预计,在十年之内,没有任何编程技术可以在软件生产力方面带来数量级的提高。Brooks 的预测看上去是准确的。《没有银弹》已经在文献资料领域引发了超过《人月神话》的越来越热烈的讨论。
迭代模型:
单词:
virtually: 事实上、本质上 utility:公用事业
distribution:经销、分销 cost-effective:有成本效益的、划算的
notion:概念、观念、看法 hitherto:迄今、至今
proposition:主张、提议、建议 major:较大的、较重要的
tumble: 使倒下、搅乱 convergence:一体化、集中、收敛
markedly:显著的、明显的 notation:符号
underlie:构成……的基础 essence:本质、实质
rightly:确实的 mythical:神话的、虚构的
provocative:引起争论的 peculiarly:特有的、特别的
spirited: 热烈的 literature:著作、文献
neural:神经网络
单元二:Capturing the Requirement
课文:
听力理解:软件需求
在开始设计和构建一个基于计算机的系统之 前,理解需求是十分必要的。要实现这一点,需要实施一系列需求工程需求工程发生在与客户沟通和为一般的软件过程所定义的建模活动的过程中,7个不同的需求工程功能一-起始、获取、精化、协商、规格说明、确认和管理- -由软件团队成员实施。
在项目起始阶段,开发人员和喀户及其他项目干系人建立基本的问题需求,定义首要的项目约束,并陈述对于系统来说必须要表现出来以满足其目标的主要特色和功能。这些信息在获取阶段得到提炼和延伸,获取是一项采用辅助会 议和用户场景开发的需求收集活动。
精化阶段进一步将需求扩展为分析模型- -是一-个基于场景、 基于活动、基于类.行为的和面向流程的模型元素的集合。可以使用多种建模符号来创建这些元素。模型可能会参考分析模式--在跨越不同的应用程 序中已经看到的重复出现的问题域特征。
当需求已被识别并且分析模型已被创建,软件团队和其他项目干系人协商每项需求的优先级、可用性和相对成本。协商的目的是制定-一个现实的项目计划。此外,每一项需求和分析模型作为一个整体将根据客户需求进行确认,以确保将要构建的系统是正确的。
UML(Unified Model Language):使整个软件设计有更好的可读性、可理解性、降低开发风险、方便各个开发人员之间的交流。
两个参与者(与系统交互):homeownwe、cameras;
三个用例:Access camera surveillance via the Internet、Configure SafeHome system parameters、Set alarm;
●业务用例——也被称为“抽象级用例”,这些用例是用一种与技术无关的方式编写的,简单地引用被描述的高级业务流程(例如“书还回来”)和参与这个过程的各种外部实体(也称为参与者。例如“借款人”、“图书管理员”,等等)。业务用例将定义业务需要执行的动作序列,以向外部实体提供有意义的、可观察的结果。
●系统用例——也称为“实现用例”,这些用例比业务用例的详细程度更低,指的是将由系统的不同部分执行的特定过程。例如,一个系统用例可能是“逾期归还图书”,并描述了各种参与者(借款人,图书馆员)与系统在执行端到端流程时的交互作用。
单词/词组:
draft:起草 distinctive:区别性的、特殊性的
book:登记、预定 criterion:标准、准则
refund:退还、偿还 laundry-list:细目清单
deposit:押金、预定金 fictition:虚构的、假象的
model:建立模型 actor:角色
scenario:场景 agnostic:不可知论的
check in:登记、记录、报道 overdue:过期的
up to:一直到 drill-down:深度探讨
high season:旺季 artifact:人工制品、手工艺品
low season:淡季 fuil-fill:实现
单元三:Planning the Project
甘特图:通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况。
软件项目的四个变量:费用、 时间、范围和质量。
项目计划:
1.过程计划:选择一个合适的过程模型并对它进行剪裁,以适合项目需求。
2.工作量估算:总体工作量需求和不同阶段的工作量分解都要估算。(自顶而下/自底向上)。
3.进度和人员安排计划:依赖于工作量估算和项目人员水平。
4.质量计划:开发的不同阶段中所有必须执行的验证和确认活动以及如何执行这些活动。
5.配置管理计划:控制项目过程中发生的变化,确定了需要被控制的配置项,并指定了完成配置计划的程廓以及控制如何访问。
6. 项目监控计划和风险管理:对风险进行识别、分析和优先级排序。然后制订和执行风险缓解计划以将最高优先级风险的影响降到最小。
单词/词组
milestone:里程碑
RUP:rational unifiend project 统一过程
WBS:工作任务分解
SDLC:software development life cycle 软件开发生命周期
deep learning:深度学习
Waterfall:瀑布型
Agile:敏捷
ingredient:因素,成分
staff:配置职员
breakup:分解
identify:确认,说明身份
item:项
单元四:Working in a Team
eXtreme Programming(XP):极限编程:主张没有任何障碍的沟通并实现快速的交付。
软件开发过程中有三种主要的任务类别一与管理相关的、 与开发相关的和与测试相关的。
git/svn:版本控制系统.
聚合性:个好的团队具有团队精神,其中的成员在被自己的个人目标所激励的同时,也会被团队的成功所激励。
Agile Software development:
hot fix :热补丁
团队结构:
1.首席程序员团队:项目团队由一个项目经理领导,由项目经理来进行规划和任务分配。
2.无自我团队/民主团队:小组目标由全体成员的一致同意来设定,并且来自每位成员的提议可用于重要决定,团队领导由团队成员轮流担任。
3.另一种结构:软件开发中有三种主要任务分类——管理相关、开发相关以及测试相关的任务。让测试和开发团队相对独立,以及不让开发人员或测试人员向非技术性经理报告。
构建高效的软件开发团队:沟通是关键,
有三件基本的事情需要记住
●少沟通
●定性沟通
●有效地沟通
Scrum:
- 首先Product Owner要确认Product Backlog:产品需求代办列表
- Scrum Team根据Product Backlog列表,做工作量的预估和安排;
- 在 Sprint Planning Meeting(Sprint计划会议) 从Product Backlog中挑选出一个Story作为本次迭代完成的目标,这个目标的时间周期是1~4个星期,然后把这个Story进行细化,形成一个Sprint Backlog;
- Scrum Team去完成Sprint Backlog,每个成员根据Sprint Backlog再细化成更小的任务(细到每个任务的工作量在2天内能完成);
- 成员把Sprint Backlog分拆完毕后,需要将详细的开发时间计划以邮件的形式发送给项目组成员,确保信息畅通。
- 在Scrum Team完成计划会议上选出的Sprint Backlog过程中,需要进行 Daily Scrum Meeting(每日站立会议),每次会议控制在15分钟左右,每个人都必须发言,并且要向所有成员当面汇报你昨天完成了什么,你今天将要完成什么,同时遇到不能解决的问题也可以提出。
- 当一个Story完成,也就是Sprint Backlog被完成,也就表示一次Sprint完成,这时,我们要进行 Srpint Review Meeting(演示会议),也称为评审会议,产品负责人和客户都要参加(最好本公司老板也参加),每一个Scrum Team的成员都要向他们演示自己完成的软件产品;
- 最后就是 Sprint Retrospective Meeting(回顾会议),也称为总结会议,以轮流发言方式进行,每个人都要发言,总结并讨论改进的地方,放入下一轮Sprint的产品需求中;
单元五:designing the System
UX(User Expecience):用户体验
Vabuable、Userful、Satisflable、Convenient、Credible、Desirable、Accessible
UI(User Interface):用户设计
Color Scheme、Typography、Layout、mages、Forms、Buttons、Content
在产品开发过程中,UX设计通常是第一位的,其次是UI设计。
用户体验设计师绘制出用户旅程的基本框架,而用户界面设计师则用视觉和交互元素填充它。
UX设计是关于识别和解决用户问题,而UI设计是关于创建直观和美观的交互界面。
总结:UX大于UI
user journey:用户轨迹
面向对象设计(OOD)、面向对象编程(OOP)、面向对象分析(OOA)
单元六:Implementing the System
高内聚、低耦合
routine:a list of instructions that enable a computer to perform a particular task.
程序就是一个计算机必须遵循的将数据转化为信息的指令列表:A program is a list of instruction that the computer must follow to process data into information.
封装:encapsulation、继承:inheritance、多态:polymorphism
编译型:COBOL、 FORIRAN.、Pascal 和C
解释型:BASIC
既可以解释也可以翻译:C++和Java
面向对象编程语言的例子有C++和Java。
meta:元宇宙
metalanguage:元语言(定义其它语言的语言)
IC(Integrated Circuit):集成电路
Good-Enough Software:对你的用户、未来的维护者以及你自己来说都足够好。不要因为过分修饰和过分精致而破坏了一个完美的节目。继续前进,让您的代码在一段时间内保持自己的地位。它可能并不完美。别担心:它永远不会完美。
单元七:Testing the System
测试:白盒测试、黑盒测试、单元测试、集成测试、系统测试、验收/合格测试、alpha测试、beta测试。
check in the code:签入代码,将代码上传到产品库或数据库
alpha测试:由作为组织内部员工的测试人员执行
beta测试:发布给有限数量的产品最终用户,以获取对产品质量的反馈。
课文:
the view of software testing has evolved towards a more constructive one.Testing is no longer seen as an activity which starts only after the coding phase is complete,with the limited purpose of detecting failures.
软件测试的观点已经朝着更有建设性的方向发展。测试不再被视为只有在编码阶段完成后才开始的活动,只有检测失败的有限目的。
回归测试:
每当开发人员更改或修改他们的软件时,即使很小的调整也可能产生意想不到的后果。回归测试是测试现有的软件应用程序,以确保所做的更改或添加未破坏任何现有的功能。其目的是捕获可能意外引人到新的Build版或候选发布版中的错误,并确保先前已消除的错误已被消除。通过重新运行最初解决已知问题时编写的测试方案,可以确保对应用程序的任何新的更改都不会导致性能下降或导致以前正常工作的组件失效。此类测试可以在小型项目上手动执行,但是在大多数情况下,每次进行更新时都重复进行一整套测试非常耗时且复杂,因此通常需要使用自动化测试工具。