软件工程:一个基本框架(待修改)
2012-11-22 16:22
148 查看
软件工程所包含的内容,是除了程序实现之外的全部内容。一个不懂软件工程的程序员不能称得上是好程序员,没有big picture,
而只是见到细枝末节的局部,是代码民工。
按照邹欣老师的课程安排,软件工程的学习,主要包含这几部分:
软件开发是手工活,软件质量的好坏,取决于人。
1. 对人的理解:或者说是软件开发中,人的角色以及活动。包括:
* 作为开发者的个人,需要具备什么样的能力?
* 结对编程中,双方的行为受到了什么影响?为何结对编程会有效?(程序员的思维修炼一书中的相关内容。)
* 在团队之中,各个开发者又是如何协作的? 各自的角色是什么? 产生冲突怎么办? 如何有效的沟通交流?
这个问题涉及到了管理层面的知识,和论述团队管理的部分相交叉。在此处,先集中于:团队中,开发者的角色和活动,
暂不涉及如何管理,解决交流不畅,产生冲突的问题。
2. 对软件开发过程的理解:传统方式,与敏捷开发,以及下一步是什么?
* 为什么要存在开发过程?(为何有软件工程?)
(软件工程的历史)
这个问题我回答不了。要想找到完整的答案,需要回溯到软件工程这一领域的历史之中去。
软件行业兴起之初,必然是乱糟糟的集市一般,因为所要做的产品很小,单个人或者三五个人,也可以搞定了。时间上面,不存在具体的规划,
或早或晚,不必进行严格的规划,也能够做出差不多的产品。这个时候的软件设计师,还感受不到良好流程的重要性,需求不会经常变动,
真是软件工程师的黄金时代。
但是,随着软件行业的扩大发展,对产品的要求,时间的限制,以及人员规模的扩大,导致之前自然发生的软件开发,不在够用了。就产生了软件工程,对软件的构建过程进行管理。而软件工程的目标,是用经济的手段,产生出合格的产品--软件。此前的自然经济,就不再符合需求了。
时间有限,工作量大,涉及到的人员众多,客户需求不断改变,必然要对软件的生产过程进行反思,以便度过软件危机。用工程管理的手段,对软件的生产进行管理,优化流程,进而提高效益,这是软件工程产生的原因。
软件工程产生以来,也发生了自身的变革。(对具体的技术实现,单独进行说明。)最原始的软件工程,和自然流差不多,只不过是采取了相应的手段将其工序固定下来。这就是瀑布流的开发方式,及其变体。
但是,这一方式在面对需求不断变更的时候,就明显悲催了。需求不断变化,而软件的开发如果按照瀑布流的工作流程,则需要等到完全结束了之后,才能够进行下一轮开发,不能够灵活的应对变化。因而,有了敏捷开发的现代软件开发方式。
软件开发模式各有不同,但是都针对几乎相同的软件开发过程。这两个概念不同。前者是指,如何对一个具体流程的各个分部分进行组合,排列,而后者则是指的这几个具体的部分。
不论是敏捷开发,或者瀑布流,所要处理的部分都是相同的,他们的区别就在于如何安排。这个问题挺大,会单独处理。
* 软件开发,包含哪几个部分?
首先要问的是,我为什么要关心这几个部分?
因为这是开发一个软件所必不可少的。对于PM而言,自然不用说,但是对于coder来说呢?
因为软件开发的复杂性,中大型的软件,并非一个人能够全部完成的。现代的软件业,是分工协作的,如果不了解其他部分的存在,而只是蒙着头写代码,很难做出良好的产品。
软件开发所包含的部分:
** 需求工程
** 构建分析模型
** 设计工程
** 软件架构
** 软件模块构建
** UI,用户接口的设计
** 软件实现:编码活动
** 软件测试
* 各个部分是如何组织的?即,存在哪些开发模式,或者说是过程模式?
** 瀑布流模型
** 增量开发模型
** 进化开发模型
** specialized process model
** Unified Process model
当然,对于一个敏捷开发者而言,了解上面的模式,意义在于知晓敏捷开发的必要性和优势所在,相当于了解历史了。但是有很多的软件公司,并没有做到敏捷,而仍然是采用传统的开发模式,如果遇到了,又无法在短时间内离开或者改变的话,还是要对他们的过程有所了解的。万变不离其宗,无论是哪种开发模式,都离不开对软件开发过程的理解,虽然他们的组织方式在各种开发模式中不同,但基本元素不变,只是换了一种方式处理而已。
* 敏捷开发:
XP: extreme programming
ASD: Adaptive software development
DSDM: dynamic system development method
Scrum: 重点了解。邹欣的课堂上,使用的敏捷开发的主要方式,就是scrum。
Crystal:
FDD: Feature Driven Development
TDD: Task Driven Development 在SaaS的课程中,主要介绍的就是TDD开发模型。
BDD: Behavior Driven Development
当然,要想对敏捷开发有个实际的理解,阅读再多的书籍,也比不上开始一个实际的项目来的靠谱。
敏捷开发的部分,需要用多篇文章来完成,主要有:
1. 敏捷开发的哲学。
2. 概要式的介绍,对常见的技术做一个综述,用大约三千字左右。
3. 针对其中的两三项技术(Scrum,TDD, BDD,每个技术都用一篇文章来探讨,内容包括:
如何实施。
适用范围是什么?
具体的成功实现的例子? 如果有的话
不恰当的使用,导致产品失败的例子,if any
* 软件开发各个部分中,需要用到的技术
** 如何发现用户的需求? 如何评估?
** 分析模型如何搭建?
** 进行软件架构,需要用到的技术?
** 常用的测试技术有什么? 分别列举,
* 项目管理?
* 软件工程实践者的学习路径?
而只是见到细枝末节的局部,是代码民工。
按照邹欣老师的课程安排,软件工程的学习,主要包含这几部分:
软件开发是手工活,软件质量的好坏,取决于人。
1. 对人的理解:或者说是软件开发中,人的角色以及活动。包括:
* 作为开发者的个人,需要具备什么样的能力?
* 结对编程中,双方的行为受到了什么影响?为何结对编程会有效?(程序员的思维修炼一书中的相关内容。)
* 在团队之中,各个开发者又是如何协作的? 各自的角色是什么? 产生冲突怎么办? 如何有效的沟通交流?
这个问题涉及到了管理层面的知识,和论述团队管理的部分相交叉。在此处,先集中于:团队中,开发者的角色和活动,
暂不涉及如何管理,解决交流不畅,产生冲突的问题。
2. 对软件开发过程的理解:传统方式,与敏捷开发,以及下一步是什么?
* 为什么要存在开发过程?(为何有软件工程?)
(软件工程的历史)
这个问题我回答不了。要想找到完整的答案,需要回溯到软件工程这一领域的历史之中去。
软件行业兴起之初,必然是乱糟糟的集市一般,因为所要做的产品很小,单个人或者三五个人,也可以搞定了。时间上面,不存在具体的规划,
或早或晚,不必进行严格的规划,也能够做出差不多的产品。这个时候的软件设计师,还感受不到良好流程的重要性,需求不会经常变动,
真是软件工程师的黄金时代。
但是,随着软件行业的扩大发展,对产品的要求,时间的限制,以及人员规模的扩大,导致之前自然发生的软件开发,不在够用了。就产生了软件工程,对软件的构建过程进行管理。而软件工程的目标,是用经济的手段,产生出合格的产品--软件。此前的自然经济,就不再符合需求了。
时间有限,工作量大,涉及到的人员众多,客户需求不断改变,必然要对软件的生产过程进行反思,以便度过软件危机。用工程管理的手段,对软件的生产进行管理,优化流程,进而提高效益,这是软件工程产生的原因。
软件工程产生以来,也发生了自身的变革。(对具体的技术实现,单独进行说明。)最原始的软件工程,和自然流差不多,只不过是采取了相应的手段将其工序固定下来。这就是瀑布流的开发方式,及其变体。
但是,这一方式在面对需求不断变更的时候,就明显悲催了。需求不断变化,而软件的开发如果按照瀑布流的工作流程,则需要等到完全结束了之后,才能够进行下一轮开发,不能够灵活的应对变化。因而,有了敏捷开发的现代软件开发方式。
软件开发模式各有不同,但是都针对几乎相同的软件开发过程。这两个概念不同。前者是指,如何对一个具体流程的各个分部分进行组合,排列,而后者则是指的这几个具体的部分。
不论是敏捷开发,或者瀑布流,所要处理的部分都是相同的,他们的区别就在于如何安排。这个问题挺大,会单独处理。
* 软件开发,包含哪几个部分?
首先要问的是,我为什么要关心这几个部分?
因为这是开发一个软件所必不可少的。对于PM而言,自然不用说,但是对于coder来说呢?
因为软件开发的复杂性,中大型的软件,并非一个人能够全部完成的。现代的软件业,是分工协作的,如果不了解其他部分的存在,而只是蒙着头写代码,很难做出良好的产品。
软件开发所包含的部分:
** 需求工程
** 构建分析模型
** 设计工程
** 软件架构
** 软件模块构建
** UI,用户接口的设计
** 软件实现:编码活动
** 软件测试
* 各个部分是如何组织的?即,存在哪些开发模式,或者说是过程模式?
** 瀑布流模型
** 增量开发模型
** 进化开发模型
** specialized process model
** Unified Process model
当然,对于一个敏捷开发者而言,了解上面的模式,意义在于知晓敏捷开发的必要性和优势所在,相当于了解历史了。但是有很多的软件公司,并没有做到敏捷,而仍然是采用传统的开发模式,如果遇到了,又无法在短时间内离开或者改变的话,还是要对他们的过程有所了解的。万变不离其宗,无论是哪种开发模式,都离不开对软件开发过程的理解,虽然他们的组织方式在各种开发模式中不同,但基本元素不变,只是换了一种方式处理而已。
* 敏捷开发:
XP: extreme programming
ASD: Adaptive software development
DSDM: dynamic system development method
Scrum: 重点了解。邹欣的课堂上,使用的敏捷开发的主要方式,就是scrum。
Crystal:
FDD: Feature Driven Development
TDD: Task Driven Development 在SaaS的课程中,主要介绍的就是TDD开发模型。
BDD: Behavior Driven Development
当然,要想对敏捷开发有个实际的理解,阅读再多的书籍,也比不上开始一个实际的项目来的靠谱。
敏捷开发的部分,需要用多篇文章来完成,主要有:
1. 敏捷开发的哲学。
2. 概要式的介绍,对常见的技术做一个综述,用大约三千字左右。
3. 针对其中的两三项技术(Scrum,TDD, BDD,每个技术都用一篇文章来探讨,内容包括:
如何实施。
适用范围是什么?
具体的成功实现的例子? 如果有的话
不恰当的使用,导致产品失败的例子,if any
* 软件开发各个部分中,需要用到的技术
** 如何发现用户的需求? 如何评估?
** 分析模型如何搭建?
** 进行软件架构,需要用到的技术?
** 常用的测试技术有什么? 分别列举,
* 项目管理?
* 软件工程实践者的学习路径?
相关文章推荐
- 最近学习框架做了一个小网站,基本功能都实现了但是分页没办法用框架思想实现,查了资料找到一个不错的,修改了下分享下
- 使用CSS和HTML编写一个基本的Web框架
- Prototype功能预览十三:一个注解完成更加规范的API版本管理-极大减少dubbo框架频繁修改接口问题
- [JAVA]集合框架之自己实现一个具有基本增查删改功能的ArrayList
- Windows网络编程学习笔记(1) 编写一个Winsock基本框架
- (1)一步一步开发一个简单二维CAD之基本框架
- 一个基本类型在方法中修改引起的思考
- Hibernate框架的基本搭建(一个小的java project的测试向数据库中插入和查询数据的功能)
- 写一个交易策略的基本框架
- ASP一个网页处理所有问题(添加,修改,删除,列表)框架
- 【MATLAB】画出一个基本图形框架,然后每次在这张基本图上做一个更新。
- 【转帖】对codeproject上一个IOCP框架的修改
- 【自然框架】表单控件 之 一个表单修改多个表里的记录
- 【自然框架】表单控件 之 一个表单修改多个表里的记录
- 创建并运行一个基本的Python测试程序(自己的看法修改)
- C#人工智能(AI)编程:对神经网络面向一个基本的对象(OOP)框架
- spring,springMVC的优点和区别 spring 是是一个开源框架,是为了解决企业应用程序开发,功能如下 ◆目的:解决企业应用开发的复杂性 ◆功能:使用基本的JavaBean代替EJB,并
- iOS 属性动画的一个分类:CABasicAnimation 基本动画(没有真正修改属性值)
- 框架基础____缓存框架基本的原理_一个简单的缓存工具类CacheUtil
- CodeIgniter框架——创建一个简单的Web站点(include MySQL基本操作)