软件工程网课笔记

发布时间 2024-01-11 21:55:47作者: yuooo

前言:课程是学堂在线清华大学的软件工程课程,但是没有按照正常顺序学习;

同样的个人还是更习惯使用飞书记录,所以这里先给出第一章的内容,后续内容请查看:https://f1g48hqfc05.feishu.cn/docx/V6WmdI0CAoPg1dxPTtocmNmUnnb?from=from_copylink

使用愉快!^(* ̄(oo) ̄)^


 

第一周——软件工程概述

课程笔记

软件=程序+数据+文档

  程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能。
  数据:使得程序能够适当地操作信息的数据结构。
  文档:描述程序的研制过程、方法和使用的图文资料。
软件的定义:是软件工程的研究对象,也是软件工程的产品形态与客观存在。
并且,在程序运行的过程中,才能观察到软件的功能和性能。软件更像是嵌入式的数字化知识。
 

软件具有复杂性、一致性、可变性和不可见性等固有的内在特性,这是造成软件开发困难的根本原因。

复杂性:在软件的使用过程中,系统的状态更为复杂,难以用图形进行描述。这种复杂性会给软件开发管理和质量保证带来困难。
一致性:软件不能独立存在,需要依附于一定的环境(如硬件、网络以及其他软件)
软件必须遵从人为的惯例并适应已有的技术和系统。
软件需要随接口不同而改变,随时间推移而改变,而这些变化是不同人设计的效果。
可变性:软件在使用的过程中就会一直随需而变。
但是实际上在不断的修改过程中可能会导致软件的退化,从而结束其生命周期。
不可见性:不具有空间的形体特征,并且软件以机器代码的形式运行,限制了软件的设计过程,也严重地阻碍了相互之间人与人的交流,从而对开发过程的管理造成困难。

软件开发面临的挑战

软件开发的现状:软件在预期时间内、按既定需求完成的比例较低。

软件工程的基础概念

工程:是将理论和知识应用于实践的科学,其目的是经济有效的解决实际问题。
软件工程:是为了解决开发成本效益和软件的质量而产生的,倡导以工程的原理、原则和方法进行软件的开发,用系统的、可控的、有效的方式构建高质量的软件产品。
软件工程是:①将系统的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应用到软件上;②对①中所述方法的研究。
最终目标是要创造出这样的软件:
  1. 较低的开发成本
  2. 按时完成开发任务并及时交付
  3. 实现客户要求的功能
  4. 具有良好性能、可靠性、可扩展性、可移植性等;
  5. 软件维护费用低
 

软件工程的三个基本要素

  1. 过程(支持软件开发各个环节的控制和管理)
是一系列开发活动,将用户需求转化成一系列用户满意的产品,通过对开发过程中对各个活动环节质量的有效控制,来保证最终产品的质量。
  1. 方法(完成软件开发任务的技术手段)
  1. 工具(为软件开发方法提供自动或半自动的软件支撑环境)
 

软件开发的基本策略

软件复用:能提高开发效率和产品质量,降低维护成本,包括对系统内库函数、类库、模板(文档、网页等)、设计模式、组件、框架等的复用。
分而治之:将问题拆分成为小问题进行解决,最后进行组装。
逐步演进:软件开发应该遵循软件的客观规律,不断进行迭代式增量开发,最终交付符合客户价值的产品。
优化折中:优化是一个多目标的最优决策,在不可能使所有目标都得到优化时,需要进行折中实现整体最优。
对软件工程有重要意义的技术:
  1. 抽象:降低复杂度。
  2. 软件建模:帮助工程师理解和刻画系统的分析结果,便于开发人员沟通和交流。
  3. 用户界面原型化:客服需求难以确定的困难。
  4. 软件体系结构:对于软件质量至关重要。
  5. 软件过程
  6. 复用
  7. 度量
  8. 工具和集成环境:对于提高软件开发效率非常重要。
 

在公司的在日常开发过程中遇到的问题:

  1. 需要平衡软件的质量与软件的开发周期:面临市场挑战,如何能够在最短的时间内开发出最快捷、最有效、最好用的软件。
  2. 如何让团队成员并行地工作—>项目管理与项目协同:如何让很多人一起开发这个软件,并且这个软件还能够同时运行在同一台电脑上。
  3. 单元测试、集成测试、用户使用测试保证软件质量。
  4. 科学地使用软件工程的模式、使用科学的管理方法能够使不同的人的思路进行耦合、以规范的方式相互配合最后做出一个成功的产品。
  5. 在软件开发的过程中,人的重要特质: a. 极强的代码阅读、理解、书写能力;
    1. 团队成员需要有极强的责任心与对整个软件产业的敬畏之心,对前人的敬畏、对用户感知的困敬畏;
    2. 要从自己的开发工作中自我反省、自我提升,为代码、程序负责任,也对代码所带来的体验负责任;
    3. 职业道德:对代码品质的保证、对公司机密的保护......
    4. 程序员之间的协同能力;
 

我的思考

软件工程的最终目的就是通过合理的设计模式、任务管理方法在任务期限内完成一款用户友好的产品制作,这个过程中需要使用适当的工具进行项目管理,使得团队里的人并行地制作一款软件,也就是将一个大的软件进行分层、分模块、分功能。
这个过程更像是对于性格的考验:要与不同的人进行合作、要在任何情况下保证自己代码的质量、保持严谨的态度进行单元测试、集成测试、用户测试,即使“软件测试”也已经被分派给专门的人去做,在最初进行代码书写时也应当设想部分可能出现的故障,降低返工率,这样或许能够从“低级的码农”破局。