软件工程-20210906
软件是什么?
用计算机等载体拓展人类能力,解决用户问题的工具。
根据百科的定义,软件是程序和其文档。
程序:程序是通过程序设计语言来实现的。在低级程序语言如机器语言、汇编语言中,程序是一组有序的指令序列及有关的数据;在高级程序语言中,程序通常是一组说明和语句。程序必须装入计算机内部才能实际起作用。
软件工程的若干问题:
1.质量保障
是否存在或找到最小的测试用例能覆盖程序执行的所有可能分支?是否归纳完整可能的异常使用场景?需求是否合理、准确?
2.软件架构
是否存在或找到一个较好的组织代码的方式来实现软件系统,并且保证迭代演化后软件系统没有退化?
3.效益成本
如何寻找软件开发费用与投资人和用户满意度平衡点?是否能设计出一种可持续发展的软件演化途径和模式?
4.优化资源分配:软件开发项目技术、人力、时间、质量等优化问题。
5.代码重构方法:系统中的程序代码能否重构和使用什么方法重构?
(上述具体问题值得思考,但个人不太认同上述归纳和分类,觉得有些混乱,比如需求是否合理放在质量保障?感觉可以从层级进行划分吧:代码层面,工程层面,用户层面;或者过程:需求、开发、管理、部署、测试、维护等)
两种创造软件的方式:
1.人类总结经验,让机器执行(占95%)。
2.人类提供样本,训练机器总结经验。
对于上图,其实也有异议。常规的自然没什么问题,但是机器学习的软件开发范式中,输入未必是Program,应该是Program或Output。当然这里的Program可能有更宽泛的含义,是我太过执着于字眼了。