软件构造 课堂笔记1
这篇文章应该是一些句子的拼凑,句子的主要来源是老师上课的PPT或讲课内容。
程序员编写代码的用户是谁?即为谁编写?
程序员编写代码的用户是程序员,也就是说程序员编写出来的代码是给程序员看的。
软件的首要技术使命是管理复杂度。
软件构造,又可称为软件代码开发技术,旨在培养良好的编码习惯和编码技巧
基本概念
什么是软件构造
- 软件构造是编码和调试
- 部分的详细设计和单元测试
测试和调试的区别
- 测试是为了发现错误
- 调试是为了改正错误
--------------------------------------未完待续---------------------------------------------------------------------------------------------
软件构造的重要性
–构造活动是开发软件的重要组成部分
- 构造活动占整个开发活动总时间的30%-40% // 虽然很多初学者会认为,写代码的时间应该在整个项目中要占更多的比例,但是其实真正参与项目才会发现,开发只是一部分工作
- 需求分析与架构设计——构造——系统测试
- 不同程序员的生产率差异在10到20倍 // 我来举一个非常简单的例子,求某一年的某一个月的天数,可能会有人用switch+case来写,也有可能有人用if+else来写,而一种比较常见的能够提高生产效率的做法是“表驱动”。
- 需求规格说明和设计文档可能过时,但源码不会 // 在生产的过程中,时常会出现软件代码的版本比文档新很多,实际上在我们写大作业的时候,瀑布模型
常用软件隐喻(Metaphors)
隐喻可以帮助开发人员借助类比的力量加深对编程的理解
常见的软件隐喻
- 软件书写:写代码(Writing Code)
- 软件播种:生成系统(Growing a System)
- 软件珍珠培植法:系统积累(System Accretion)
- 软件创建:建造软件(building software)
- 实用软件技术:智能工具箱(The Intellectual Toolbox)
- 复合隐喻(Combing Metaphors)
辨明软件项目的类型
最常见的三种类型
- 商业系统(Business Systems)
- 使命攸关的系统(Mission-Critical Systems)
- 性命攸关的系统(Embedded Life-Critical Systems)
- 商业系统倾向于使用高度迭代的开发方式
- 性命攸关的系统往往要求更加序列式的方法
序列式开发和迭代式开发
序列式开发
- 使用瀑布式模型进行开发
- 适用于需求相对稳定的情况
- 整个开发工作被组织为一系列的迭代过程。每一次迭代都包括了需求分析、设计、实现与测试。
- 适用于需求容易变化的情况
如何选择序列式或迭代式开发方法
倾向于序列式开发的情况
- 需求相当稳定
- 设计相对简单、容易
- 后期改变需求、设计和编码的代价非常高
- 需求相对不稳定,或需要不断加深理解
- 设计复杂,具有挑战性
- 后期改变需求、设计和编码的代价比较低
问题定义
问题定义并不涉及任何可能的解决方案
–一个好的定义:
问题定义应该从客户的角度编写
–一个好的定义:
- We can't keep up with orders for the Gigatron
- We need to optimize our automated data-entry system to keep up with orders for the Gigatron
问题定义应该从客户的角度编写
// 可能上面这一段不是很好理解,换一个例子
// 不好的定义可能限制了解决方案,你不知道客户究竟需要的是什么
// 就比如客户要一批更快的马,然后你就立刻去培育马了
// 但是实际上客户想要的是更快的交通方式,这时候你可以给用户一辆汽车
// 或者实际上客户是想要更快传递信息,这时候你可以给用户一部电话
// 你首先要知道客户的问题是什么,才能更好地解决问题