202031607312-孙熙-实验一 软件工程准备—初识博客园和github

发布时间 2023-04-01 20:17:15作者: sunxi234
项目 内容
班级博客链接 2023年春软件工程(2020级计算机科学与技术)
本次作业要求链接 实验一 软件工程准备
我的课程学习目标 学习博客园软件开发者学习社区使用技巧和经验。
了解Github的基本操作。
本次作业在哪些方面帮我实现学习目标 在本次作业中,我学会使用博客园和github基本操作并注册了账号,同时初步使用了markdown,学会一些基本操作

实验内容

  • 任务1:调查问卷 提交课程调查问卷
    • 在网站中已经填写完成调查问卷
  • 任务2:在博客园平台注册个人博客账号和加入班级博客
  • 任务3:注册Github账号
  • 任务4:点击链接填写博客园账号与github账号的链接
    • 完成博客园账号与github账号的链接
  • 任务5:构建之法与博客首秀

问题1:软件工程的目标--创造“足够好”的软件

什么是好的软件?一些同学认为,所谓好软件,就是软件没有缺陷(Bug),所谓软件工程,就是把软件中的Bug都消灭掉的过程。这的确是抓住了软件工程的一个要素。和软件打交道的专业人士都知道软件有“Bug”,软件团队的很多人都整天和Bug打交道,Bug的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性和可维护性。例如:
用户满意度:用户使用时发现了很多Bug,影响了用户使用软件的效率。

  • 可靠性:某个软件经常会崩溃,某个操作系统会时不时死机。
  • 软件流程的质量:软件团队和开发流程的问题太多,导致团队成员无法互相协作,按时交付软件。这也可以说是软件团队的Bug。
  • 可维护性:某个软件太难维护了,按下葫芦起了瓢,修复了一个问题,另一个问题又出来了。也没有足够的文档,维护人员表示需要更多的资金和时间来维护这个软件。

作者认为,好的软件是没有缺陷的,好的软件很可靠:不会经常崩溃;好的软件流程上质量高:开发流程上问题很少;好的软件容易维护:不需要很多资金和时间维护。

问题2:为什么要做代码复审

首先,在代码复审中发现的问题,绝大多数都可以由开发者独立发现。从这一意义上说,复审者是在替开发者干开发者本应干的事情。
问:这么说如果开发者做到完美,复审者的时间和精力就是一种浪费了?
答:不对,即使是完美,代码复审也还有“教育”和“传播知识”的作用。更重要的是,不管多么厉害的开发者都会或多或少地犯一些错误,有欠考虑的地方,如果有问题的代码已签入到产品代码中,再要把所有的问题找出来就更困难了。大家学习软件工程都知道,越是项目后期发现的问题,修复的代价越大。代码复审正是要在早期发现并修复这些问题。另外,在代码复审中的提问与回应能帮助团队成员互相了解,就像练武之人互相观摩点评一样。团队中有新成员加入时,代码复审能非常有效地帮助新成员了解团队的开发策略、编程风格及工作流程。
问:新成员是否应该在完全掌握了这些方面之后再写代码?
答:理论上是如此。但是如果我们要“完全掌握”,可能需要比较长的时间,另外,如果不开发实际的软件,这样的“完全掌握”有意义么?还是在实际中学习吧。这也是“做中学”思想的体现。

作者认为,代码复审可以起到传播知识的作用,并且在软件后期可能会有大问题,复审可以在早点发现并解决。

问题3:软件开发过程有什么特别的难题?

  • 复杂性
    软件可以说是人类创造的最复杂的系统类型。大型软件(操作系统、办公软件、搜索引擎)有超过百万行的源代码,上万个不同的文件。而软件工程师通常一次只能看到30—80行源代码(相当于显示器的一屏),他们的智力、记忆力和常人差不多。软件的各个模块之间有各种显性或隐性的依赖关系,随着系统的成长和模块的增多,这些关系的数量往往以几何级数的速度增长。
  • 不可见性
    软件工程师能直接看见源代码,但是源代码不是软件本身。软件以机器码的形式高速运行,还可能在几个CPU核上同时运行,工程师是“看”不到自己的源代码如何具体地在用户的机器上被执行的。商用软件出现了错误,工程师可以看到程序在出错的一瞬间留下的一些痕迹(错误代号、大致的目标代码位置、错误信息),但是几乎无法完整重现到底程序出现了什么问题。
  • 易变性
    软件看上去很容易修改,修改软件比修改硬件容易多了。人们自然地期待软件能在下面两种情况下“改变”: a) 让软件做新的事情;b) 让软件适应新的硬件。但是与此同时,正确地修改软件是一件很困难的事情。
  • 服从性
    软件不能独立存在,它总是要运行在硬件上面,它要服从系统中其他组成部分的要求,它还要服从用户的要求、行业系统的要求(例如银行利率的变化)。
  • 非连续性
    人们比较容易理解连续的系统:增加输入,就能看到相应输出的增加。但是许多软件系统却没有这样的特性,有时输入上很小的变化,会引起输出上极大的变化。

作者认为,软件具有复杂性,不可见性,易变性,服从性,非连续性。软件是非常复杂的,有百万行代码和上万个文件。工程师只能看见代码,不能看见软件本身。软件也很难作出修改,且不能独立存在。软件是非连续的,输入并不一定能增加输出。