美文网首页
构建之法-1-概论

构建之法-1-概论

作者: BigLong | 来源:发表于2019-04-25 11:43 被阅读0次
概论思维导图.png

1.1 软件 = 程序 + 软件工程

书中作者举例子解释软件、程序、工程的关系,我也举一个。假设我现在想写点博客,就搭建了一个简易的博客编辑器。后来张三觉得很好用,就问我能不能加上支持markdown的功能,李四也想用,问我能不能加上评论功能,王五说他想要rss订阅功能。。。等等。慢慢的就发展成为一个庞大的复杂系统。

一开始写的简易版可以理解为一个程序,这些朋友就是用户,还给我提了很多需求,现在这个博客软件的功能就变得很强大了。

但是,继续开发这个软件的工程也将变得更加困难和复杂。我要想实现这些朋友的需求,我需要好好的设计一个合理的软件架构,还有软件实现,还要找一个管理代码的工具,开发完之后还要软件测试,最后可能还要同时支持多语言国际化,最最后,软件出了问题肯定都得找我,我还得维护运营。以上这系列过程就是软件的生命周期。在这周期里,得有人负责软件项目管理。以上这些活动都是软件工程的核心部分。

软件 = 程序 + 软件工程

我花这么多精力做了这么好的软件,怎么赚钱呢?先试用再交钱?全免费开源?免费用但是要看我的广告?这些都是属于商业模式的范畴。

软件企业 = 软件 + 商业模式

一个软件从idea到商业要经历四个阶段,和人类的飞天梦想类似。从纸飞机到热气球,从莱特兄弟的飞机到现代化的航空业。

玩具阶段:写一个 "Hello world!"
业余爱好阶段:写一个博客系统
探索阶段:行业创新出现新技术
产业阶段:Windows操作系统,电子商务系统

一架成熟的商用飞机要经过很多工序,几十万零件组装检测试飞等。书中举例子,颇有讽刺意味。如果一个飞机工程师在飞机工作时从引擎里爬出来说:“继续飞吧,我搞定了。”我想这样的飞机没人敢坐。在软件行业中,却有大量的工程师以这样的行为自豪。(我认为这里是指很多开发者在生产环境中修改软件)


以上提到的部分专有名词:

  • 需求分析(Requirement Analysis)
  • 软件架构(Software Architecture)
  • 软件设计与实现(Software Design, Implementation and Debug)
  • 源代码管理(Source Code Control)
  • 软件测试(Test)
  • 软件维护(Software Comprehension)
  • 服务运营(Service Operation)
  • 软件的生命周期(Software Life Cycle, SLC)
  • 软件项目管理(Project Management)
  • 用户体验(User Experience)
  • 国际化和本地化(Globalization & Localization)

1.2 软件工程是什么

把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。

1.2.1 特殊性

  • 复杂(Complexity)
    大型软件有超百万行代码,而人一次只能阅读几十行而已。

  • 不可见(Invisibility)
    源代码经过编译以机器指令的方式在cpu上运行,而工程师在找bug时只能看见源代码和很少的错误信息,所以要靠工程师的想象力和强大的推理能力。

  • 易变(Changeability)
    因为需求经常变化,软件看起来非常容易改动,以为会比改动硬件容易,但实际上正确的修改软件非常困难。

  • 服从(Conformity)
    软件需求运行在硬件上不能独立存在,要服从系统中其他组建要求,还要服从用户的要求,行业的要求。

  • 非连续性(Discontinuity)
    有时小小的变化会导致软件发生极大的变化

以上这些特性都是决定软件工程的本质问题,其他的问题例如编程语言,开发工具,存储介质等等都是普通特性。

1.2.2 软件工程与计算机科学的关系

前者偏实践,后者篇理论。计算机理论进展促进软件工程的进展,而软件工程的进展反过来更好的帮助计算机理论的实验与探索。

1.2.3 知识领域

前十二项描述软件学科本身的知识领域。后面三项是基础知识:计算基础、数学基础和工程基础。

1.2.4 目标

It's not a bug, it's a feature!

我们的目标当然是创造好软件!

  • 用户满意度
  • 可靠性
  • 可维护性
  • 软件流程的质量

总结

通过学习软件工程做到以下三点:

  1. 研发出符合用户需求的软件
  2. 在预计时间内发布‘足够好’的软件
  3. 能证明软件是可维护的和持续发展的

相关文章

  • 构建之法-1-概论

    1.1 软件 = 程序 + 软件工程 书中作者举例子解释软件、程序、工程的关系,我也举一个。假设我现在想写点博客,...

  • 构建之法

    个人能力的衡量(开发的工作量和质量的衡量):通过代码行数或功能点来衡量;花费的时间;交付的代码有多少bug来衡量;...

  • 《构建之法》整理

    第2章 个人技术和流程 单元测试 单元测试 回归测试 回退操作 效能分析工具 先用抽样的方法找到效能瓶颈所在,然后...

  • 【笔记】构建之法

    第二章:个人技术和流程 要点: 单元测试,回归测试,效能分析,基于个体的软件开发流程(PSP) 单元测试的构建标准...

  • 读《构建之法》

    开篇提到的现实世界中软件工程师的职业发展与教科书上经典的瀑布模型刚好相反的观点,让人眼前一亮。 学校里教的开发流程...

  • 构建之法,运用之妙,存乎一心

    构建之法,运用之妙,存乎一心 1. 构建之法,存乎一心 史学理论与史学史,是把历史自己作为研究对象的学科,前者讨论...

  • 《构建之法》笔记目录

    第1章概论 第2章个人技术和流程 第3章软件工程师的成长 第4章两人合作 第5章团队和流程 第6章敏捷流程 第7章...

  • 我读《构建之法》

    以前读过邹欣老师的几篇博客,觉得还是有些受用。这次看到邹欣老师出书,就赶热闹买了一本,看看软件从业者眼中的现代软件...

  • 【Note】《构建之法》提要

    《软件工程 构建之法》作者邹欣系Windows中国工程师团队首席研发总监 (Link:亚马逊) 整本书,极其认真...

  • Webpack构建之法,Loader

    什么是loader 在我的理解webpack的 loarder相当于一个中间件,require('file!./t...

网友评论

      本文标题:构建之法-1-概论

      本文链接:https://www.haomeiwen.com/subject/nekogqtx.html