201871010130-周学铭 实验一 软件工程准备—通过《现代软件工程—构建之法》对软件工程的初步认识


项目 内容
课程班级博客链接 18卓越班
这个作业要求链接 实验一
我的课程学习目标 (1)学习博客园软件开发者学习社区使用技巧和经验。
(2)了解Github的基本操作。
这个作业在哪些方面帮助我实现学习目标 (1)通过本次作业,我们初步学会了博客园的使用。
(2)初步了解了Github的基本操作。
(3)阅读了《现代软件工程—构建之法》一书,
并对软件工程有了一定的认识

任务1:填写了关于自己对于软件工程课业水平调查的问卷
  • 较为详细的填写了关于自己软件工程的水平。
任务2:在博客园平台注册个人博客账号和加入班级博客
  • 由于之前已经注册过博客园的账号,所以这里只需加入班级博客,并进行相关的信息修改。
任务3:注册Github账号
  • 由于之前有创新创业的经历,所以已经注册过了GitHub账号
  • 同时去年暑假使用过类似与git的工具svn,所以对这方面也有一定的了解。
任务4:填写博客园、github账号信息
  • 如实详细的填写了问卷。
任务5:构建之法与博客首秀
  • Markdown语法:由于之前经常使用简书来记录总结一些知识点,所以对一些简单的Markdown语法有一定的了解。
    后续如果有时间,还得进一步为个人博客增加一些CSS,JS设置等,改善博客阅读体验。

对《现代软件工程—构建之法》的理解与看法(三个问题)

1. 程序与软件的区别

软件=程序+软件工程(摘自P2)

  • 邹欣老师在书中通过客户们对阿超的需求这个例子,解释了程序,软件构件过程,质量保障,软件测试,需求分析,程序理解等概念。让我们对几个概念有了初步认识。最后得到了软件=程序+软件工程的推论。
  • 通过前几年的计算机学习,“软件=程序+软件工程”这一概念,我的理解如下:
    • 软件就是一个系统,用户可以在其上面实现用户所需的各种功能,一般由前端和后台组成。
      • 前端用于用户进行各种操作,并连接了数据库,支持各种增删改操作。
      • 后台用于管理人员进行各种权限管理,页面的布局,功能的添加等。
    • 程序指用来实现某一特定功能的代码段,通常需要通过各种数据结构以及算法来进行复杂度上的优化。
    • 个人认为软件与程序的重要性:程序>软件。
      • 程序的编写,需要自己使用适合的数据结构和算法来优化,虽然如今各种语言的库已经比较完善了,但对于编程人员的要求还是极大的。
      • 对于软件,就根据之前写项目的经验来说,一个项目通常由好多人共同完成,为了规范化编程,通常使用各种API来实现最终功能。而且各种软件的重复性较高,市面上已经存在了各种成熟的框架,这大大降低了对程序员的要求。拿各种用来管理各种事务的网页来说,编程人员只需要熟悉并掌握MVC框架,再使用一些类似于JEECG的代码生成器和一些UI框架。仅需几周就可以编写一个简单且美观的网页。
  • 而通过阅读了邹欣老师的书,我发现事实并非如此。软件并不是简单的做一个网页。一个成熟的软件不仅需要做出一个美观且用户体验良好的界面,还必须经受住软件维护,服务运行,商业模式,安全性能,高并发性能等各种方面的考验。

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

软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。
软件工程和下列的学科相关:计算机科学、计算机工程、管理学、数学、项目管理学、质量管理、软件人体工学、系统工程、工业设计和用户体验设计。(P8)


软件开发的难题:复杂性;不可见性;易变性;服从性;非连续性。(P9)


|计算机科学|软件工程|
| :----:| :----:|
|发现和研究长期的、客观的真理|短期的实际结构(具体的软件会过时)|
|理想化的|对各种因素的折衷|
|确定性,完美,通用性|对不确定性和风险的管理,足够好,具体的应用|
|各个学科独立深入研究,做出成果|关注和应用各个相关学科的知识,解决问题|
|统一的理论|百花齐放的实践方法|
|形式化,追求简明的公式|在实践中建立起来的灵感和直觉|
|正确性|可靠性|
(P12)

  • 虽然我们学院有软件工程和计算机科学与技术这两个专业,但之前并没有思考过这两个专业的区别。仅仅知道这两个专业在课程的设立上有很大的区别。
  • 在后面的学习中,希望能对这两个学科的区别有深刻的认识,并着重于一方面进行深入研究。

3. 结对编程的作用与如何实现代码规范

代码风格的原则是:简明,易读,无二义性。(P70)


代码复审的形式
|名称|形式|目的|
|:---:|:---:|:---:|
|自我复审|自己vs.自己|用同伴复审的标准来要求自己。不一定最有效,因为开发者对自己总是过于自信。
如果能持之以恒,则对个人有很大好处。|
|同伴复审|复审者vs.开发者|简便易行|
|团队复审|团队vs.开发者|有比较严格的规定和流程,适用于关键的代码,以及复审后不再更新的代码覆盖率高
——有很多双眼睛盯着程序,但效率可能不高(全体人员都要到会)|
(P79)


两人的合作——如何影响对方(P89)

两人在一起和做,自然会出现不同意见,每个人都有自己的想法,在两个人平等合作的情况下,不存在领导与被领导的关系,如何能说服对方?
这个时候不是比谁的嗓门大,首先双方要意识到,问题早点出现要比晚点出现好很多,我们有机会早日解决问题。
除了技术方面的考虑外,一个成熟的工程师要琢磨对方的话语和观察对方的肢体语言,了解它们所表示的潜台词,试着从对方的角度看待问题。
同时也要根据情况采取不同的方法影响别人。

影响的方式有:断言;桥梁;说服;吸引。

没有绝对正确或错误的方法,只有合适或不合适的方法。

  • 对于代码规范,邹欣老师在书中指出这一点在软件开发中十分重要,但如何实现仅仅只是简单的提了一下。据我了解,对于JAVA来说,通过《重构》与《Effective Java》这两本书可以很全面的了解代码的设计和规范。
    同时还可以阅读《设计模式》来了解面向对象软件的几十种设计模式。
    在后面的学习中,需要对这三本书进行通读,来增强自己的代码设计能力
  • 对于结对编程,这一概念是第一次接触。通过邹欣老师的描述,我认为这种模式对于软件工程这一门课有着极大帮助。
    在后面的学习中应该积极参与结对编程。

总结:虽然书上还用了大篇幅来具体讲解了软件工程这一门课的各个组成。但在正式学习这门课之前,我认为最重要的还是通过阅读邹欣老师的书,并从中找到适合以后进行软件工程学习的方法,减少以后学习过程中的弯路,提高学习的效率。对于这门课的主体知识,我们可以在以后的学习中,慢慢积累和学习。

posted @ 2021-03-09 21:49  z_thorn  阅读(254)  评论(4编辑  收藏  举报