软件构造 课堂笔记1

来源:互联网 发布:php https post请求 编辑:程序博客网 时间:2024/06/11 19:29

这篇文章应该是一些句子的拼凑,句子的主要来源是老师上课的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
问题定义应该用客户容易理解的语言编写
问题定义应该从客户的角度编写

// 可能上面这一段不是很好理解,换一个例子
// 不好的定义可能限制了解决方案,你不知道客户究竟需要的是什么
// 就比如客户要一批更快的马,然后你就立刻去培育马了
// 但是实际上客户想要的是更快的交通方式,这时候你可以给用户一辆汽车
// 或者实际上客户是想要更快传递信息,这时候你可以给用户一部电话
// 你首先要知道客户的问题是什么,才能更好地解决问题