美文网首页
构建之法-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-概论

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