zoukankan      html  css  js  c++  java
  • 《现代软件工程——构建之法》第1~5章读后感及问题 46

    开篇就讲到一个概念即:软件=程序+软件工程。
     开始读这本书,最大的感受的感受就是软件工程原来是可以这么学的,以前学习编程课程的时候,总是感觉这类课程及其枯燥无味,总是在说太多的理论,很少 会涉及到实践,甚至根本就是没有实践这个环节,所以学习很无聊,但是读到这本书,真的是全新的感受,首先,不仅仅只是在说理论了,加入了很多实 践的东西。
           开篇作者就说了“软件 = 程序 +软件工程”,以前写软件或者说程序,就只是写程序,最多会考虑到数据结构的知识,很少会用到软件工程,但是随着学习的深入,代码量的累积,如果还是和以 前一样只是关心程序只要是可用的,实际可运行的,那么就没有意义了,这样的程序写出来也是没有价值的,首先,软件工程不仅仅就只是涉及到计算机或者软件方 面的知识,相反,软件工程涉及了很对其他学科的知识,比如:管理学、数学、工业设计等等学科,一个合格的软件开发人员如果只是懂得怎样去写程序,那么嗨仅 仅只是初级阶段,更高级的应该是从一个更加高级的层面上去考虑更多的东西,如整个软件的架构。
         如何深刻的认识软件工程与其他编程课程的区别?
     
    2.个人技术和流程
            现在的开发往往是很多人合作完成一款软件应用,不同的开发人员之间就存在依赖关系。我需要调用你写的代码模块,你也需要调用我写的代码模块,但是因为不了解模块的变化,模块没有达到高内聚低耦合造成了对其他模块的影响,往往会产生错误。在确定发布这个模块的时候,要经过完整的单元测试,为了达到事半功倍的效果,我们可以把规格说明说写得详细一些,详细到各项要求都可以表示为一个单元测试用例。
           卡耐基梅隆有一套个人开发流程,很适用于我们做个人开发。接到项目之后我们可以按照以下几个步骤来进行,
           估算时间--->需求分析--->生成设计文档--->设计复审--->代码规范--->具体设计--->编写代码--->代码复审--->代码测试--->记录用时--->测试报告--->计算工作量--->总结--->讨论改进。随着工作年限的增长,编码所占的比例会越来越小,因为开发不再是一味地编码,测试所占的比重会越来越高,保证质量要求。
           如果个人技术薄弱,善于应用他人的模版并加入新的元素组成一个软件。这条路可以走下去吗?
     
    3.软件工程师的成长
           那么,我们为什么要用软件工程呢?因为软件工程把开发,运营,维护的过程中的技术,做法,习惯和思想结合到一起(软件开发流程)提高了软件开发,运营,维护的效率。同时,运用软件工程,也减轻了我们的工作量,避免不必要的返工。
          怎么提高技能?通过不断的努力,把那些低层次的问题都解决了,变成不用经过大脑的自动操作,然后才有时间和脑力来解决较高层次的问题。我们要精通低层次问题(int[] arr还是int arr[],ArrayList 还是 Array<T>),中层次问题(使用何种架构),高层次问题(效能优化。。。。。。).
          软件工程师所具备的基本素质,在课程中都能有提升吗?
     
    4.两人合作
          现在的开发已经很少是单独完成的,最少也是两个人了。我们写代码不仅仅要让机器了解,更要让别人看得懂,让你的队友看得懂。这就需要代码规范。代码规范分为代码风格规范和代码设计规范。代码风格规范包括:缩进,行宽,{}的位置,分行,命名,大小写。其中我认为比较重要的有:每个语句只定义一个变量,做一个操作。即便IF和ELSE语句只有一句,也使用{}。在变量名中加入下划线表示作用域,如m_iAge。
           代码设计规范不光是程序书写的问题了,而且牵涉到程序设计,模块之间的关系,设计模式等等。
           一个函数只做一件事。
           按照public,protected,private顺序来说明类中的成员。
           在小型软件开发过程中,有一种模式叫做结对编程,在这种模式下,一对程序员一起完成设计,代码,测试,文档工作,由于每个工作都被两双眼睛看过,程序的初始质量取决于各方面水平较高的那一位程序员,在整个开发过程中不断地进行着潜移默化的复审。
           两人合作的基础是强带弱。优带差模式,带动差生学习的积极性,并帮助差生好。还是强强联合 ,互补模式好?如何选取队友?
     
    5.团队和流程
            什么是团队?团队有一致的集体目标,团队要一起完成这个目标。团队成员有各自的分工,互相依赖合作,共同完成任务。刚开始创业时,一些程序员聚在一起想写出好的程序,蜂拥而上一起解决问题,这是最简单的模式(一窝蜂模式)。逐渐地,团队就会过渡到以下模式。
            主治医师模式:有一位首席程序员,负责处理主要模块的设计和编码,其他成员从各种角度支持他的工作。
            社区模式:有一些志愿者参与自己感兴趣的项目,不拿报酬,如linux社区。
            业余剧团模式:这样的团队在每一个项目中,不同的人会挑不同的角色。在下一个项目中,这些人也许会完成换成另外一个角色。团队有个老大指挥一切。
            功能团队模式:具备不同能力的同事们平等协作,共同完成一个功能。
            一起做软件,总要有一些开发方法,比如:
            谢了再改模式:不需要太多的知识,直接上手写代码,一直改,直到发布。
            瀑布模型:单向不可逆,最终产品直到最后才出来。按照需求分析-编码测试-发布一步步走下来。力求一次完成。
            RUP统一过程:在大的尺度上像瀑布模型,在每个阶段内像迭代模型。初始阶段:分析系统大概的构成,和什么样的外部实体打交道,大致的成本和预算是多少。细化阶段:编制项目计划,确认主要的功能,性能。构造阶段:把所有的功能集测试并发布为Beta版。交付阶段:基于用户的反馈,不断进行修改。
    一个团队的核心应该是技术过硬的人员还是组织能力强,灵活,善于运用模版结合的人员?
          最后也希望能在老师的教导下学好这门课程
  • 相关阅读:
    Nero8刻录引导系统光盘镜像图文教程
    C#多线程与并行编程方面的电子书,中英文版本
    [转]C#通过委托更新UI(异步加载)
    [PHP] 6种负载均衡算法
    [GIt] 团队工作效率分析工具gitstats
    [Git] git代码统计
    [Git] 写文章 史上最全文献检索、阅读及管理攻略
    [Git] 谷歌的代码管理
    [JQuery] jQuery选择器ID、CLASS、标签获取对象值、属性、设置css样式
    [Mongo] 解决mongoose不支持条件操作符 $gt$gte:$lte$ne $in $all $not
  • 原文地址:https://www.cnblogs.com/qq1076529919/p/4431710.html
Copyright © 2011-2022 走看看