202031607323-后涌- 实验一 软件工程准备—什么是软件?什么是工程?

项目 内容
班级博客链接 班级链接
本次作业要求链接 作业要求
我的课程学习目标 了解掌握软件在开发过程中的过程、方法和工具
本次作业在哪些方面帮我实现学习目标 准备学习软件工程的工具
  • 任务1:调查问卷 在以下网址提交课程调查问卷

    • 完成情况:已认真填写并提交
  • 任务2:在博客园平台注册个人博客账号和加入班级博客

    • 完成情况:已经注册个人账号并加入班级博客
  • 任务3:注册Github账号

  • 任务4:各位同学点击以下链接填写博客园账号与github账号的链接

    • 完成情况:已填写该表格
  • 任务5:构建之法与博客首秀

    • 在阅读《构建之法——现代软件工程》这本书之前,已经听到无数行业内的专家学者以及软件开发人员推荐该书,于是抱着着非常好奇的心情去翻开这本书,在读过该书的第一章内容以后发现该书与普通教学用书本质上的区别,以及为何很多人推荐这本书。几乎所有学习过计算机相关课程的人都知晓“程序=数据结构+算法”这句话,但软件又是什么,大家在学习的过程中也会产生相应的疑问,软件是不是只是程序,或者程序就是软件吗?

    问题1:软件只是简单的程序吗?

    • 阿超的故事

     移山公司程序员阿超的宝贝儿子上了小学二年级,老师让家长每天出30道加减法题目给孩子做。阿超想写一个小程序来做这件 
   事,具体实现可以采用很多语言或工具:
    阿超一下打印出好多份不同的题目,让孩子做了。老师看了作业之后,对阿超赞许有加。她老师闻讯也想要类似的程序,让二年级到四年级都能用,并附带提出一些小小的要求,例如
      1.题目避免重复
      2.可定制数量和打印方式
      3.可以控制下列参数
        是否有乘除法|是否有括号|数值范围1加减有无负数|除法有无余数|是
        否支持分数(真分数、假分数……)1是否支持小数(精确到多少位)|打印
        中每行的间隔
     阿超的儿子兴高采烈地回家来给老爸汇报,并说“老师明天就想要!”阿超有些挠头,原来就是随手写了个程序,现在怎么来了一些用户,还带来了不少需求?
现在大家估计做好这个软件需要多长时间。
    阿超熬夜做出了这个软件的一个初始版本,交给了老师。过了几天老师说,教导主任看了很满意,提议把这个程序放到学校的网站上,再多一点点要求,支持
二元一次方程,能开根号,还可以生成期中、期末考试的试卷。当然,希望网站永远是可以用的,至少早上五点到晚上十二点要能访问。
    阿超叹了一口气——这是多复杂的一个工程啊,如果有一天晚上网站打不开了,我是不是还要负责修理服务器?电话突然响了,是教导主任打来的,他说,英国
的学校知道了这个好东西,也要用!不过没关系的,只要保证网站二十四小时能用,并且界面是英文就行了。明天能上线么?
  • 上述的例子充分的展现了用户的需求从一个简单的程序,拓展到一个满足各种服务的应用软件,完成一个较为完善的应用软件需要完成的工作和任务,不仅仅有程序的开发,更有整个系统的完善和后期维护,以及在软件开发前对用户需求的考虑和分析。

    问题2:软件工程的开发阶段是否与其他工程类似?

    在《构建之法》该书中,作者以飞机的研发过程为例,对比了软件开发的阶段和过程:
    

1.玩具阶段

   100个小孩里有99个叠过纸飞机,像图1-1中所示。
    “设计/制造纸飞机”的过程,看起来技术含量不高,但是也有很多窍门。有些小孩在放飞前,会用嘴对着纸飞机哈一口气,这里面也许有深奥的道理,也许只是迷信。在跟着这些飞机奔跑、欢呼的时候,这 
  些小孩心里一定有“我长大了,要开飞机在天上飞”的想法。纸飞机、航模飞机和真飞机一样,都体现了某些基本的理论。

2.业余爱好阶段

     多年以后,很多人还有“在天上飞”的想法。有人居然就实现了:
     肯特·柯西(Kent Couch),一位美国俄勒冈州的居民,在2007年用一百多个氦气球和一把椅子飞上了天。他说,“当你夏天躺在草地上的时候,看到白云飘过,你有没有幻想能跳到云朵上面?”所以他有一天忍不住就要实现他的梦想。

3.探索阶段

      和上面提到的偶尔“疯狂”的行为比起来,另外一些人能持续疯狂好几年。1903年冬天,经过几年的努力,美国人莱特兄弟在寒风凛冽的北卡罗来纳州海滩上试飞了他们的飞机。它飞了36.5米,历时12秒。几次试飞之后,大家还来不及在飞机面前合影留念,一阵狂风吹来,把飞机吹了几个跟头,大部分重要部件都毁坏了。
航空 软件 影响
玩具阶段:纸飞机/航模 用新的语言尝试写“hello world!” 影响只限于自己
爱好者的尝试阶段:气球+沙滩椅升空 用JavaScript写网站 气球升空、自己的博客都会吸引一些关注,即使失败之后,爱好者也能很快再次捡起兴趣
现行者的探索阶段:莱特兄弟飞行 在行业内创新,钻研新的技术 虽然失败了很多的原型,但为后续的创新和研发奠定了基础
成熟的工业阶段:飞机制造业、民航 银行软件系统,互联网行业,微软公司 软件的发布会影响一个公司乃至一个行业,一个重要软件遭遇挫折或失败,会导致很多人失去工作

问题3:工程和科学是否不同?

  - 中国大陆高校大多设有与“计算机科学”相关的院系。除了学术水平名列前茅的学校,其他学校的这些院系大部分老师做的都是偏工程方面的研究(所谓“横向项目”),大部分学生毕业后也投身于解决具体的工程问题,这跟软件学院、软件工程系(院)的研究和培养方向非常雷同。这是目前中国IT产业发展的现状,但并不是说世界上没有人研究计算机科学的各个领域,或者说计算机科学就等同于软件工程。

软件工程和计算机科学的其他领域也有很多交汇。软件和软件工程的早期开拓者有不少是从事硬件设计、计算机工程这些领域的工作,他们带来了相应领域的不少思想和术语。例如,冒烟测试(Smoke Test)就是从电路设计和测试行业借用过来的。软件工程的“工程”二字意味着它和许多工程领域的学科,以及管理学科有很大的关系。软件工程和机械工程、航空工程等工程学科一样,其中也有工程理论、质量控制论的原理。软件团队开发和维护软件的行动,就和质量控制理论中的PDCA(Plan-Do-Check-Act)模型有很深的联系。所有这些和“工程”相关的学科都有共性,它们和各种“科学”的学科还是有区别的。正如专家所归纳的:
1.哲学家的宗旨是:我思,故我在
2. 科学家的宗旨是:我发现,故我在
3.工程师的宗旨是:我构建,故我在

总结:

软件是专注的是大型系统的构造,由于软件的各种特殊性质,与其他工程也有很大的区别与不同。更准确的来说“软件 = 程序 + 软件工程”。

posted @ 2023-04-01 17:30  Hyuniiiiiiii  阅读(80)  评论(2编辑  收藏  举报