您的位置:首页 > 其它

软件工程:一个基本框架(待修改)

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

           

  * 软件开发各个部分中,需要用到的技术

    

    ** 如何发现用户的需求? 如何评估?

    

    ** 分析模型如何搭建?

    

    ** 进行软件架构,需要用到的技术?     

           

    ** 常用的测试技术有什么? 分别列举,       

           

  * 项目管理?

 

  * 软件工程实践者的学习路径?              

           

           

           

          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐