前言:

今年是特殊的一年,由于新冠病毒的爆发,导致我们无法正常开学,所以网上开课如期进行,其中软件构造是这学期我们要面临的巨大挑战。

准备工作:

上学期末得知本门课程需要学习Java语言进行编程,所以在寒假刚开始,就选择了MOOC上北京大学的Java程序设计这门课程。MOOC链接
这门课程的分类很细,而且有基础的选择题,大概用了10天左右的时间就完成了视频的观看。本以为已经可以达到编写一般Java程序的程度,但在真正实验过程中,才发现学习的不是很扎实,这都是因为没有“熟能生巧”的缘故,纸上谈兵是不可能打好每一场仗的。

了解

软件构造(Software Construction),还没了解时,认为这门课程只是在考验我们的编程,用来完成一些完整的软件,感觉上就是一个个小问题的叠加,没有什么难度。但是上完第一堂网课后就彻底颠覆了对这门课的看法。
首先我们要先了解什么是软件。软件一般分为系统软件和应用软件两种,而软件是直接面向用户的,所以要想做到让用户满意,就需要软件开发人员构建高质量的软件。
一个高质量的软件设计过程是十分复杂的,有很多需要构造者满足的条件,比如可理解性、可维护性、可复用性、健壮性、时空性能等;如果在一个项目的生命周期的前、中、后期都强调质量,那么一个高质量的计划、高效的实践以及系统测试是必不可少的。

主要内容

- 软件构造过程中的多维度视图


这幅图详细写出了各个维度之间的关系

  1. 编译时&运行时

  2. 代码角度&模块角度

  3. 时刻&时段

三个维度,相互组成,软件所关注的内容也不相同,对于软件的编写也会产生不同的影响

维度组合 内容
编程时、代码角度、时刻 考虑源代码如何由基本程序块组织以及依赖关系
1.词汇层面
2.语法层面(AST)
3.语义层面(Class Diagram)
编程时、代码角度、时段 Code churn 代码变化
体现在代码行的增、删、改和文件版本的变换
编程时、模块角度、时刻 1.源代码被物理地组织成文件,这些文件进一步被目录组织起来
2.文件被封装到包中,并且在逻辑上被封装到组件和子系统中
3.可重用模块以库的形式存在
所以开发者一般会调用库中的模块来编写程序
编程时、模块角度、时段 用版本来记录各项软件实体随时间的变化
软件随需求进化,在维护、更新时,版本记录可以很好的帮助
运行时、代码角度、时刻 代码快照:描述程序运行时内存里变量层面的状态,分析内存占用情况等
运行时、代码角度、时段 利用UML以动态的形式描述类
运行时、模块角度、时刻 模块分析
运行时、模块角度、时段 log日志

各个维度之间的关系如下图所示:

- 软件构造的质量目标

上一部分搞清楚了“要构造的结果是什么”, 这一部分要理解清楚“构造的结果如何才算好”

软件系统的质量特性

  • 外部和内部质量因素
    外部质量因素影响用户,内部质量因素影响软件本身和开发者。外部质量取决于内部质量
  • 重要的外部质量因素
  • 质量因素之间的权衡

外部质量因素

  • 正确性
    若输入正确,输出也正确(至高无上的质量指标)
  • 健壮性
    针对异常情况的处理,遇到异常不能“崩溃”,是对正确性的补充
  • 拓展性
    软件能够根据需求调整变化的能力
  • 复用性
    一次开发,多次使用
  • 兼容性
    不同的软件系统之间相互可容易的集成
  • 高效性
    软件系统对硬件资源的需求程度(保证正确性的前提下)
  • 移植性
    软件可方便的在不同的技术环境之间移植
  • 易用性
    软件用户更便于使用我们开发的软件
  • 功能性
    系统尽可能提供更加全面的功能
  • 及时性
    在用户需求之前完成软件开发很重要
  • 其他
    可验证性,完整性,可修复性,经济性等等

内部质量因素

  • 代码量
  • 高聚合,低耦合
  • 易读易理解
  • 复杂度
  • 规模
  • 其他

质量因素之间的折中考虑

“正确性”绝不能与其他质量因素折中

  • 完备性与易用性
  • 经济性与功能性
  • 高效性可移植性
  • 高效性与复用性
  • 经济性与复用性
  • 及时性与扩展性

软件建设五大质量目标

  • 易于理解:优雅优美的代码/易懂
  • 随时可以更改:可维护性和适应性
  • 开发成本低:为重用而设计:可重用性
  • 安全无漏洞:健壮性
  • 高效运行:性能

2020春季学期哈工大软件构造学习心得一相关推荐

  1. 2020春季学期哈工大软件构造学习心得二

    前言 上一章主要讲了软件构造的结果形态以及如何是一个"好"的软件 这一章主要学习软件开发遵循着一个什么样的过程 - 软件生命周期与配置管理 From 0 to 1,from 1 t ...

  2. 2020春季学期哈工大软件构造学习心得三

    Abstract Data Type (ADT) and ObjectOriented Programming (OOP) 前言 前两章回答了:什么是"高质量的软件". 如何从不同 ...

  3. 2020春季学期哈工大软件构造学习心得五

    面向对象的编程 面向对象的标准 "准备更改"和"为重用而设计"的泛型(泛型):应该可以用表示任意类型的形式泛型参数编写类. 继承:应该可以将一个类定义为继承自另 ...

  4. 2020春季学期哈工大软件构造学习心得四

    程序设计语言中的函数和方法 参数类型是否匹配,在静态类型检查阶段完成 返回值类型是否匹配,也在静态类型检查阶段完成 规约:交流编程 Spec给"供需双方"都确定了责任,在调用的时候 ...

  5. HIT-2022年春季学期《软件构造》Lab 1实验心得

    目录 2022年春季学期计算学部<软件构造> 课程Lab 1实验心得 1.实验目标概述 2.实验环境配置 3.实验过程 3.1 Magic Squares ​​​​​​​3.2 Turtl ...

  6. 哈工大软件构造学习笔记1 Views and Quality Objectives of Software Construction

    先要搞清楚软件构造的对象是什么,如何刻画,在关注如何构造. 1,Five key quality objectives of software construction 软件构造的五个关键质量目标 容 ...

  7. HIT软件构造-学习心得

    伪代码编程 伪代码是指某种用来描述算法.子程序.类或完整程序的工作逻辑的.非形式的.类似于英语的记法. 1. 用类似英语的语句来精确描述特定的操作 2. 避免使用目标编程语言中的语法元素 这点是关键, ...

  8. 2022哈工大软件构造lab1小结(知识点)

    哈工大软件构造lab1小结 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 问题一 使用的库 异常处理机制 字符串内容检查 写入文件 问题二 problem 3:画一 ...

  9. 哈工大软件构造期末知识点总结

    哈工大软件构造试题构成: 1.30-45分的选择题,10-20题 2.55-70分的简答与设计题,5-6题 考试知识点(不全面): 1.git工具的知识点 2.Java设计模式(一共有23个,主要考察 ...

最新文章

  1. ​Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机
  2. 御泥坊搜索引擎优化网络诊断_掌握以下这些网络营销搜索引擎优化技巧,你的排名想不靠前都难!...
  3. 现代谱估计:多窗口谱相关性
  4. wps 模拟分析 规划求解_【网友来稿】利用Excel求解线性规划问题
  5. NUMTRYE - Number Theory (Easy)
  6. ssl2648-线段树练习5【线段树】
  7. YY:马化腾的大漏招
  8. 微服务技术栈:常见注册中心组件,对比分析
  9. 应急响应前移:从事后到事前
  10. 【光学】基于matlab GUI带切趾的光线布拉格光栅滤波特性仿真【含Matlab源码 1505期】
  11. [GIS原理] 10.1 空间统计描述(描述性分析、探索性数据分析)、空间自相关分析 - QQ图、权重矩阵、Moran'sl、G统计量
  12. 一切皆是文件:UNIX,Linux 操作系統的設計哲學
  13. mybatis 大小写 字符串_Mybatis查询时,区分大小写操作
  14. 近几年CVPR图像压缩总结
  15. 看见“信任”,可信计算平台的由来解读(TPM、TCM、TPCM、等保2.0解读)。
  16. 关于module ‘datetime‘ has no attribute ‘now‘报错解决方案
  17. =,==,===的区别
  18. mysql rollback to,MySQL存储过程SAVEPOINT ROLLBACK to
  19. 《内网安全攻防:渗透测试实战指南》读书笔记(二):内网信息收集
  20. Python 之网络编程之socket(3)hashlib模块

热门文章

  1. 基于curl 的zabbix API调用
  2. select2搜索内容显示搜索词
  3. Aseprite常用快捷键大全
  4. 超高性价比 光纤互联解决方案良心推荐
  5. Pivotal,天赋而成的云原生转型引导者
  6. Assembly x64 Intro - XMM ABS
  7. html5页面打不开原因,部分网页打不开是什么原因,详细教您网页打不开怎么解决...
  8. 贵阳副市长刚写了一本区块链的书,趁热乎推荐给你!
  9. firefly游戏服务器学习笔记 6———— db模块
  10. k8s滚动更新(六)--技术流ken